Allow using directive for proto shrinking
Change-Id: Ia94489bd74e22a5b87f94c75ecdb8890190bd732
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java b/src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java
index 8b86596..3598fd8 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java
@@ -70,6 +70,7 @@
private boolean keepRuleSynthesisForRecompilation = false;
private boolean configurationDebugging = false;
private boolean dontUseMixedCaseClassnames = false;
+ private boolean protoShrinking = false;
private int maxRemovedAndroidLogLevel = 1;
private ProguardKeepRule keepAllRule;
@@ -290,6 +291,10 @@
this.dontUseMixedCaseClassnames = dontUseMixedCaseClassnames;
}
+ public void enableProtoShrinking() {
+ protoShrinking = true;
+ }
+
public int getMaxRemovedAndroidLogLevel() {
return maxRemovedAndroidLogLevel;
}
@@ -357,6 +362,7 @@
keepDirectories.build(),
configurationDebugging,
dontUseMixedCaseClassnames,
+ protoShrinking,
maxRemovedAndroidLogLevel,
keepAllRule);
@@ -431,6 +437,7 @@
private final ProguardPathFilter keepDirectories;
private final boolean configurationDebugging;
private final boolean dontUseMixedCaseClassnames;
+ private final boolean protoShrinking;
private final int maxRemovedAndroidLogLevel;
private final ProguardKeepRule keepAllRule;
@@ -473,6 +480,7 @@
ProguardPathFilter keepDirectories,
boolean configurationDebugging,
boolean dontUseMixedCaseClassnames,
+ boolean protoShrinking,
int maxRemovedAndroidLogLevel,
ProguardKeepRule keepAllRule) {
this.parsedConfiguration = parsedConfiguration;
@@ -513,6 +521,7 @@
this.keepDirectories = keepDirectories;
this.configurationDebugging = configurationDebugging;
this.dontUseMixedCaseClassnames = dontUseMixedCaseClassnames;
+ this.protoShrinking = protoShrinking;
this.maxRemovedAndroidLogLevel = maxRemovedAndroidLogLevel;
this.keepAllRule = keepAllRule;
}
@@ -681,6 +690,10 @@
return dontUseMixedCaseClassnames;
}
+ public boolean isProtoShrinkingEnabled() {
+ return protoShrinking;
+ }
+
public int getMaxRemovedAndroidLogLevel() {
return maxRemovedAndroidLogLevel;
}
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
index f1a2b0f..7e9ed91 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
@@ -71,7 +71,6 @@
// TODO(b/62524562): we may support this later.
"mergeinterfacesaggressively",
"android",
- "shrinkunusedprotofields",
"allowruntypeandignoreoptimizationpasses",
"dontshrinkduringoptimization",
"convert_proto_enum_to_string");
@@ -286,6 +285,8 @@
if (isOptionalArgumentGiven()) {
configurationBuilder.setPrintUsageFile(parseFileName(false));
}
+ } else if (acceptString("shrinkunusedprotofields")) {
+ configurationBuilder.enableProtoShrinking();
} else if (acceptString("verbose")) {
configurationBuilder.setVerbose(true);
} else if (acceptString("ignorewarnings")) {
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 173d169..c9a9165 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -148,6 +148,19 @@
disableAllOptimizations();
}
configurationDebugging = proguardConfiguration.isConfigurationDebugging();
+ if (proguardConfiguration.isProtoShrinkingEnabled()) {
+ enableProtoShrinking();
+ }
+ }
+
+ void enableProtoShrinking() {
+ applyInliningToInlinee = true;
+ enableFieldBitAccessAnalysis = true;
+ enableStringSwitchConversion = true;
+ protoShrinking.enableGeneratedMessageLiteShrinking = true;
+ protoShrinking.enableGeneratedMessageLiteBuilderShrinking = true;
+ protoShrinking.enableGeneratedExtensionRegistryShrinking = true;
+ protoShrinking.traverseOneOfAndRepeatedProtoFields = false;
}
void disableAllOptimizations() {
@@ -997,17 +1010,10 @@
public static class ProtoShrinkingOptions {
- public boolean enableGeneratedExtensionRegistryShrinking =
- System.getProperty("com.android.tools.r8.generatedExtensionRegistryShrinking") != null;
-
- public boolean enableGeneratedMessageLiteShrinking =
- System.getProperty("com.android.tools.r8.generatedMessageLiteShrinking") != null;
-
- public boolean enableGeneratedMessageLiteBuilderShrinking =
- System.getProperty("com.android.tools.r8.generatedMessageLiteBuilderShrinking") != null;
-
- public boolean traverseOneOfAndRepeatedProtoFields =
- System.getProperty("com.android.tools.r8.traverseOneOfAndRepeatedProtoFields") == null;
+ public boolean enableGeneratedExtensionRegistryShrinking = false;
+ public boolean enableGeneratedMessageLiteShrinking = false;
+ public boolean enableGeneratedMessageLiteBuilderShrinking = false;
+ public boolean traverseOneOfAndRepeatedProtoFields = true;
public boolean isProtoShrinkingEnabled() {
return enableGeneratedExtensionRegistryShrinking
diff --git a/src/test/java/com/android/tools/r8/R8TestBuilder.java b/src/test/java/com/android/tools/r8/R8TestBuilder.java
index f847f34..1031845 100644
--- a/src/test/java/com/android/tools/r8/R8TestBuilder.java
+++ b/src/test/java/com/android/tools/r8/R8TestBuilder.java
@@ -427,6 +427,10 @@
return self();
}
+ public T enableProtoShrinking() {
+ return addKeepRules("-shrinkunusedprotofields");
+ }
+
public T enableSideEffectAnnotations() {
if (!enableSideEffectAnnotations) {
enableSideEffectAnnotations = true;
diff --git a/src/test/java/com/android/tools/r8/internal/YouTubeV1419TreeShakeJarVerificationTest.java b/src/test/java/com/android/tools/r8/internal/YouTubeV1419TreeShakeJarVerificationTest.java
index f20a827..48acfdb 100644
--- a/src/test/java/com/android/tools/r8/internal/YouTubeV1419TreeShakeJarVerificationTest.java
+++ b/src/test/java/com/android/tools/r8/internal/YouTubeV1419TreeShakeJarVerificationTest.java
@@ -46,23 +46,6 @@
R8TestCompileResult compileResult =
testForR8(parameters.getBackend())
.addKeepRuleFiles(getKeepRuleFiles())
- .addOptionsModification(
- options -> {
- assert !options.enableFieldBitAccessAnalysis;
- options.enableFieldBitAccessAnalysis = true;
-
- assert !options.protoShrinking().enableGeneratedExtensionRegistryShrinking;
- options.protoShrinking().enableGeneratedExtensionRegistryShrinking = true;
-
- assert !options.protoShrinking().enableGeneratedMessageLiteShrinking;
- options.protoShrinking().enableGeneratedMessageLiteShrinking = true;
-
- assert options.protoShrinking().traverseOneOfAndRepeatedProtoFields;
- options.protoShrinking().traverseOneOfAndRepeatedProtoFields = false;
-
- assert !options.enableStringSwitchConversion;
- options.enableStringSwitchConversion = true;
- })
.allowUnusedProguardConfigurationRules()
.compile();
diff --git a/src/test/java/com/android/tools/r8/internal/YouTubeV1444TreeShakeJarVerificationTest.java b/src/test/java/com/android/tools/r8/internal/YouTubeV1444TreeShakeJarVerificationTest.java
index ab63ba7..b2498b5 100644
--- a/src/test/java/com/android/tools/r8/internal/YouTubeV1444TreeShakeJarVerificationTest.java
+++ b/src/test/java/com/android/tools/r8/internal/YouTubeV1444TreeShakeJarVerificationTest.java
@@ -59,26 +59,6 @@
.addLibraryFiles(librarySanitizer.getSanitizedLibrary())
.addKeepRuleFiles(getKeepRuleFiles())
.addMainDexRuleFiles(getMainDexRuleFiles())
- .addOptionsModification(
- options -> {
- assert !options.applyInliningToInlinee;
- options.applyInliningToInlinee = true;
-
- assert !options.enableFieldBitAccessAnalysis;
- options.enableFieldBitAccessAnalysis = true;
-
- assert !options.protoShrinking().enableGeneratedExtensionRegistryShrinking;
- options.protoShrinking().enableGeneratedExtensionRegistryShrinking = true;
-
- assert !options.protoShrinking().enableGeneratedMessageLiteShrinking;
- options.protoShrinking().enableGeneratedMessageLiteShrinking = true;
-
- assert options.protoShrinking().traverseOneOfAndRepeatedProtoFields;
- options.protoShrinking().traverseOneOfAndRepeatedProtoFields = false;
-
- assert !options.enableStringSwitchConversion;
- options.enableStringSwitchConversion = true;
- })
.setMinApi(AndroidApiLevel.H_MR2)
.allowDiagnosticMessages()
.allowUnusedProguardConfigurationRules()
diff --git a/src/test/java/com/android/tools/r8/internal/YouTubeV1508TreeShakeJarVerificationTest.java b/src/test/java/com/android/tools/r8/internal/YouTubeV1508TreeShakeJarVerificationTest.java
index 01120c8..e63b126 100644
--- a/src/test/java/com/android/tools/r8/internal/YouTubeV1508TreeShakeJarVerificationTest.java
+++ b/src/test/java/com/android/tools/r8/internal/YouTubeV1508TreeShakeJarVerificationTest.java
@@ -59,26 +59,6 @@
.addLibraryFiles(librarySanitizer.getSanitizedLibrary())
.addKeepRuleFiles(getKeepRuleFiles())
.addMainDexRuleFiles(getMainDexRuleFiles())
- .addOptionsModification(
- options -> {
- assert !options.applyInliningToInlinee;
- options.applyInliningToInlinee = true;
-
- assert !options.enableFieldBitAccessAnalysis;
- options.enableFieldBitAccessAnalysis = true;
-
- assert !options.protoShrinking().enableGeneratedExtensionRegistryShrinking;
- options.protoShrinking().enableGeneratedExtensionRegistryShrinking = true;
-
- assert !options.protoShrinking().enableGeneratedMessageLiteShrinking;
- options.protoShrinking().enableGeneratedMessageLiteShrinking = true;
-
- assert options.protoShrinking().traverseOneOfAndRepeatedProtoFields;
- options.protoShrinking().traverseOneOfAndRepeatedProtoFields = false;
-
- assert !options.enableStringSwitchConversion;
- options.enableStringSwitchConversion = true;
- })
.allowCheckDiscardedErrors()
.allowDiagnosticMessages()
.allowUnusedProguardConfigurationRules()
diff --git a/src/test/java/com/android/tools/r8/internal/proto/Proto2BuilderShrinkingTest.java b/src/test/java/com/android/tools/r8/internal/proto/Proto2BuilderShrinkingTest.java
index 0788985..23dc574 100644
--- a/src/test/java/com/android/tools/r8/internal/proto/Proto2BuilderShrinkingTest.java
+++ b/src/test/java/com/android/tools/r8/internal/proto/Proto2BuilderShrinkingTest.java
@@ -72,30 +72,11 @@
.addProgramFiles(PROGRAM_FILES)
.addKeepMainRules(mains)
.addKeepRuleFiles(PROTOBUF_LITE_PROGUARD_RULES)
- .addOptionsModification(
- options -> {
- assert !options.applyInliningToInlinee;
- options.applyInliningToInlinee = true;
-
- assert !options.enableFieldBitAccessAnalysis;
- options.enableFieldBitAccessAnalysis = true;
-
- assert !options.protoShrinking().enableGeneratedExtensionRegistryShrinking;
- options.protoShrinking().enableGeneratedExtensionRegistryShrinking = true;
-
- assert !options.protoShrinking().enableGeneratedMessageLiteShrinking;
- options.protoShrinking().enableGeneratedMessageLiteShrinking = true;
-
- assert !options.protoShrinking().enableGeneratedMessageLiteBuilderShrinking;
- options.protoShrinking().enableGeneratedMessageLiteBuilderShrinking = true;
-
- assert !options.enableStringSwitchConversion;
- options.enableStringSwitchConversion = true;
- })
.allowAccessModification()
.allowDiagnosticMessages()
.allowUnusedProguardConfigurationRules()
.enableInliningAnnotations()
+ .enableProtoShrinking()
.setMinApi(parameters.getApiLevel())
.compile()
.assertAllInfoMessagesMatch(
diff --git a/src/test/java/com/android/tools/r8/internal/proto/Proto2ShrinkingTest.java b/src/test/java/com/android/tools/r8/internal/proto/Proto2ShrinkingTest.java
index 1473e03..cd743a9 100644
--- a/src/test/java/com/android/tools/r8/internal/proto/Proto2ShrinkingTest.java
+++ b/src/test/java/com/android/tools/r8/internal/proto/Proto2ShrinkingTest.java
@@ -82,17 +82,10 @@
.addKeepMainRule("proto2.TestClass")
.addKeepRuleFiles(PROTOBUF_LITE_PROGUARD_RULES)
.addKeepRules(allGeneratedMessageLiteSubtypesAreInstantiatedRule())
- .addOptionsModification(
- options -> {
- options.enableFieldBitAccessAnalysis = true;
- options.protoShrinking().enableGeneratedExtensionRegistryShrinking = true;
- options.protoShrinking().enableGeneratedMessageLiteShrinking = true;
- options.protoShrinking().enableGeneratedMessageLiteBuilderShrinking = true;
- options.enableStringSwitchConversion = true;
- })
.allowAccessModification(allowAccessModification)
.allowDiagnosticMessages()
.allowUnusedProguardConfigurationRules()
+ .enableProtoShrinking()
.minification(enableMinification)
.setMinApi(parameters.getApiLevel())
.compile()
@@ -357,15 +350,10 @@
.addKeepRules(keepAllProtosRule())
// Retain the signature of dynamicMethod() and newMessageInfo().
.addKeepRules(keepDynamicMethodSignatureRule(), keepNewMessageInfoSignatureRule())
- // Enable the dynamicMethod() rewritings.
- .addOptionsModification(
- options -> {
- assert !options.protoShrinking().enableGeneratedMessageLiteShrinking;
- options.protoShrinking().enableGeneratedMessageLiteShrinking = true;
- })
.allowAccessModification(allowAccessModification)
.allowDiagnosticMessages()
.allowUnusedProguardConfigurationRules()
+ .enableProtoShrinking()
.minification(enableMinification)
.setMinApi(parameters.getApiLevel())
.compile()
diff --git a/src/test/java/com/android/tools/r8/internal/proto/Proto3ShrinkingTest.java b/src/test/java/com/android/tools/r8/internal/proto/Proto3ShrinkingTest.java
index 7a261ff..429c340 100644
--- a/src/test/java/com/android/tools/r8/internal/proto/Proto3ShrinkingTest.java
+++ b/src/test/java/com/android/tools/r8/internal/proto/Proto3ShrinkingTest.java
@@ -58,17 +58,10 @@
.addProgramFiles(PROGRAM_FILES)
.addKeepMainRule("proto3.TestClass")
.addKeepRuleFiles(PROTOBUF_LITE_PROGUARD_RULES)
- .addOptionsModification(
- options -> {
- options.enableFieldBitAccessAnalysis = true;
- options.protoShrinking().enableGeneratedExtensionRegistryShrinking = true;
- options.protoShrinking().enableGeneratedMessageLiteShrinking = true;
- options.protoShrinking().enableGeneratedMessageLiteBuilderShrinking = true;
- options.enableStringSwitchConversion = true;
- })
.allowAccessModification(allowAccessModification)
.allowDiagnosticMessages()
.allowUnusedProguardConfigurationRules()
+ .enableProtoShrinking()
.minification(enableMinification)
.setMinApi(parameters.getApiLevel())
.compile()
@@ -113,15 +106,10 @@
.addKeepRules(keepAllProtosRule())
// Retain the signature of dynamicMethod() and newMessageInfo().
.addKeepRules(keepDynamicMethodSignatureRule(), keepNewMessageInfoSignatureRule())
- // Enable the dynamicMethod() rewritings.
- .addOptionsModification(
- options -> {
- assert !options.protoShrinking().enableGeneratedMessageLiteShrinking;
- options.protoShrinking().enableGeneratedMessageLiteShrinking = true;
- })
.allowAccessModification(allowAccessModification)
.allowDiagnosticMessages()
.allowUnusedProguardConfigurationRules()
+ .enableProtoShrinking()
.minification(enableMinification)
.setMinApi(parameters.getApiLevel())
.compile()
diff --git a/src/test/java/com/android/tools/r8/internal/proto/YouTubeProtoRewritingTest.java b/src/test/java/com/android/tools/r8/internal/proto/YouTubeProtoRewritingTest.java
index cff1e45..6088600 100644
--- a/src/test/java/com/android/tools/r8/internal/proto/YouTubeProtoRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/internal/proto/YouTubeProtoRewritingTest.java
@@ -46,12 +46,6 @@
.addKeepRules(keepAllProtosRule())
// Retain the signature of dynamicMethod() and newMessageInfo().
.addKeepRules(keepDynamicMethodSignatureRule(), keepNewMessageInfoSignatureRule())
- // Enable the dynamicMethod() rewritings.
- .addOptionsModification(
- options -> {
- assert !options.protoShrinking().enableGeneratedMessageLiteShrinking;
- options.protoShrinking().enableGeneratedMessageLiteShrinking = true;
- })
.allowUnusedProguardConfigurationRules()
.compile()
.inspect(
diff --git a/tools/run_on_app.py b/tools/run_on_app.py
index b96ccf4..ae8001a 100755
--- a/tools/run_on_app.py
+++ b/tools/run_on_app.py
@@ -517,14 +517,6 @@
args.extend(['--main-dex-rules', rules])
if 'allow-type-errors' in values:
extra_args.append('-Dcom.android.tools.r8.allowTypeErrors=1')
- if 'proto-shrinking' in values:
- extra_args.append('-Dcom.android.tools.r8.applyInliningToInlinee=1')
- extra_args.append('-Dcom.android.tools.r8.fieldBitAccessAnalysis=1')
- extra_args.append('-Dcom.android.tools.r8.generatedExtensionRegistryShrinking=1')
- extra_args.append('-Dcom.android.tools.r8.generatedMessageLiteShrinking=1')
- extra_args.append('-Dcom.android.tools.r8.generatedMessageLiteBuilderShrinking=1')
- extra_args.append('-Dcom.android.tools.r8.stringSwitchConversion=1')
- extra_args.append('-Dcom.android.tools.r8.traverseOneOfAndRepeatedProtoFields=0')
if not options.no_libraries:
for lib in libraries:
diff --git a/tools/youtube_data.py b/tools/youtube_data.py
index 226ad4c..828e04b 100644
--- a/tools/youtube_data.py
+++ b/tools/youtube_data.py
@@ -141,7 +141,6 @@
'pgconf': [
'%s_proguard.config' % V14_19_PREFIX,
'%s/proguardsettings/YouTubeRelease_proguard.config' % utils.THIRD_PARTY],
- 'proto-shrinking': 1,
'maindexrules' : [
os.path.join(V14_19_BASE, 'mainDexClasses.rules'),
os.path.join(V14_19_BASE, 'main-dex-classes-release-optimized.pgcfg'),
@@ -171,7 +170,6 @@
'pgconf': [
'%s_proguard.config' % V14_44_PREFIX,
'%s/proguardsettings/YouTubeRelease_proguard.config' % utils.THIRD_PARTY],
- 'proto-shrinking': 1,
'maindexrules' : [
os.path.join(V14_44_BASE, 'mainDexClasses.rules'),
os.path.join(V14_44_BASE, 'main-dex-classes-release-optimized.pgcfg'),
@@ -202,7 +200,6 @@
'%s_proguard.config' % V15_08_PREFIX,
'%s_proto_safety.pgcfg' % V15_08_PREFIX,
'%s/proguardsettings/YouTubeRelease_proguard.config' % utils.THIRD_PARTY],
- 'proto-shrinking': 1,
'maindexrules' : [
os.path.join(V15_08_BASE, 'mainDexClasses.rules'),
os.path.join(V15_08_BASE, 'main-dex-classes-release-optimized.pgcfg'),
@@ -232,7 +229,6 @@
'pgconf': [
'%s_proguard.config' % V15_09_PREFIX,
'%s/proguardsettings/YouTubeRelease_proguard.config' % utils.THIRD_PARTY],
- 'proto-shrinking': 1,
'maindexrules' : [
os.path.join(V15_09_BASE, 'mainDexClasses.rules'),
os.path.join(V15_09_BASE, 'main-dex-classes-release-optimized.pgcfg'),