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");
+  }
 }
