diff options
Diffstat (limited to 'testing/web-platform/tests/performance-timeline/po-observe.html')
-rw-r--r-- | testing/web-platform/tests/performance-timeline/po-observe.html | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/testing/web-platform/tests/performance-timeline/po-observe.html b/testing/web-platform/tests/performance-timeline/po-observe.html new file mode 100644 index 0000000000..a48f0f3764 --- /dev/null +++ b/testing/web-platform/tests/performance-timeline/po-observe.html @@ -0,0 +1,86 @@ +<!DOCTYPE HTML> +<meta charset=utf-8> +<title>PerformanceObservers: PerformanceObserverInit.buffered</title> +<meta name="timeout" content="long"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="performanceobservers.js"></script> +<h1>PerformanceObservers: PerformanceObserverInit.buffered</h1> +<p> +PerformanceObserverInit.buffered should retrieve previously buffered entries +</p> +<div id="log"></div> +<script> + async_test(function (t) { + function initTest() { + new PerformanceObserver(function (entryList, observer) { + entryList.getEntries().forEach(function(entry) { + if (shouldExclude(entry)) { + return; + } + + observedEntries.push(entry); + if (observedEntries.length === entryTypes.length) { + observer.disconnect(); + runTest(); + } + }); + }).observe({entryTypes}); + + // creates a `resource` entry + var img = document.createElement("img"); + img.src = "./resources/square.png"; + document.body.appendChild(img); + + performance.mark("markName"); // creates a `mark` entry + performance.measure("measureName"); // creates a `measure` entry + } + function shouldExclude(entry) { + // exclude all `resource` entries that aren't for "square.png" + return entry.entryType === "resource" && + entry.name.indexOf("square.png") === -1; + } + function runTest() { + // this PerformanceObserver is a nop because we've already been notified about all of our `entryTypes` + var po_nop = new PerformanceObserver(function (entryList, observer) { + if (entryList.getEntries().find(function(entry) { + return !shouldExclude(entry); + })) { + assert_unreached("this PerformanceObserver callback should never be called"); + } + }); + po_nop.observe({ + entryTypes, + }); + + // this PerformanceObserver should be notified about the previously + // buffered mark entry only + const bufferedEntries = []; + new PerformanceObserver(function (entryList, observer) { + entryList.getEntries().forEach(function(entry) { + if (shouldExclude(entry)) { + return; + } + + bufferedEntries.push(entry); + if (bufferedEntries.length === 1) { + observer.disconnect(); + po_nop.disconnect(); + for (i = 0; i < bufferedEntries.length; i++) { + assert_equals(bufferedEntries[i].entryType, "mark") + } + t.done(); + } + }); + }).observe({ + type: "mark", + buffered: true + }); + } + + const entryTypes = ["navigation", "resource", "mark", "measure"]; + const observedEntries = []; + initTest(); + }, "PerformanceObserverInit.buffered should retrieve previously buffered entries"); + +</script> |