From 92f162cf7b6834703b6463ad77f9d96402011753 Mon Sep 17 00:00:00 2001 From: Andrew Grieve Date: Tue, 31 Mar 2020 20:32:35 +0000 Subject: [PATCH] Android: Roll R8 Keeping R8 revision the same, but updated local modifications: * Expose dexsplitter-related R8 flags * Taken from reverted change: https://chromium-review.googlesource.com/c/chromium/src/+/2014309 * Disable stateless lambda "optimization" * Makes horizontal & vertical class merging separate flags. * Make --file-per-class use DexFilePerClassFile rather than DexFilePerClass (fixes incremental dexing /w desugar_with_d8). Also updates update instructions. Bug: 1032609 Change-Id: I1553785fa103ed3164206e0397fe320cce980f61 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2127512 Reviewed-by: Sam Maier Commit-Queue: Andrew Grieve Cr-Commit-Position: refs/heads/master@{#755098} --- DEPS | 2 +- build/config/android/internal_rules.gni | 13 ++- third_party/r8/README.chromium | 27 ++++++- third_party/r8/cipd.yaml | 17 +--- third_party/r8/local_modifications.diff | 102 +++++++++++++++++++++++- 5 files changed, 132 insertions(+), 29 deletions(-) diff --git a/DEPS b/DEPS index 1a48689b8e03fb..7340f0a28bb79b 100644 --- a/DEPS +++ b/DEPS @@ -1331,7 +1331,7 @@ deps = { 'packages': [ { 'package': 'chromium/third_party/r8', - 'version': 'C28ypVbWD-R2M9x9fH7QniIsYjJrKoUhxqEV_cZR4qgC', + 'version': 'QBuWB80TzI5JFXtwaZQbr91Ry3Lb0AmRl8kBchm5FY0C', }, ], 'condition': 'checkout_android', diff --git a/build/config/android/internal_rules.gni b/build/config/android/internal_rules.gni index e6674c517281ee..af17c801cbb55e 100644 --- a/build/config/android/internal_rules.gni +++ b/build/config/android/internal_rules.gni @@ -1375,14 +1375,11 @@ if (enable_java_templates) { } else if (enable_incremental_d8 && !(defined(invoker.disable_incremental) && invoker.disable_incremental)) { - # TODO(crbug.com/1015559): Fix incremental builds when d8 is desugaring. - if (!desugar_with_d8) { - # Don't use incremental dexing for ProGuarded inputs as a precaution. - args += [ - "--incremental-dir", - rebase_path("$target_out_dir/$target_name", root_build_dir), - ] - } + # Don't use incremental dexing for ProGuarded inputs as a precaution. + args += [ + "--incremental-dir", + rebase_path("$target_out_dir/$target_name", root_build_dir), + ] } if (_enable_multidex) { diff --git a/third_party/r8/README.chromium b/third_party/r8/README.chromium index a7dd74cece063e..58f46ae65f6de4 100644 --- a/third_party/r8/README.chromium +++ b/third_party/r8/README.chromium @@ -18,6 +18,29 @@ Turning off outlining because it caused issues when synchronized proguarding Trichrome due to illegal dex references (crbug.com/956839). Will only be used for android_apk() targets that set `disable_r8_outlining = true`): -Increase callGraphCycleEliminatorMaxDepthThreshold (b/143685705). +Added --feature-jar flag for doing dex splitting. -Patch is located at //third_party/r8/local_modifications.diff. +local_modifications.diff created via: +git diff >local_modifications.diff + +Update Instructions: +# Download R8: +git clone https://r8.googlesource.com/r8 +cd r8 +# Apply the patch: +git apply $CHROMIUM_SRC/third_party/r8/local_modifications.diff +# Build: +tools/gradle.py r8 +# Shrink (improves r8/d8 launch time): +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 + +# Upload to CIPD: +cipd create --pkg-def cipd.yaml # Make note of the instance ID + +# Manually update: +* README.chromium (version number via "java -jar lib/r8.jar --version") +* //DEPS (instance ID output by cipd create) diff --git a/third_party/r8/cipd.yaml b/third_party/r8/cipd.yaml index 7ae02245ff61d8..c18b8933d793b3 100644 --- a/third_party/r8/cipd.yaml +++ b/third_party/r8/cipd.yaml @@ -2,21 +2,8 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -# Example for updating r8 in the current dir: -# Run: -# cd -# tools/gradle.py r8 # Building R8 -# cd - -# -# cipd auth-login -# rm lib/r8.jar -# cp /build/libs/r8.jar lib/r8.jar -# java -jar lib/r8.jar --version -# cipd create --pkg-def cipd.yaml # Make note of the instance ID -# Manually update: -# README.chromium (version number) -# //DEPS (instance ID output by cipd create) - +# To create CIPD package run the following command. +# cipd create --pkg-def cipd.yaml package: chromium/third_party/r8 description: > R8 is a proguard-like optimizer that also has the option to dex. diff --git a/third_party/r8/local_modifications.diff b/third_party/r8/local_modifications.diff index daa9e92a4d3a65..8b695e0753183b 100644 --- a/third_party/r8/local_modifications.diff +++ b/third_party/r8/local_modifications.diff @@ -1,5 +1,84 @@ +diff --git a/src/main/java/com/android/tools/r8/D8CommandParser.java b/src/main/java/com/android/tools/r8/D8CommandParser.java +index f66fff8f3..c63f4f566 100644 +--- a/src/main/java/com/android/tools/r8/D8CommandParser.java ++++ b/src/main/java/com/android/tools/r8/D8CommandParser.java +@@ -205,7 +205,7 @@ public class D8CommandParser extends BaseCompilerCommandParser ++ splitBuilder ++ .addProgramResourceProvider(ArchiveProgramResourceProvider.fromArchive(inputJarPath)) ++ .setProgramConsumer(new DirectoryConsumer(outputPath)) ++ .build()); ++ return self(); ++ } ++ + /** + * Set a consumer for receiving the proguard-map content. + * +diff --git a/src/main/java/com/android/tools/r8/R8CommandParser.java b/src/main/java/com/android/tools/r8/R8CommandParser.java +index 22ebb5e42..b53e4c59e 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