Fix desugared library and benchmarks
- Stop generating undesugared_jar_jdk_11 from ToolHelper clinit
- Allow benchmarks to generate the undesugared jar in a different folder
- Set-up L8Benchmark which tracks the performance of a non shrinking
L8 compilation
Change-Id: I00ce339c35de67a77f1e0ff680e98c860414b67d
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index 49c4568..eb7df8c 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -184,9 +184,14 @@
OPEN_JDK_DIR + "desugar_jdk_libs_releases/";
public static final Path DESUGARED_JDK_8_LIB_JAR =
Paths.get(OPEN_JDK_DIR + "desugar_jdk_libs/desugar_jdk_libs.jar");
- public static final Path UNDESUGARED_JDK_11_LIB_JAR =
- DesugaredLibraryJDK11Undesugarer.undesugaredJarJDK11(
- Paths.get(OPEN_JDK_DIR + "desugar_jdk_libs_11/desugar_jdk_libs.jar"));
+ public static final Path DESUGARED_JDK_11_LIB_JAR =
+ Paths.get(OPEN_JDK_DIR + "desugar_jdk_libs_11/desugar_jdk_libs.jar");
+
+ public static Path getUndesugaredJdk11LibJarForTesting() {
+ return DesugaredLibraryJDK11Undesugarer.undesugaredJarJDK11(
+ Paths.get("build/libs"),
+ Paths.get(OPEN_JDK_DIR + "desugar_jdk_libs_11/desugar_jdk_libs.jar"));
+ }
public static boolean isLocalDevelopment() {
return System.getProperty("local_development", "0").equals("1");
diff --git a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkCollection.java b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkCollection.java
index a8f662f..5c30550 100644
--- a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkCollection.java
+++ b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkCollection.java
@@ -6,6 +6,7 @@
import static java.util.Collections.emptyList;
import com.android.tools.r8.benchmarks.appdumps.TiviBenchmarks;
+import com.android.tools.r8.benchmarks.desugaredlib.L8Benchmark;
import com.android.tools.r8.benchmarks.desugaredlib.LegacyDesugaredLibraryBenchmark;
import com.android.tools.r8.benchmarks.helloworld.HelloWorldBenchmark;
import com.android.tools.r8.benchmarks.retrace.RetraceStackTraceBenchmark;
@@ -47,6 +48,7 @@
// Every benchmark that should be active on golem must be setup in this method.
HelloWorldBenchmark.configs().forEach(collection::addBenchmark);
LegacyDesugaredLibraryBenchmark.configs().forEach(collection::addBenchmark);
+ L8Benchmark.configs().forEach(collection::addBenchmark);
TiviBenchmarks.configs().forEach(collection::addBenchmark);
RetraceStackTraceBenchmark.configs().forEach(collection::addBenchmark);
return collection;
diff --git a/src/test/java/com/android/tools/r8/benchmarks/desugaredlib/L8Benchmark.java b/src/test/java/com/android/tools/r8/benchmarks/desugaredlib/L8Benchmark.java
new file mode 100644
index 0000000..147d601
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/benchmarks/desugaredlib/L8Benchmark.java
@@ -0,0 +1,83 @@
+// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.benchmarks.desugaredlib;
+
+import com.android.tools.r8.L8TestBuilder;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestState;
+import com.android.tools.r8.benchmarks.BenchmarkBase;
+import com.android.tools.r8.benchmarks.BenchmarkConfig;
+import com.android.tools.r8.benchmarks.BenchmarkDependency;
+import com.android.tools.r8.benchmarks.BenchmarkEnvironment;
+import com.android.tools.r8.benchmarks.BenchmarkTarget;
+import com.android.tools.r8.desugar.desugaredlibrary.jdk11.DesugaredLibraryJDK11Undesugarer;
+import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification;
+import com.android.tools.r8.utils.AndroidApiLevel;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public class L8Benchmark extends BenchmarkBase {
+
+ private static final BenchmarkDependency androidJar = BenchmarkDependency.getAndroidJar30();
+ private static final BenchmarkDependency jdk11Conf =
+ new BenchmarkDependency(
+ "legacyConf", "desugar_jdk_libs_11", Paths.get("third_party", "openjdk"));
+
+ public L8Benchmark(BenchmarkConfig config, TestParameters parameters) {
+ super(config, parameters);
+ }
+
+ @Parameters(name = "{0}")
+ public static List<Object[]> data() {
+ return parametersFromConfigs(configs());
+ }
+
+ public static List<BenchmarkConfig> configs() {
+ return ImmutableList.of(
+ BenchmarkConfig.builder()
+ .setName("L8Benchmark")
+ .setTarget(BenchmarkTarget.D8)
+ .setFromRevision(12733)
+ .setMethod(L8Benchmark::run)
+ .addDependency(androidJar)
+ .addDependency(jdk11Conf)
+ .measureRunTime()
+ .build());
+ }
+
+ public static void run(BenchmarkEnvironment environment) throws Exception {
+ Path undesugarJdkLib =
+ DesugaredLibraryJDK11Undesugarer.undesugaredJarJDK11(
+ environment.getTemp().newFolder("undesugar_jdk_lib").toPath(),
+ jdk11Conf.getRoot(environment).resolve("desugar_jdk_libs.jar"));
+ LibraryDesugaringSpecification spec =
+ new LibraryDesugaringSpecification(
+ "JDK11_Benchmark",
+ ImmutableSet.of(undesugarJdkLib),
+ Paths.get("src/library_desugar/jdk11/desugar_jdk_libs.json"),
+ ImmutableSet.of(androidJar.getRoot(environment).resolve("android.jar")),
+ "");
+ runner(environment.getConfig())
+ .setWarmupIterations(1)
+ .setBenchmarkIterations(10)
+ .reportResultSum()
+ .run(
+ results -> {
+ long start = System.nanoTime();
+ L8TestBuilder.create(
+ AndroidApiLevel.B, Backend.DEX, new TestState(environment.getTemp()))
+ .apply(spec::configureL8TestBuilder)
+ .compile();
+ long end = System.nanoTime();
+ results.addRuntimeResult(end - start);
+ });
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryInvalidTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryInvalidTest.java
index 1834ea4..d31aa91 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryInvalidTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryInvalidTest.java
@@ -5,13 +5,13 @@
package com.android.tools.r8.desugar.desugaredlibrary;
import static com.android.tools.r8.ToolHelper.DESUGARED_JDK_8_LIB_JAR;
-import static com.android.tools.r8.ToolHelper.UNDESUGARED_JDK_11_LIB_JAR;
import static com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification.D8_L8DEBUG;
import static junit.framework.TestCase.assertTrue;
import static org.junit.Assert.assertFalse;
import com.android.tools.r8.TestDiagnosticMessages;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification;
import com.android.tools.r8.desugar.desugaredlibrary.test.DesugaredLibraryTestBuilder;
import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification;
@@ -43,7 +43,7 @@
LibraryDesugaringSpecification jdk11InvalidLib =
new LibraryDesugaringSpecification(
"JDK11_INVALID_LIB",
- UNDESUGARED_JDK_11_LIB_JAR,
+ ToolHelper.getUndesugaredJdk11LibJarForTesting(),
"jdk11/desugar_jdk_libs.json",
AndroidApiLevel.L);
return buildParameters(
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LintFilesTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LintFilesTest.java
index ddf8c9d..3c4a223 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LintFilesTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LintFilesTest.java
@@ -128,7 +128,7 @@
Path jdkLibJar =
libraryDesugaringSpecification == JDK8
? ToolHelper.DESUGARED_JDK_8_LIB_JAR
- : ToolHelper.UNDESUGARED_JDK_11_LIB_JAR;
+ : ToolHelper.getUndesugaredJdk11LibJarForTesting();
GenerateLintFiles.main(
new String[] {
libraryDesugaringSpecification.getSpecification().toString(),
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ObjectsTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ObjectsTest.java
index f503773..f5717d8 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ObjectsTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ObjectsTest.java
@@ -5,7 +5,6 @@
package com.android.tools.r8.desugar.desugaredlibrary;
import static com.android.tools.r8.ToolHelper.DESUGARED_JDK_8_LIB_JAR;
-import static com.android.tools.r8.ToolHelper.UNDESUGARED_JDK_11_LIB_JAR;
import static com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification.SPECIFICATIONS_WITH_CF2CF;
import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.JDK11;
import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.JDK8;
@@ -17,6 +16,7 @@
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification;
import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification;
import com.android.tools.r8.utils.AndroidApiLevel;
@@ -76,7 +76,7 @@
LibraryDesugaringSpecification jdk11MaxCompileSdk =
new LibraryDesugaringSpecification(
"JDK11_MAX",
- UNDESUGARED_JDK_11_LIB_JAR,
+ ToolHelper.getUndesugaredJdk11LibJarForTesting(),
"jdk11/desugar_jdk_libs.json",
AndroidApiLevel.LATEST);
return buildParameters(
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ProgramRewritingTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ProgramRewritingTest.java
index 8ed7907..492964e 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ProgramRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ProgramRewritingTest.java
@@ -5,7 +5,6 @@
package com.android.tools.r8.desugar.desugaredlibrary;
import static com.android.tools.r8.ToolHelper.DESUGARED_JDK_8_LIB_JAR;
-import static com.android.tools.r8.ToolHelper.UNDESUGARED_JDK_11_LIB_JAR;
import static com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification.DEFAULT_SPECIFICATIONS;
import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.JDK11;
import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.JDK8;
@@ -62,7 +61,7 @@
new LibraryDesugaringSpecification(
"JDK11_CL",
ImmutableSet.of(
- UNDESUGARED_JDK_11_LIB_JAR,
+ ToolHelper.getUndesugaredJdk11LibJarForTesting(),
ToolHelper.DESUGAR_LIB_CONVERSIONS,
ToolHelper.getCoreLambdaStubs()),
JDK11.getSpecification(),
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/DesugaredLibraryJDK11Undesugarer.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/DesugaredLibraryJDK11Undesugarer.java
index 3162803..e2ecec4 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/DesugaredLibraryJDK11Undesugarer.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/DesugaredLibraryJDK11Undesugarer.java
@@ -15,7 +15,6 @@
import java.nio.file.Files;
import java.nio.file.OpenOption;
import java.nio.file.Path;
-import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.Map;
import java.util.zip.ZipEntry;
@@ -38,11 +37,10 @@
.put("wrapper/adapter/HybridFileTypeDetector", "java/adapter/HybridFileTypeDetector")
.build();
-
- public static Path undesugaredJarJDK11(Path jdk11Jar) {
+ public static Path undesugaredJarJDK11(Path undesugarFolder, Path jdk11Jar) {
String fileName = jdk11Jar.getFileName().toString();
String newFileName = fileName.substring(0, fileName.length() - 4) + "_undesugared.jar";
- Path desugaredLibJDK11Undesugared = Paths.get("build").resolve("libs").resolve(newFileName);
+ Path desugaredLibJDK11Undesugared = undesugarFolder.resolve(newFileName);
return generateUndesugaredJar(jdk11Jar, desugaredLibJDK11Undesugared);
}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/LibraryDesugaringSpecification.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/LibraryDesugaringSpecification.java
index c813114..edff04e 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/LibraryDesugaringSpecification.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/LibraryDesugaringSpecification.java
@@ -3,9 +3,10 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.desugar.desugaredlibrary.test;
+import static com.android.tools.r8.ToolHelper.DESUGARED_JDK_11_LIB_JAR;
import static com.android.tools.r8.ToolHelper.DESUGARED_JDK_8_LIB_JAR;
import static com.android.tools.r8.ToolHelper.DESUGARED_LIB_RELEASES_DIR;
-import static com.android.tools.r8.ToolHelper.UNDESUGARED_JDK_11_LIB_JAR;
+import static com.android.tools.r8.ToolHelper.getUndesugaredJdk11LibJarForTesting;
import com.android.tools.r8.L8TestBuilder;
import com.android.tools.r8.ToolHelper;
@@ -25,17 +26,20 @@
"JDK8", DESUGARED_JDK_8_LIB_JAR, "desugar_jdk_libs.json", AndroidApiLevel.P);
public static LibraryDesugaringSpecification JDK11 =
new LibraryDesugaringSpecification(
- "JDK11", UNDESUGARED_JDK_11_LIB_JAR, "jdk11/desugar_jdk_libs.json", AndroidApiLevel.R);
+ "JDK11",
+ getUndesugaredJdk11LibJarForTesting(),
+ "jdk11/desugar_jdk_libs.json",
+ AndroidApiLevel.R);
public static LibraryDesugaringSpecification JDK11_MINIMAL =
new LibraryDesugaringSpecification(
"JDK11_MINIMAL",
- UNDESUGARED_JDK_11_LIB_JAR,
+ getUndesugaredJdk11LibJarForTesting(),
"jdk11/desugar_jdk_libs_minimal.json",
AndroidApiLevel.R);
public static LibraryDesugaringSpecification JDK11_PATH =
new LibraryDesugaringSpecification(
"JDK11_PATH",
- UNDESUGARED_JDK_11_LIB_JAR,
+ getUndesugaredJdk11LibJarForTesting(),
"jdk11/desugar_jdk_libs_path.json",
AndroidApiLevel.R);
@@ -43,20 +47,20 @@
public static LibraryDesugaringSpecification JDK11_PATH_ALTERNATIVE_3 =
new LibraryDesugaringSpecification(
"JDK11_PATH_ALTERNATIVE_3",
- UNDESUGARED_JDK_11_LIB_JAR,
+ getUndesugaredJdk11LibJarForTesting(),
"jdk11/desugar_jdk_libs_path_alternative_3.json",
AndroidApiLevel.R);
public static LibraryDesugaringSpecification JDK11_CHM_ONLY =
new LibraryDesugaringSpecification(
"JDK11_CHM_ONLY",
- UNDESUGARED_JDK_11_LIB_JAR,
+ getUndesugaredJdk11LibJarForTesting(),
"jdk11/chm_only_desugar_jdk_libs.json",
AndroidApiLevel.R);
public static LibraryDesugaringSpecification JDK11_LEGACY =
new LibraryDesugaringSpecification(
"JDK11_LEGACY",
// The legacy specification is not using the undesugared JAR.
- Paths.get("third_party/openjdk/desugar_jdk_libs_11/desugar_jdk_libs.jar"),
+ DESUGARED_JDK_11_LIB_JAR,
"jdk11/desugar_jdk_libs_legacy.json",
AndroidApiLevel.R);
public static final LibraryDesugaringSpecification RELEASED_1_0_9 =