Add support for optimized resource shrinking flag in compiledump
Bug: b/380222890
Change-Id: Ibcc9a960d8a9856ac7328af62e4c6d7cd9561e63
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 489f9e0..f2197c4 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -1526,6 +1526,11 @@
.applyIf(
featureSplitConfiguration != null,
b -> b.setIsolatedSplits(featureSplitConfiguration.isIsolatedSplitsEnabled()))
+ .applyIf(
+ resourceShrinkerConfiguration != null,
+ b ->
+ b.setOptimizedResourceShrinking(
+ resourceShrinkerConfiguration.isOptimizedShrinking()))
.build();
}
diff --git a/src/main/java/com/android/tools/r8/dump/DumpOptions.java b/src/main/java/com/android/tools/r8/dump/DumpOptions.java
index f2beb28..052a6de 100644
--- a/src/main/java/com/android/tools/r8/dump/DumpOptions.java
+++ b/src/main/java/com/android/tools/r8/dump/DumpOptions.java
@@ -47,6 +47,7 @@
private static final String INTERMEDIATE_KEY = "intermediate";
private static final String INCLUDE_DATA_RESOURCES_KEY = "include-data-resources";
private static final String ISOLATED_SPLITS_KEY = "isolated-splits";
+ private static final String OPTIMIZED_RESOURCE_SHRINKING = "optimized-resource-shrinking";
private static final String TREE_SHAKING_KEY = "tree-shaking";
private static final String MINIFICATION_KEY = "minification";
private static final String FORCE_PROGUARD_COMPATIBILITY_KEY = "force-proguard-compatibility";
@@ -66,6 +67,7 @@
private final Optional<Boolean> intermediate;
private final Optional<Boolean> includeDataResources;
private final Optional<Boolean> isolatedSplits;
+ private final Optional<Boolean> optimizedResourceShrinking;
private final Optional<Boolean> treeShaking;
private final Optional<Boolean> minification;
private final Optional<Boolean> forceProguardCompatibility;
@@ -113,7 +115,8 @@
Map<String, String> systemProperties,
boolean dumpInputToFile,
String traceReferencesConsumer,
- AndroidResourceProvider androidResourceProvider) {
+ AndroidResourceProvider androidResourceProvider,
+ Optional<Boolean> optimizedResourceShrinking) {
this.backend = backend;
this.tool = tool;
this.compilationMode = compilationMode;
@@ -125,6 +128,7 @@
this.intermediate = intermediate;
this.includeDataResources = includeDataResources;
this.isolatedSplits = isolatedSplits;
+ this.optimizedResourceShrinking = optimizedResourceShrinking;
this.treeShaking = treeShaking;
this.minification = minification;
this.forceProguardCompatibility = forceProguardCompatibility;
@@ -173,9 +177,12 @@
addOptionalDumpEntry(buildProperties, INTERMEDIATE_KEY, intermediate);
addOptionalDumpEntry(buildProperties, INCLUDE_DATA_RESOURCES_KEY, includeDataResources);
addOptionalDumpEntry(buildProperties, ISOLATED_SPLITS_KEY, isolatedSplits);
+ addOptionalDumpEntry(buildProperties, OPTIMIZED_RESOURCE_SHRINKING, isolatedSplits);
addOptionalDumpEntry(buildProperties, TREE_SHAKING_KEY, treeShaking);
addOptionalDumpEntry(
buildProperties, FORCE_PROGUARD_COMPATIBILITY_KEY, forceProguardCompatibility);
+ addOptionalDumpEntry(
+ buildProperties, OPTIMIZED_RESOURCE_SHRINKING, optimizedResourceShrinking);
} else {
addDumpEntry(buildProperties, TRACE_REFERENCES_CONSUMER, traceReferencesConsumer);
}
@@ -251,6 +258,9 @@
case ISOLATED_SPLITS_KEY:
builder.setIsolatedSplits(Boolean.parseBoolean(value));
return;
+ case OPTIMIZED_RESOURCE_SHRINKING:
+ builder.setOptimizedResourceShrinking(Boolean.parseBoolean(value));
+ return;
case TREE_SHAKING_KEY:
builder.setTreeShaking(Boolean.parseBoolean(value));
return;
@@ -391,6 +401,7 @@
private Collection<ArtProfileProvider> artProfileProviders;
private Collection<StartupProfileProvider> startupProfileProviders;
private AndroidResourceProvider androidResourceProvider;
+ private Optional<Boolean> optimizedResourceShrinking = Optional.empty();
private boolean enableMissingLibraryApiModeling = false;
private boolean isAndroidPlatformBuild = false;
@@ -472,6 +483,10 @@
return this;
}
+ public void setOptimizedResourceShrinking(boolean optimizedResourceShrinking) {
+ this.optimizedResourceShrinking = Optional.of(optimizedResourceShrinking);
+ }
+
public Builder setForceProguardCompatibility(boolean forceProguardCompatibility) {
this.forceProguardCompatibility = Optional.of(forceProguardCompatibility);
return this;
@@ -581,7 +596,8 @@
systemProperties,
dumpInputToFile,
traceReferencesConsumer,
- androidResourceProvider);
+ androidResourceProvider,
+ optimizedResourceShrinking);
}
public AndroidResourceProvider getAndroidResourceProvider() {
diff --git a/src/main/java/com/android/tools/r8/utils/CompileDumpCompatR8.java b/src/main/java/com/android/tools/r8/utils/CompileDumpCompatR8.java
index 3e484d4..ab542a4 100644
--- a/src/main/java/com/android/tools/r8/utils/CompileDumpCompatR8.java
+++ b/src/main/java/com/android/tools/r8/utils/CompileDumpCompatR8.java
@@ -49,6 +49,7 @@
"--release",
"--enable-missing-library-api-modeling",
"--android-platform-build",
+ "--optimized-resource-shrinking",
ISOLATED_SPLITS_FLAG);
private static final List<String> VALID_OPTIONS_WITH_SINGLE_OPERAND =
@@ -120,6 +121,7 @@
int threads = -1;
BooleanBox enableMissingLibraryApiModeling = new BooleanBox(false);
BooleanBox androidPlatformBuild = new BooleanBox(false);
+ BooleanBox optimizedResourceShrinking = new BooleanBox(false);
BooleanBox isolatedSplits = new BooleanBox(false);
for (int i = 0; i < args.length; i++) {
String option = args[i];
@@ -151,6 +153,9 @@
case "--android-platform-build":
androidPlatformBuild.set(true);
break;
+ case "--optimized-resource-shrinking":
+ optimizedResourceShrinking.set(true);
+ break;
case ISOLATED_SPLITS_FLAG:
isolatedSplits.set(true);
break;
@@ -302,6 +307,11 @@
ResourceShrinkerDumpUtils.setupBaseResourceShrinking(
finalAndroidResourcesInput, finalAndroidResourcesOutput, commandBuilder),
"Failed initializing resource shrinker.");
+ runIgnoreMissing(
+ () ->
+ ResourceShrinkerDumpUtils.setOptimziedResourceShrinking(
+ optimizedResourceShrinking.get(), commandBuilder),
+ "Failed setting optimized resource shrinking flag.");
}
if (desugaredLibKeepRuleConsumer != null) {
commandBuilder.setDesugaredLibraryKeepRuleConsumer(desugaredLibKeepRuleConsumer);
diff --git a/src/main/java/com/android/tools/r8/utils/compiledump/ResourceShrinkerDumpUtils.java b/src/main/java/com/android/tools/r8/utils/compiledump/ResourceShrinkerDumpUtils.java
index 8ab1c93..c4964c1 100644
--- a/src/main/java/com/android/tools/r8/utils/compiledump/ResourceShrinkerDumpUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/compiledump/ResourceShrinkerDumpUtils.java
@@ -22,4 +22,8 @@
builder.setAndroidResourceProvider(new ArchiveProtoAndroidResourceProvider(input));
builder.setAndroidResourceConsumer(new ArchiveProtoAndroidResourceConsumer(output));
}
+
+ public static void setOptimziedResourceShrinking(boolean value, R8Command.Builder builder) {
+ builder.setResourceShrinkerConfiguration(b -> b.enableOptimizedShrinkingWithR8().build());
+ }
}
diff --git a/tools/compiledump.py b/tools/compiledump.py
index 43267ef..c27fcf8 100755
--- a/tools/compiledump.py
+++ b/tools/compiledump.py
@@ -150,6 +150,10 @@
help='Run as a platform build',
default=False,
action='store_true')
+ parser.add_argument('--optimized-resource-shrinking',
+ help='Use optimized resource shrinking',
+ default=False,
+ action='store_true')
parser.add_argument('--compilation-mode',
'--compilation_mode',
help='Run compilation in specified mode',
@@ -427,6 +431,10 @@
return True
return build_properties.get('android-platform-build') == 'true'
+def determine_optimized_resource_shrinking(args, build_properties):
+ if args.optimized_resource_shrinking:
+ return True
+ return build_properties.get('optimized-resource-shrinking') == 'true'
def determine_enable_missing_library_api_modeling(args, build_properties):
if args.enable_missing_library_api_modeling:
@@ -600,6 +608,8 @@
classfile = determine_class_file(args, build_properties)
android_platform_build = determine_android_platform_build(
args, build_properties)
+ optimized_resource_shrinking = determine_optimized_resource_shrinking(
+ args, build_properties)
enable_missing_library_api_modeling = determine_enable_missing_library_api_modeling(
args, build_properties)
mode = determine_compilation_mode(args, build_properties)
@@ -715,6 +725,8 @@
cmd.extend(['--classfile'])
if android_platform_build:
cmd.extend(['--android-platform-build'])
+ if optimized_resource_shrinking:
+ cmd.extend(['--optimized-resource-shrinking'])
if enable_missing_library_api_modeling:
cmd.extend(['--enable-missing-library-api-modeling'])
if args.threads: