diff --git a/tools/perf/d8.html b/tools/perf/d8.html
index d495324..848ceea 100644
--- a/tools/perf/d8.html
+++ b/tools/perf/d8.html
@@ -48,7 +48,8 @@
       'Dex size': { default: true },
       'Nondeterminism': { default: true },
       'Runtime': { default: true },
-      'Runtime variance': { default: false }
+      'Runtime variance': { default: false },
+      'Warmup': { default: false }
     });
     state.initializeZoom();
     dom.initializeBenchmarkSelectors();
@@ -89,11 +90,9 @@
           const runtimeData =
               filteredCommits.map(
                   (c, i) =>
-                      selectedBenchmark in filteredCommits[i].benchmarks
-                          ? getAllResults(selectedBenchmark, filteredCommits[i], "runtime",
-                                results => dom.transformRuntimeData(results))
-                              .ns_to_s()
-                          : NaN);
+                      getAllResults(
+                          selectedBenchmark, filteredCommits[i], "runtime",
+                          results => dom.transformRuntimeData(results).ns_to_s()));
           const runtimeScatterData = [];
           for (const commit of filteredCommits.values()) {
             if (!(selectedBenchmark in commit.benchmarks)) {
@@ -104,6 +103,12 @@
               runtimeScatterData.push({ x: commit.index, y: runtime.ns_to_s() });
             }
           }
+          const warmupData =
+              filteredCommits.map(
+                  (c, i) =>
+                      getAllWarmupResults(
+                          selectedBenchmark, filteredCommits[i], "runtime",
+                          results => dom.transformRuntimeData(results).ns_to_s()));
 
           const skipped = (ctx, value) => ctx.p0.skip || ctx.p1.skip ? value : undefined;
           datasets.push(...[
@@ -176,6 +181,29 @@
                 }
               },
               yAxisID: 'y_runtime'
+            },
+            {
+              benchmark: selectedBenchmark,
+              type: 'line',
+              label: 'Warmup',
+              data: warmupData,
+              datalabels: {
+                labels: {
+                  value: null
+                }
+              },
+              tension: 0.1,
+              yAxisID: 'y_runtime',
+              segment: {
+                borderColor: ctx =>
+                    skipped(
+                        ctx,
+                        chart.get()
+                            ? chart.get().data.datasets[ctx.datasetIndex].backgroundColor
+                            : undefined),
+                borderDash: ctx => skipped(ctx, [6, 6]),
+              },
+              spanGaps: true
             }
           ]);
         });
diff --git a/tools/perf/r8.html b/tools/perf/r8.html
index 23b6c7b..a992005 100644
--- a/tools/perf/r8.html
+++ b/tools/perf/r8.html
@@ -51,7 +51,8 @@
       'Oat size': { default: true },
       'Nondeterminism': { default: true },
       'Runtime': { default: true },
-      'Runtime variance': { default: false }
+      'Runtime variance': { default: false },
+      'Warmup': { default: false }
     });
     state.initializeZoom();
     dom.initializeBenchmarkSelectors();
@@ -101,11 +102,9 @@
           const runtimeData =
               filteredCommits.map(
                   (c, i) =>
-                      selectedBenchmark in filteredCommits[i].benchmarks
-                          ? getAllResults(selectedBenchmark, filteredCommits[i], "runtime",
-                                results => dom.transformRuntimeData(results))
-                              .ns_to_s()
-                          : NaN);
+                      getAllResults(
+                          selectedBenchmark, filteredCommits[i], "runtime",
+                          results => dom.transformRuntimeData(results).ns_to_s()));
           const runtimeScatterData = [];
           for (const commit of filteredCommits.values()) {
             if (!(selectedBenchmark in commit.benchmarks)) {
@@ -116,6 +115,12 @@
               runtimeScatterData.push({ x: commit.index, y: runtime.ns_to_s() });
             }
           }
+          const warmupData =
+              filteredCommits.map(
+                  (c, i) =>
+                      getAllWarmupResults(
+                          selectedBenchmark, filteredCommits[i], "runtime",
+                          results => dom.transformRuntimeData(results).ns_to_s()));
 
           const skipped = (ctx, value) => ctx.p0.skip || ctx.p1.skip ? value : undefined;
           datasets.push(...[
@@ -254,6 +259,29 @@
                 }
               },
               yAxisID: 'y_runtime'
+            },
+            {
+              benchmark: selectedBenchmark,
+              type: 'line',
+              label: 'Warmup',
+              data: warmupData,
+              datalabels: {
+                labels: {
+                  value: null
+                }
+              },
+              tension: 0.1,
+              yAxisID: 'y_runtime',
+              segment: {
+                borderColor: ctx =>
+                    skipped(
+                        ctx,
+                        chart.get()
+                            ? chart.get().data.datasets[ctx.datasetIndex].backgroundColor
+                            : undefined),
+                borderDash: ctx => skipped(ctx, [6, 6]),
+              },
+              spanGaps: true
             }
           ]);
         });
diff --git a/tools/perf/retrace.html b/tools/perf/retrace.html
index 7437025..b6331c6 100644
--- a/tools/perf/retrace.html
+++ b/tools/perf/retrace.html
@@ -46,7 +46,8 @@
     state.initializeBenchmarks();
     state.initializeLegends({
       'Runtime': { default: true },
-      'Runtime variance': { default: true }
+      'Runtime variance': { default: true },
+      'Warmup': { default: false }
     });
     state.initializeZoom();
     dom.initializeBenchmarkSelectors();
@@ -69,11 +70,9 @@
           const runtimeData =
               filteredCommits.map(
                   (c, i) =>
-                      selectedBenchmark in filteredCommits[i].benchmarks
-                          ? getAllResults(selectedBenchmark, filteredCommits[i], "runtime",
-                                results => dom.transformRuntimeData(results))
-                              .ns_to_s()
-                          : NaN);
+                      getAllResults(
+                          selectedBenchmark, filteredCommits[i], "runtime",
+                          results => dom.transformRuntimeData(results).ns_to_s()));
           const runtimeScatterData = [];
           for (const commit of filteredCommits.values()) {
             if (!(selectedBenchmark in commit.benchmarks)) {
@@ -84,6 +83,12 @@
               runtimeScatterData.push({ x: commit.index, y: runtime.ns_to_s() });
             }
           }
+          const warmupData =
+              filteredCommits.map(
+                  (c, i) =>
+                      getAllWarmupResults(
+                          selectedBenchmark, filteredCommits[i], "runtime",
+                          results => dom.transformRuntimeData(results).ns_to_s()));
 
           const skipped = (ctx, value) => ctx.p0.skip || ctx.p1.skip ? value : undefined;
           datasets.push(...[
@@ -121,6 +126,29 @@
                 }
               },
               yAxisID: 'y_runtime'
+            },
+            {
+              benchmark: selectedBenchmark,
+              type: 'line',
+              label: 'Warmup',
+              data: warmupData,
+              datalabels: {
+                labels: {
+                  value: null
+                }
+              },
+              tension: 0.1,
+              yAxisID: 'y_runtime',
+              segment: {
+                borderColor: ctx =>
+                    skipped(
+                        ctx,
+                        chart.get()
+                            ? chart.get().data.datasets[ctx.datasetIndex].backgroundColor
+                            : undefined),
+                borderDash: ctx => skipped(ctx, [6, 6]),
+              },
+              spanGaps: true
             }
           ]);
         });
diff --git a/tools/perf/scales.js b/tools/perf/scales.js
index 8378e2f..bd3226a 100644
--- a/tools/perf/scales.js
+++ b/tools/perf/scales.js
@@ -21,6 +21,7 @@
   }
   console.assert(state.hasLegend('Runtime'));
   console.assert(state.hasLegend('Runtime variance'));
+  console.assert(state.hasLegend('Warmup'));
   scales.y_runtime = {
     position: state.hasLegend('Dex size') ? 'right' : 'left',
     title: {
@@ -62,7 +63,9 @@
   }
   if (scales.y_runtime) {
     scales.y_runtime.display =
-        state.isLegendSelected('Runtime') || state.isLegendSelected('Runtime variance');
+        state.isLegendSelected('Runtime')
+            || state.isLegendSelected('Runtime variance')
+            || state.isLegendSelected('Warmup');
   }
 }
 
diff --git a/tools/perf/utils.js b/tools/perf/utils.js
index 13cd09c..e699f32 100644
--- a/tools/perf/utils.js
+++ b/tools/perf/utils.js
@@ -1,11 +1,12 @@
 // Copyright (c) 2024, 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.
-function getSingleResult(benchmark, commit, resultName, resultIteration = 0) {
+function getSingleResult(benchmark, commit, resultName, resultIteration = 0, warmup = false) {
   if (!(benchmark in commit.benchmarks)) {
     return NaN;
   }
-  const allResults = commit.benchmarks[benchmark].results;
+  const benchmarkData = commit.benchmarks[benchmark];
+  const allResults = warmup ? benchmarkData.warmup : benchmarkData.results;
   const resultsForIteration = allResults[resultIteration];
   // If a given iteration does not declare a result, then the result
   // was the same as the first run.
@@ -15,14 +16,25 @@
   return resultsForIteration[resultName];
 }
 
-function getAllResults(benchmark, commit, resultName, transformation) {
+function getAllResults(benchmark, commit, resultName, transformation, warmup = false) {
+  if (!(benchmark in commit.benchmarks)) {
+    return NaN;
+  }
+  const benchmarkData = commit.benchmarks[benchmark];
+  if (warmup && !('warmup' in benchmarkData)) {
+    return NaN;
+  }
   const result = [];
-  const allResults = commit.benchmarks[benchmark].results;
+  const allResults = warmup ? benchmarkData.warmup : benchmarkData.results;
   for (var iteration = 0; iteration < allResults.length; iteration++) {
-    result.push(getSingleResult(benchmark, commit, resultName, iteration));
+    result.push(getSingleResult(benchmark, commit, resultName, iteration, warmup));
   }
   if (transformation) {
     return transformation(result);
   }
   return result;
 }
+
+function getAllWarmupResults(benchmark, commit, resultName, transformation) {
+  return getAllResults(benchmark, commit, resultName, transformation, true);
+}
