Skip to content

Commit

Permalink
Rolling R8 2.1.20 -> 2.1.26
Browse files Browse the repository at this point in the history
* Fixes optimization bug (see linked bug)
* Introduces enum simplification
* Adds command-line support for L8 optimizations

Bug: 1077307
Change-Id: I85e4bba61253c9056d4544cbd849ec0d9bcd97a4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2210792
Reviewed-by: Andrew Grieve <agrieve@chromium.org>
Commit-Queue: Sam Maier <smaier@chromium.org>
Cr-Commit-Position: refs/heads/master@{#771030}
  • Loading branch information
Sam Maier authored and Commit Bot committed May 21, 2020
1 parent 218f707 commit baa502f
Show file tree
Hide file tree
Showing 12 changed files with 127 additions and 55 deletions.
2 changes: 1 addition & 1 deletion DEPS
Original file line number Diff line number Diff line change
Expand Up @@ -1323,7 +1323,7 @@ deps = {
'packages': [
{
'package': 'chromium/third_party/r8',
'version': 'UAycWqc5QfELtJhhnoU4jQHjsyxPjRNyZ0EfvlojaY4C',
'version': 'bri3RbTe5EACoEqrT7RBNXf6QZ1fIHWpsWpg9lW-JEQC',
},
],
'condition': 'checkout_android',
Expand Down
2 changes: 1 addition & 1 deletion base/android/proguard/chromium_apk.flags
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,6 @@
}

# Protobuf java lite runtime uses reflection
-keepclassmembers class * extends com.google.protobuf.GeneratedMessageLite {
-keepclassmembers,allowaccessmodification class * extends com.google.protobuf.GeneratedMessageLite {
<fields>;
}
6 changes: 3 additions & 3 deletions base/android/proguard/chromium_code.flags
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,13 @@
-keep @org.chromium.base.annotations.UsedByReflection class ** {}

# Keeps for method level annotations.
-keepclasseswithmembers class ** {
-keepclasseswithmembers,allowaccessmodification class ** {
@org.chromium.base.annotations.AccessedByNative <fields>;
}
-keepclasseswithmembers,includedescriptorclasses class ** {
-keepclasseswithmembers,includedescriptorclasses,allowaccessmodification class ** {
@org.chromium.base.annotations.CalledByNative <methods>;
}
-keepclasseswithmembers,includedescriptorclasses class ** {
-keepclasseswithmembers,includedescriptorclasses,allowaccessmodification class ** {
@org.chromium.base.annotations.CalledByNativeUnchecked <methods>;
}
-keepclasseswithmembers class ** {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@
}

# Protobuf java lite runtime uses reflection
-keepclassmembers class * extends com.google.protobuf.GeneratedMessageLite {
-keepclassmembers,allowaccessmodification class * extends com.google.protobuf.GeneratedMessageLite {
<fields>;
}

Expand Down Expand Up @@ -198,13 +198,13 @@
-keep @org.chromium.base.annotations.UsedByReflection class ** {}

# Keeps for method level annotations.
-keepclasseswithmembers class ** {
-keepclasseswithmembers,allowaccessmodification class ** {
@org.chromium.base.annotations.AccessedByNative <fields>;
}
-keepclasseswithmembers,includedescriptorclasses class ** {
-keepclasseswithmembers,includedescriptorclasses,allowaccessmodification class ** {
@org.chromium.base.annotations.CalledByNative <methods>;
}
-keepclasseswithmembers,includedescriptorclasses class ** {
-keepclasseswithmembers,includedescriptorclasses,allowaccessmodification class ** {
@org.chromium.base.annotations.CalledByNativeUnchecked <methods>;
}
-keepclasseswithmembers class ** {
Expand Down
12 changes: 8 additions & 4 deletions third_party/r8/README.chromium
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Name: R8
URL: https://r8.googlesource.com/r8
Revision: 80f8cf3e5117f48b7bb8058ce08f554c5df67111
Version: 2.1.20-dev
Revision: 924f28bdb1f32b7504d6813ee911ba1949be6130
Version: 2.1.26-dev
License: BSD 3-Clause
License File: NOT_SHIPPED
Security Critical: no
Expand Down Expand Up @@ -34,8 +34,12 @@ tools/gradle.py r8
java -jar build/libs/r8.jar --debug --classfile --output r8.jar \
--lib $CHROMIUM_SRC/third_party/jdk/current --pg-conf src/main/keep.txt \
--no-minification --no-desugaring build/libs/r8.jar
rm $CHROMIUM_SRC/third_party/r8/libs/r8.jar
cp r8.jar $CHROMIUM_SRC/third_party/r8/libs/r8.jar
rm $CHROMIUM_SRC/third_party/r8/lib/r8.jar
cp r8.jar $CHROMIUM_SRC/third_party/r8/lib/r8.jar

# Create patches if conflicts / new patches. Change number if expecting
# different amount of patches:
git format-patch -6 -o $CHROMIUM_SRC/third_party/r8/patches

# Upload to CIPD:
cipd create --pkg-def cipd.yaml # Make note of the instance ID
Expand Down
6 changes: 4 additions & 2 deletions third_party/r8/desugar_jdk_libs.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
{
"configuration_format_version": 3,
"version": "0.11.1",
"configuration_format_version": 4,
"group_id" : "com.tools.android",
"artifact_id" : "desugar_jdk_libs",
"version": "0.11.2",
"required_compilation_api_level": 26,
"synthesized_library_classes_package_prefix": "j$.",
"library_flags": [
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
From 7b3c28d6438661f28ac7125db4ac3ff2d5776ff4 Mon Sep 17 00:00:00 2001
From d9bab8bcf0e7ae33fb878327b850623cfa0504fe Mon Sep 17 00:00:00 2001
From: Andrew Grieve <agrieve@chromium.org>
Date: Mon, 27 Apr 2020 14:53:10 -0400
Subject: [PATCH 1/5] Chrome: Change meaning of --file-per-class
Subject: [PATCH 1/6] Chrome: Change meaning of --file-per-class

Make it mean OutputMode.DexFilePerClassFile instead of
OutputMode.DexFilePerClass.
Expand All @@ -12,7 +12,7 @@ Fixes Chrome's incremental dexing logic.
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/main/java/com/android/tools/r8/D8CommandParser.java b/src/main/java/com/android/tools/r8/D8CommandParser.java
index aad3468dd..470a7c44b 100644
index 3c7fdd2c2..e3d6f1c8f 100644
--- a/src/main/java/com/android/tools/r8/D8CommandParser.java
+++ b/src/main/java/com/android/tools/r8/D8CommandParser.java
@@ -209,7 +209,7 @@ public class D8CommandParser extends BaseCompilerCommandParser<D8Command, D8Comm
Expand All @@ -25,5 +25,5 @@ index aad3468dd..470a7c44b 100644
outputMode = OutputMode.ClassFile;
} else if (arg.equals("--output")) {
--
2.26.2.303.gf8c07b1a785-goog
2.26.2.761.g0e0b3e54be-goog

10 changes: 5 additions & 5 deletions third_party/r8/patches/0002-Adds-feature-jar-to-R8-command.patch
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
From 09eaa46b489b08994644822a93a879e3e089f531 Mon Sep 17 00:00:00 2001
From 78acee122ca6d379c917ed339c54f8909c7953bf Mon Sep 17 00:00:00 2001
From: Andrew Grieve <agrieve@chromium.org>
Date: Mon, 27 Apr 2020 15:00:00 -0400
Subject: [PATCH] Adds --feature-jar to R8 command
Subject: [PATCH 2/6] Adds --feature-jar to R8 command

Chrome needs this to expose feature splits via command-line
---
Expand All @@ -10,7 +10,7 @@ Chrome needs this to expose feature splits via command-line
2 files changed, 21 insertions(+)

diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 3e9ae7eb1..898b44255 100644
index 656f3aa47..909b7bc93 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -70,6 +70,18 @@ public final class R8Command extends BaseCompilerCommand {
Expand All @@ -33,7 +33,7 @@ index 3e9ae7eb1..898b44255 100644
private static class DefaultR8DiagnosticsHandler implements DiagnosticsHandler {

diff --git a/src/main/java/com/android/tools/r8/R8CommandParser.java b/src/main/java/com/android/tools/r8/R8CommandParser.java
index f04f93722..d1b767725 100644
index d31606dea..8d286601c 100644
--- a/src/main/java/com/android/tools/r8/R8CommandParser.java
+++ b/src/main/java/com/android/tools/r8/R8CommandParser.java
@@ -24,6 +24,7 @@ public class R8CommandParser extends BaseCompilerCommandParser<R8Command, R8Comm
Expand All @@ -60,5 +60,5 @@ index f04f93722..d1b767725 100644
builder.addMainDexListFiles(Paths.get(nextArg));
} else if (arg.equals("--main-dex-list-output")) {
--
2.26.2.303.gf8c07b1a785-goog
2.26.2.761.g0e0b3e54be-goog

Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
From 6c3009d363b1e50adc83279dba27b4e0a350ead7 Mon Sep 17 00:00:00 2001
From: Andrew Grieve <agrieve@chromium.org>
Date: Wed, 1 Apr 2020 10:03:46 -0400
Subject: [PATCH 3/5] Desugaring: Make all lambdas stateless & fix naming
From 4fbdadba00834e5fd2f7863ed387bc06c761d37b Mon Sep 17 00:00:00 2001
From: Sam Maier <smaier@chromium.org>
Date: Tue, 19 May 2020 15:55:44 -0400
Subject: [PATCH 3/6] Desugaring: Make all lambdas stateless & fix naming
scheme of method references

Statefull lambdas regress dex size.
Expand All @@ -12,7 +12,7 @@ Bug: b/129997269
1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
index 0831e6d93..0abb97180 100644
index f41bdce43..0dbdc24eb 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
@@ -128,7 +128,8 @@ public final class LambdaClass {
Expand All @@ -22,18 +22,18 @@ index 0831e6d93..0abb97180 100644
- if (match.delegatesToLambdaImplMethod() || match.needsAccessor(accessedFrom)) {
+ if (true || match.delegatesToLambdaImplMethod() || match.needsAccessor(accessedFrom)) {
+ // Chrome: This class name is required for supersize to map the symbol to source .java file.
lambdaClassDescriptor.append(accessedFrom.getName()).append('$');
lambdaClassDescriptor.append(accessedFrom.getHolderType().getName()).append('$');
}

@@ -206,7 +207,7 @@ public final class LambdaClass {
}

public final boolean isStateless() {
- return descriptor.isStateless();
+ return false; // descriptor.isStateless();
+ return false; // descriptor.isStateless();
}

void addSynthesizedFrom(DexProgramClass clazz) {
--
2.26.0.rc2.310.g2932bb562d-goog
2.26.2.761.g0e0b3e54be-goog

Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
From c090e841899461437cc91adbdfc7c74ef8091a53 Mon Sep 17 00:00:00 2001
From: Andrew Grieve <agrieve@chromium.org>
Date: Wed, 1 Apr 2020 10:06:15 -0400
Subject: [PATCH 4/5] Make class merging and outlining settable via
From b5cf822a88747e6026dd9743d71cef2d5ee53fa2 Mon Sep 17 00:00:00 2001
From: Sam Maier <smaier@chromium.org>
Date: Tue, 19 May 2020 16:24:11 -0400
Subject: [PATCH 4/6] Make class merging and outlining settable via
command-line

---
.../java/com/android/tools/r8/utils/InternalOptions.java | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

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 232b54a54..fd45dfe36 100644
index 997d4e905..06df3675d 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -198,8 +198,8 @@ public class InternalOptions {
@@ -220,8 +220,8 @@ public class InternalOptions {
public boolean enableFieldAssignmentTracker = true;
public boolean enableFieldBitAccessAnalysis =
System.getProperty("com.android.tools.r8.fieldBitAccessAnalysis") != null;
Expand All @@ -21,9 +21,9 @@ index 232b54a54..fd45dfe36 100644
+ public boolean enableHorizontalClassMerging = System.getProperty("com.android.tools.r8.enableHorizontalClassMerging") != null;
+ public boolean enableVerticalClassMerging = System.getProperty("com.android.tools.r8.enableVerticalClassMerging") != null;
public boolean enableArgumentRemoval = true;
public boolean enableUnusedArgumentRemoval = true;
public boolean enableUnusedInterfaceRemoval = true;
@@ -956,7 +956,7 @@ public class InternalOptions {
public boolean enableDevirtualization = true;
@@ -1057,7 +1057,7 @@ public class InternalOptions {
public static final String CLASS_NAME = "com.android.tools.r8.GeneratedOutlineSupport";
public static final String METHOD_PREFIX = "outline";

Expand All @@ -33,5 +33,5 @@ index 232b54a54..fd45dfe36 100644
public int maxSize = 99;
public int threshold = 20;
--
2.26.0.rc2.310.g2932bb562d-goog
2.26.2.761.g0e0b3e54be-goog

25 changes: 11 additions & 14 deletions third_party/r8/patches/0005-Fix-up-proguard-keeps-for-Chrome.patch
Original file line number Diff line number Diff line change
@@ -1,29 +1,26 @@
From fe0cf2feb23d4cdcf4dc287bddba9ea07538aa35 Mon Sep 17 00:00:00 2001
From: Andrew Grieve <agrieve@chromium.org>
Date: Wed, 1 Apr 2020 10:06:57 -0400
Subject: [PATCH 5/5] Fix up proguard keeps for Chrome
From bf551ce100964a415341e8c30a067720c4be85eb Mon Sep 17 00:00:00 2001
From: Sam Maier <smaier@chromium.org>
Date: Tue, 19 May 2020 16:27:53 -0400
Subject: [PATCH 5/6] Fix up proguard keeps for Chrome

---
src/main/keep.txt | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
src/main/keep.txt | 6 ++++++
1 file changed, 6 insertions(+)

diff --git a/src/main/keep.txt b/src/main/keep.txt
index b0c58c916..5e4405175 100644
index 7791d4e88..182ea9d37 100644
--- a/src/main/keep.txt
+++ b/src/main/keep.txt
@@ -27,4 +27,10 @@
-keep public class com.android.tools.r8.compatproguard.CompatProguard { public static void main(java.lang.String[]); }
@@ -23,3 +23,9 @@

# Compatibility command line program used by in google3.
--keep public class com.android.tools.r8.compatdx.CompatDx { public static void main(java.lang.String[]); }
\ No newline at end of file
+-keep public class com.android.tools.r8.compatdx.CompatDx { public static void main(java.lang.String[]); }
# Compatibility command line program used by the Android Platform build.
-keep public class com.android.tools.r8.compatproguard.CompatProguard { public static void main(java.lang.String[]); }
+
+-keep public class com.android.tools.r8.SwissArmyKnife { *; }
+
+# Chrome: We want to maintain stack traces from the R8 tool, so disable
+# optimizations.
+-dontoptimize
--
2.26.0.rc2.310.g2932bb562d-goog
2.26.2.761.g0e0b3e54be-goog

Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
From 7b68ccb6caa68235fc325c26ec559d9a5f0e116e Mon Sep 17 00:00:00 2001
From: Sam Maier <smaier@chromium.org>
Date: Wed, 20 May 2020 15:29:37 -0400
Subject: [PATCH 6/6] Add --desugared-library-keep-rule-output to R8 command

Chrome needs this to export the keep rule file to optimize
imported library.
---
src/main/java/com/android/tools/r8/L8CommandParser.java | 2 +-
src/main/java/com/android/tools/r8/R8CommandParser.java | 9 ++++++++-
2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/android/tools/r8/L8CommandParser.java b/src/main/java/com/android/tools/r8/L8CommandParser.java
index 08021272e..6366029c0 100644
--- a/src/main/java/com/android/tools/r8/L8CommandParser.java
+++ b/src/main/java/com/android/tools/r8/L8CommandParser.java
@@ -19,7 +19,7 @@ import java.util.Set;
public class L8CommandParser extends BaseCompilerCommandParser<L8Command, L8Command.Builder> {

private static final Set<String> OPTIONS_WITH_PARAMETER =
- ImmutableSet.of("--output", "--lib", MIN_API_FLAG, "--desugared-lib", THREAD_COUNT_FLAG);
+ ImmutableSet.of("--output", "--lib", MIN_API_FLAG, "--desugared-lib", THREAD_COUNT_FLAG, "--pg-conf");

public static void main(String[] args) throws CompilationFailedException {
L8Command command = parse(args, Origin.root()).build();
diff --git a/src/main/java/com/android/tools/r8/R8CommandParser.java b/src/main/java/com/android/tools/r8/R8CommandParser.java
index 8d286601c..41aa2ab2d 100644
--- a/src/main/java/com/android/tools/r8/R8CommandParser.java
+++ b/src/main/java/com/android/tools/r8/R8CommandParser.java
@@ -3,6 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8;

+import com.android.tools.r8.StringConsumer;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.FlagFile;
@@ -29,6 +30,7 @@ public class R8CommandParser extends BaseCompilerCommandParser<R8Command, R8Comm
"--pg-conf",
"--pg-map-output",
"--desugared-lib",
+ "--desugared-library-keep-rule-output",
THREAD_COUNT_FLAG);

public static void main(String[] args) throws CompilationFailedException {
@@ -85,7 +87,9 @@ public class R8CommandParser extends BaseCompilerCommandParser<R8Command, R8Comm
" # primary dex file.",
" --main-dex-list <file> # List of classes to place in the primary dex file.",
" --main-dex-list-output <file> ",
- " # Output the full main-dex list in <file>."),
+ " # Output the full main-dex list in <file>.",
+ " --desugared-library-keep-rule-output <file> # Output the desugared library",
+ " # keep rule to <file>."),
ASSERTIONS_USAGE_MESSAGE,
Arrays.asList(
" --version # Print the version of r8.",
@@ -237,6 +241,9 @@ public class R8CommandParser extends BaseCompilerCommandParser<R8Command, R8Comm
builder.addDesugaredLibraryConfiguration(StringResource.fromFile(Paths.get(nextArg)));
} else if (arg.equals("--no-data-resources")) {
state.includeDataResources = false;
+ } else if (arg.equals("--desugared-library-keep-rule-output")) {
+ StringConsumer consumer = new StringConsumer.FileConsumer(Paths.get(nextArg));
+ builder.setDesugaredLibraryKeepRuleConsumer(consumer);
} else if (arg.startsWith("--")) {
if (!tryParseAssertionArgument(builder, arg, argsOrigin)) {
builder.error(new StringDiagnostic("Unknown option: " + arg, argsOrigin));
--
2.26.2.761.g0e0b3e54be-goog

0 comments on commit baa502f

Please sign in to comment.