diff --git a/index.html b/index.html
index 0425773..2604e02 100644
--- a/index.html
+++ b/index.html
@@ -41,6 +41,7 @@
                     <div class="version">3.0</div>
                 </a>
                 <div id="testContainer"></div>
+                <div id="leakedIframes"></div>
                 <div id="progress">
                     <progress aria-label="Progress" id="progress-completed"></progress>
                 </div>
diff --git a/resources/benchmark-runner.mjs b/resources/benchmark-runner.mjs
index 2d3fb7f..62c054c 100644
--- a/resources/benchmark-runner.mjs
+++ b/resources/benchmark-runner.mjs
@@ -360,10 +360,14 @@
 
     _removeFrame() {
         if (this._frame) {
-            // Downstream only. The React-Window workload sets a global childWindow object.
-            if (this._frame.contentWindow.globalThis.childWindow)
-                this._frame.contentWindow.globalThis.childWindow.close();
-            this._frame.parentNode.removeChild(this._frame);
+            if (params.leakyIframes) {
+                document.getElementById("leakedIframes").append(this._frame);
+            } else {
+                // Downstream only. The React-Window workload sets a global childWindow object.
+                if (this._frame.contentWindow.globalThis.childWindow)
+                    this._frame.contentWindow.globalThis.childWindow.close();
+                this._frame.parentNode.removeChild(this._frame);
+            }
             this._frame = null;
         }
     }
@@ -432,7 +436,7 @@
         // Remove frame to clear the view for displaying the results.
         this._removeFrame();
         await this._finalize();
-        this.markStart(finalizeLabel, finalizeStartLabel, finalizeEndLabel);
+        this.markEnd(finalizeLabel, finalizeStartLabel, finalizeEndLabel);
     }
 
     async _runSuite(suite) {
@@ -462,7 +466,7 @@
         this.markStart(suiteLabel, suiteStartLabel);
         for (const test of suite.tests)
             await this._runTestAndRecordResults(suite, test);
-        this.markStart(suiteLabel, suiteStartLabel, suiteEndLabel);
+        this.markEnd(suiteLabel, suiteStartLabel, suiteEndLabel);
     }
 
     _prepareMetrics(suite) {
@@ -512,7 +516,7 @@
                 // Infinite loop for the specified ms.
                 while (performance.now() - startTime < params.warmupBeforeSync)
                     continue;
-                this.markStart("warmup", "warmup-start", "warmup-end");
+                this.markEnd("warmup", "warmup-start", "warmup-end");
             }
             this.markStart(syncLabel, syncStartLabel);
             const syncStartTime = performance.now();
diff --git a/resources/developer-mode.mjs b/resources/developer-mode.mjs
index 60d5a1f..3179da8 100644
--- a/resources/developer-mode.mjs
+++ b/resources/developer-mode.mjs
@@ -25,6 +25,7 @@
     settings.append(createUIForMeasurePrepare());
     settings.append(createUIForDomainPerIteration());
     settings.append(createUIForForceGC());
+    settings.append(createUIForLeakyIframes());
 
     content.append(settings);
 
@@ -59,6 +60,23 @@
     return label;
 }
 
+function createUIForLeakyIframes() {
+    let check = document.createElement("input");
+    check.type = "checkbox";
+    check.id = "leaky-iframes-checkbox";
+    check.checked = !!params.leakyIframes;
+
+    check.onchange = () => {
+        params.leakyIframes = check.checked;
+        updateURL();
+    };
+
+    let label = document.createElement("label");
+    label.append(check, " ", span("Leak IFrames"));
+
+    return label;
+}
+
 function createUIForWarmupSuite() {
     let check = document.createElement("input");
     check.type = "checkbox";
@@ -326,7 +344,7 @@
     else
         url.searchParams.delete("measurementMethod");
 
-    const boolParamKeys = ["iterationCount", "useWarmupSuite", "warmupBeforeSync", "waitBeforeSync", "domainPerIteration", "suiteForceGC"];
+    const boolParamKeys = ["iterationCount", "useWarmupSuite", "warmupBeforeSync", "waitBeforeSync", "domainPerIteration", "suiteForceGC", "leakyIframes"];
     for (const paramKey of boolParamKeys) {
         if (params[paramKey] !== defaultParams[paramKey])
             url.searchParams.set(paramKey, params[paramKey]);
diff --git a/resources/main.css b/resources/main.css
index 82915bd..ffd5de2 100644
--- a/resources/main.css
+++ b/resources/main.css
@@ -324,6 +324,10 @@
     height: var(--viewport-height);
 }
 
+#leakedIframes {
+    display: none;
+}
+
 section#home p {
     margin: 0 auto;
     width: 70%;
diff --git a/resources/params.mjs b/resources/params.mjs
index 037d8e6..abc6bef 100644
--- a/resources/params.mjs
+++ b/resources/params.mjs
@@ -33,6 +33,8 @@
     suiteForceGC = false;
     currentIteration = 0;
     embedded = false;
+    // Leak iframes to DevTools can display sources.
+    leakyIframes = false;
 
 
     constructor(searchParams = undefined, freeze = true) {
@@ -151,6 +153,11 @@
             searchParams.delete("shuffleSeed");
         }
 
+        if (searchParams.has("leakyIframes")) {
+            this.leakyIframes = true;
+            searchParams.delete("leakyIframes");
+        }
+
         const unused = Array.from(searchParams.keys());
         if (unused.length > 0)
             console.error("Got unused search params", unused);
