Fix L8 Benchmark to use Legacy configurations

Bug: b/288859478
Change-Id: Ie00dd83c89b041495106abaab7580e44801210af
diff --git a/.gitignore b/.gitignore
index 503889a..a71b445 100644
--- a/.gitignore
+++ b/.gitignore
@@ -165,6 +165,8 @@
 third_party/openjdk/desugar_jdk_libs_releases/1.1.1.tar.gz
 third_party/openjdk/desugar_jdk_libs_releases/1.1.5
 third_party/openjdk/desugar_jdk_libs_releases/1.1.5.tar.gz
+third_party/openjdk/desugar_jdk_libs_releases/2.0.3
+third_party/openjdk/desugar_jdk_libs_releases/2.0.3.tar.gz
 third_party/openjdk/jdk-[0-9][0-9]/linux
 third_party/openjdk/jdk-[0-9][0-9]/linux.tar.gz
 third_party/openjdk/jdk-[0-9][0-9]/osx
diff --git a/build.gradle b/build.gradle
index e41cbf1..4b948af 100644
--- a/build.gradle
+++ b/build.gradle
@@ -345,12 +345,12 @@
                 "openjdk/openjdk-rt-1.8",
                 "openjdk/desugar_jdk_libs",
                 "openjdk/desugar_jdk_libs_11",
-                "openjdk/desugar_jdk_libs_legacy",
                 "openjdk/desugar_jdk_libs_releases/1.0.9",
                 "openjdk/desugar_jdk_libs_releases/1.0.10",
                 "openjdk/desugar_jdk_libs_releases/1.1.0",
                 "openjdk/desugar_jdk_libs_releases/1.1.1",
                 "openjdk/desugar_jdk_libs_releases/1.1.5",
+                "openjdk/desugar_jdk_libs_releases/2.0.3",
                 "openjdk/jdk-11-test",
                 "opensource-apps/tivi",
                 "proguard/proguard5.2.1",
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
index 9095f727..3f12fc8 100644
--- a/src/test/java/com/android/tools/r8/benchmarks/desugaredlib/L8Benchmark.java
+++ b/src/test/java/com/android/tools/r8/benchmarks/desugaredlib/L8Benchmark.java
@@ -3,23 +3,19 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.benchmarks.desugaredlib;
 
-import static com.android.tools.r8.ToolHelper.getDesugarLibConversions;
-import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.CustomConversionVersion.LATEST;
-
 import com.android.tools.r8.L8TestBuilder;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestState;
+import com.android.tools.r8.ToolHelper;
 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;
@@ -29,10 +25,12 @@
 @RunWith(Parameterized.class)
 public class L8Benchmark extends BenchmarkBase {
 
-  private static final BenchmarkDependency androidJar = BenchmarkDependency.getAndroidJar30();
-  private static final BenchmarkDependency jdk11Conf =
+  private static final BenchmarkDependency ANDROID_JAR = BenchmarkDependency.getAndroidJar30();
+  private static final BenchmarkDependency LEGACY_CONF =
       new BenchmarkDependency(
-          "legacyConf", "desugar_jdk_libs_11", Paths.get("third_party", "openjdk"));
+          "legacyConf",
+          "2.0.3",
+          Paths.get(ToolHelper.THIRD_PARTY_DIR, "openjdk", "desugar_jdk_libs_releases"));
 
   public L8Benchmark(BenchmarkConfig config, TestParameters parameters) {
     super(config, parameters);
@@ -50,23 +48,21 @@
             .setTarget(BenchmarkTarget.D8)
             .setFromRevision(12733)
             .setMethod(L8Benchmark::run)
-            .addDependency(androidJar)
-            .addDependency(jdk11Conf)
+            .addDependency(ANDROID_JAR)
+            .addDependency(LEGACY_CONF)
             .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, getDesugarLibConversions(LATEST)),
-            Paths.get("src/library_desugar/jdk11/desugar_jdk_libs.json"),
-            ImmutableSet.of(androidJar.getRoot(environment).resolve("android.jar")),
+            ImmutableSet.of(
+                LEGACY_CONF.getRoot(environment).resolve("desugar_jdk_libs.jar"),
+                LEGACY_CONF.getRoot(environment).resolve("desugar_jdk_libs_configuration.jar")),
+            LEGACY_CONF.getRoot(environment).resolve("desugar.json"),
+            ImmutableSet.of(ANDROID_JAR.getRoot(environment).resolve("android.jar")),
             LibraryDesugaringSpecification.JDK11_DESCRIPTOR,
             "");
     runner(environment.getConfig())
diff --git a/src/test/java/com/android/tools/r8/benchmarks/desugaredlib/LegacyDesugaredLibraryBenchmark.java b/src/test/java/com/android/tools/r8/benchmarks/desugaredlib/LegacyDesugaredLibraryBenchmark.java
index 0e86477..6b5e4f9 100644
--- a/src/test/java/com/android/tools/r8/benchmarks/desugaredlib/LegacyDesugaredLibraryBenchmark.java
+++ b/src/test/java/com/android/tools/r8/benchmarks/desugaredlib/LegacyDesugaredLibraryBenchmark.java
@@ -24,12 +24,12 @@
 @RunWith(Parameterized.class)
 public class LegacyDesugaredLibraryBenchmark extends BenchmarkBase {
 
-  private static final BenchmarkDependency androidJar = BenchmarkDependency.getAndroidJar30();
-  private static final BenchmarkDependency legacyConf =
+  private static final BenchmarkDependency ANDROID_JAR = BenchmarkDependency.getAndroidJar30();
+  private static final BenchmarkDependency LEGACY_CONF =
       new BenchmarkDependency(
           "legacyConf",
-          "desugar_jdk_libs_legacy",
-          Paths.get(ToolHelper.THIRD_PARTY_DIR, "openjdk"));
+          "1.1.5",
+          Paths.get(ToolHelper.THIRD_PARTY_DIR, "openjdk", "desugar_jdk_libs_releases"));
 
   public LegacyDesugaredLibraryBenchmark(BenchmarkConfig config, TestParameters parameters) {
     super(config, parameters);
@@ -47,8 +47,8 @@
             .setTarget(BenchmarkTarget.D8)
             .setFromRevision(12150)
             .setMethod(LegacyDesugaredLibraryBenchmark::run)
-            .addDependency(androidJar)
-            .addDependency(legacyConf)
+            .addDependency(ANDROID_JAR)
+            .addDependency(LEGACY_CONF)
             .measureRunTime()
             .build());
   }
@@ -62,15 +62,13 @@
             results ->
                 testForD8(environment.getTemp(), Backend.DEX)
                     .setMinApi(AndroidApiLevel.B)
-                    .addLibraryFiles(androidJar.getRoot(environment).resolve("android.jar"))
+                    .addLibraryFiles(ANDROID_JAR.getRoot(environment).resolve("android.jar"))
                     .apply(
                         b ->
                             b.getBuilder()
                                 .addDesugaredLibraryConfiguration(
                                     StringResource.fromFile(
-                                        legacyConf
-                                            .getRoot(environment)
-                                            .resolve("desugar_jdk_libs.json"))))
+                                        LEGACY_CONF.getRoot(environment).resolve("desugar.json"))))
                     .benchmarkCompile(results));
   }
 
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 b82ba3e..de43daf 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
@@ -29,6 +29,7 @@
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.ExecutorService;
+import java.util.function.Supplier;
 import org.junit.rules.TemporaryFolder;
 
 public class LibraryDesugaringSpecification {
@@ -91,22 +92,27 @@
     LATEST
   }
 
-  private static final Path tempLibraryJDK11Undesugar = createUndesugaredJdk11LibJarForTesting();
+  private static Path tempLibraryJdk11UndesugarCache;
 
-  private static Path createUndesugaredJdk11LibJarForTesting() {
+  private static synchronized Path ensureUndesugaredJdk11LibJarForTesting() {
+    if (tempLibraryJdk11UndesugarCache != null) {
+      return tempLibraryJdk11UndesugarCache;
+    }
     try {
       TemporaryFolder staticTemp = ToolHelper.getTemporaryFolderForTest();
       staticTemp.create();
       Path jdklib_desugaring = staticTemp.newFolder("jdklib_desugaring").toPath();
-      return DesugaredLibraryJDK11Undesugarer.undesugaredJarJDK11(
-          jdklib_desugaring, DESUGARED_JDK_11_LIB_JAR);
+      tempLibraryJdk11UndesugarCache =
+          DesugaredLibraryJDK11Undesugarer.undesugaredJarJDK11(
+              jdklib_desugaring, DESUGARED_JDK_11_LIB_JAR);
+      return tempLibraryJdk11UndesugarCache;
     } catch (IOException e) {
       throw new RuntimeException(e);
     }
   }
 
   public static Path getTempLibraryJDK11Undesugar() {
-    return tempLibraryJDK11Undesugar;
+    return ensureUndesugaredJdk11LibJarForTesting();
   }
 
   // Main head specifications.
@@ -121,7 +127,7 @@
   public static LibraryDesugaringSpecification JDK11 =
       new LibraryDesugaringSpecification(
           "JDK11",
-          tempLibraryJDK11Undesugar,
+          LibraryDesugaringSpecification::ensureUndesugaredJdk11LibJarForTesting,
           "jdk11/desugar_jdk_libs.json",
           AndroidApiLevel.R,
           JDK11_DESCRIPTOR,
@@ -129,7 +135,7 @@
   public static LibraryDesugaringSpecification JDK11_MINIMAL =
       new LibraryDesugaringSpecification(
           "JDK11_MINIMAL",
-          tempLibraryJDK11Undesugar,
+          LibraryDesugaringSpecification::ensureUndesugaredJdk11LibJarForTesting,
           "jdk11/desugar_jdk_libs_minimal.json",
           AndroidApiLevel.R,
           EMPTY_DESCRIPTOR_24,
@@ -137,7 +143,7 @@
   public static LibraryDesugaringSpecification JDK11_PATH =
       new LibraryDesugaringSpecification(
           "JDK11_PATH",
-          tempLibraryJDK11Undesugar,
+          LibraryDesugaringSpecification::ensureUndesugaredJdk11LibJarForTesting,
           "jdk11/desugar_jdk_libs_nio.json",
           AndroidApiLevel.R,
           JDK11_PATH_DESCRIPTOR,
@@ -165,7 +171,8 @@
       new LibraryDesugaringSpecification("1.1.5", AndroidApiLevel.P);
 
   private final String name;
-  private final Set<Path> desugarJdkLibs;
+  private final Set<Supplier<Path>> desugarJdkLibsProvider;
+  private Set<Path> desugarJdkLibs;
   private final Path specification;
   private final Set<Path> libraryFiles;
   private final Descriptor descriptor;
@@ -195,7 +202,36 @@
       Set<Path> libraryFiles,
       Descriptor descriptor,
       String extraKeepRules) {
+    this(name, null, desugarJdkLibs, specification, libraryFiles, descriptor, extraKeepRules);
+  }
+
+  private LibraryDesugaringSpecification(
+      String name,
+      Supplier<Path> desugarJdkLibsSupplier,
+      String specificationPath,
+      AndroidApiLevel androidJarLevel,
+      Descriptor descriptor,
+      CustomConversionVersion legacy) {
+    this(
+        name,
+        ImmutableSet.of(desugarJdkLibsSupplier, () -> ToolHelper.getDesugarLibConversions(legacy)),
+        null,
+        Paths.get(ToolHelper.LIBRARY_DESUGAR_SOURCE_DIR + specificationPath),
+        ImmutableSet.of(ToolHelper.getAndroidJar(androidJarLevel)),
+        descriptor,
+        "");
+  }
+
+  private LibraryDesugaringSpecification(
+      String name,
+      Set<Supplier<Path>> desugarJdkLibsSuppliers,
+      Set<Path> desugarJdkLibs,
+      Path specification,
+      Set<Path> libraryFiles,
+      Descriptor descriptor,
+      String extraKeepRules) {
     this.name = name;
+    this.desugarJdkLibsProvider = desugarJdkLibsSuppliers;
     this.desugarJdkLibs = desugarJdkLibs;
     this.specification = specification;
     this.libraryFiles = libraryFiles;
@@ -220,7 +256,14 @@
     return name;
   }
 
-  public Set<Path> getDesugarJdkLibs() {
+  public synchronized Set<Path> getDesugarJdkLibs() {
+    if (desugarJdkLibs == null) {
+      ImmutableSet.Builder<Path> builder = ImmutableSet.builder();
+      for (Supplier<Path> pathSupplier : desugarJdkLibsProvider) {
+        builder.add(pathSupplier.get());
+      }
+      desugarJdkLibs = builder.build();
+    }
     return desugarJdkLibs;
   }
 
diff --git a/third_party/openjdk/desugar_jdk_libs_releases/2.0.3.tar.gz.sha1 b/third_party/openjdk/desugar_jdk_libs_releases/2.0.3.tar.gz.sha1
new file mode 100644
index 0000000..017f318
--- /dev/null
+++ b/third_party/openjdk/desugar_jdk_libs_releases/2.0.3.tar.gz.sha1
@@ -0,0 +1 @@
+82006808a828dcb64726f119ab93402281fa9f17
\ No newline at end of file