Allow running individual Compose benchmarks without warmups

Change-Id: If4347c082595a3e252da21828f9d09894fc54935
diff --git a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkBase.java b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkBase.java
index 917c268..0e74101 100644
--- a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkBase.java
+++ b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkBase.java
@@ -4,6 +4,7 @@
 package com.android.tools.r8.benchmarks;
 
 import static org.junit.Assume.assumeFalse;
+import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -35,6 +36,15 @@
 
   @Test
   public void testBenchmarks() throws Exception {
+    testBenchmark();
+  }
+
+  protected void testBenchmarkWithName(String name) throws Exception {
+    assumeTrue(config.getName().equals(name));
+    testBenchmark();
+  }
+
+  private void testBenchmark() throws Exception {
     // Slows down the windows bot considerably and does not add much extra value.
     assumeFalse(ToolHelper.isWindows());
     config.run(new BenchmarkEnvironment(config, temp, false));
diff --git a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkEnvironment.java b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkEnvironment.java
index e8e5641..fc04cbf 100644
--- a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkEnvironment.java
+++ b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkEnvironment.java
@@ -49,6 +49,14 @@
     return Integer.parseInt(System.getProperty("BENCHMARK_ITERATIONS"));
   }
 
+  public boolean hasBenchmarkWarmupIterationsOverride() {
+    return System.getProperty("BENCHMARK_WARMUP_ITERATIONS") != null;
+  }
+
+  public int getBenchmarkWarmupIterationsOverride() {
+    return Integer.parseInt(System.getProperty("BENCHMARK_WARMUP_ITERATIONS"));
+  }
+
   public boolean hasOutputPath() {
     return System.getProperty("BENCHMARK_OUTPUT") != null;
   }
diff --git a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkRunner.java b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkRunner.java
index 85ae724..2029153 100644
--- a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkRunner.java
+++ b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkRunner.java
@@ -24,6 +24,12 @@
     return new BenchmarkRunner(environment);
   }
 
+  public int getWarmupIterations() {
+    return environment.hasBenchmarkWarmupIterationsOverride()
+        ? environment.getBenchmarkWarmupIterationsOverride()
+        : warmups;
+  }
+
   public BenchmarkRunner setWarmupIterations(int iterations) {
     this.warmups = iterations;
     return this;
@@ -54,13 +60,13 @@
     long warmupTotalTime = 0;
     BenchmarkConfig config = environment.getConfig();
     BenchmarkResultsWarmup warmupResults = null;
-    if (warmups > 0) {
+    if (getWarmupIterations() > 0) {
       warmupResults =
           config.isSingleBenchmark()
               ? new BenchmarkResultsWarmup(config.getName())
               : new BenchmarkResultsWarmup(config.getName(), config.getSubBenchmarks());
       long start = System.nanoTime();
-      for (int i = 0; i < warmups; i++) {
+      for (int i = 0; i < getWarmupIterations(); i++) {
         fn.run(warmupResults);
       }
       warmupTotalTime = System.nanoTime() - start;
@@ -79,8 +85,8 @@
             + config.getName()
             + " on target "
             + config.getTarget().getIdentifierName());
-    if (warmups > 0) {
-      printMetaInfo("warmup", warmups, warmupTotalTime);
+    if (getWarmupIterations() > 0) {
+      printMetaInfo("warmup", getWarmupIterations(), warmupTotalTime);
       if (config.hasTimeWarmupRuns()) {
         warmupResults.printResults(resultMode, environment.failOnCodeSizeDifferences());
       }
diff --git a/src/test/java/com/android/tools/r8/benchmarks/appdumps/ComposeSamplesBenchmarks.java b/src/test/java/com/android/tools/r8/benchmarks/appdumps/ComposeSamplesBenchmarks.java
index b74a7df..dd95d2d 100644
--- a/src/test/java/com/android/tools/r8/benchmarks/appdumps/ComposeSamplesBenchmarks.java
+++ b/src/test/java/com/android/tools/r8/benchmarks/appdumps/ComposeSamplesBenchmarks.java
@@ -12,6 +12,8 @@
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.List;
+import org.junit.Ignore;
+import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
@@ -105,4 +107,51 @@
         .allowUnusedDontWarnPatterns()
         .allowUnusedProguardConfigurationRules();
   }
+
+  @Ignore
+  @Test
+  @Override
+  public void testBenchmarks() throws Exception {
+    super.testBenchmarks();
+  }
+
+  @Test
+  public void testCraneApp() throws Exception {
+    testBenchmarkWithName("CraneApp");
+  }
+
+  @Test
+  public void testJetLaggedApp() throws Exception {
+    testBenchmarkWithName("JetLaggedApp");
+  }
+
+  @Test
+  public void testJetNewsApp() throws Exception {
+    testBenchmarkWithName("JetNewsApp");
+  }
+
+  @Test
+  public void testJetCasterApp() throws Exception {
+    testBenchmarkWithName("JetCasterApp");
+  }
+
+  @Test
+  public void testJetChatApp() throws Exception {
+    testBenchmarkWithName("JetChatApp");
+  }
+
+  @Test
+  public void testJetSnackApp() throws Exception {
+    testBenchmarkWithName("JetSnackApp");
+  }
+
+  @Test
+  public void testOwlApp() throws Exception {
+    testBenchmarkWithName("OwlApp");
+  }
+
+  @Test
+  public void testReplyApp() throws Exception {
+    testBenchmarkWithName("ReplyApp");
+  }
 }