| <!DOCTYPE HTML> |
| <meta charset=utf-8> |
| <title>PerformanceObservers: PerformanceObserverInit.buffered</title> |
| <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, |
| buffered: false |
| }); |
| |
| // this PerformanceObserver should be notified about the previously buffered entries |
| const bufferedEntries = []; |
| new PerformanceObserver(function (entryList, observer) { |
| entryList.getEntries().forEach(function(entry) { |
| if (shouldExclude(entry)) { |
| return; |
| } |
| |
| bufferedEntries.push(entry); |
| if (bufferedEntries.length === entryTypes.length) { |
| observer.disconnect(); |
| po_nop.disconnect(); |
| checkEntries(bufferedEntries, observedEntries); |
| t.done(); |
| } |
| }); |
| }).observe({ |
| entryTypes, |
| buffered: true |
| }); |
| } |
| |
| const entryTypes = ["navigation", "resource", "mark", "measure"]; |
| const observedEntries = []; |
| initTest(); |
| }, "PerformanceObserverInit.buffered should retrieve previously buffered entries"); |
| |
| </script> |