Bug 1532639 [wpt PR 15630] - Add <meta name=timeout content=long> to WPT in SlowTests...
[gecko.git] / testing / web-platform / tests / performance-timeline / po-observe.html
blob6cc3f1ecf56202917bc8b6a340befb6b0a61d949
1 <!DOCTYPE HTML>
2 <meta charset=utf-8>
3 <title>PerformanceObservers: PerformanceObserverInit.buffered</title>
4 <meta name="timeout" content="long">
5 <script src="/resources/testharness.js"></script>
6 <script src="/resources/testharnessreport.js"></script>
7 <script src="performanceobservers.js"></script>
8 <h1>PerformanceObservers: PerformanceObserverInit.buffered</h1>
9 <p>
10 PerformanceObserverInit.buffered should retrieve previously buffered entries
11 </p>
12 <div id="log"></div>
13 <script>
14 async_test(function (t) {
15 function initTest() {
16 new PerformanceObserver(function (entryList, observer) {
17 entryList.getEntries().forEach(function(entry) {
18 if (shouldExclude(entry)) {
19 return;
22 observedEntries.push(entry);
23 if (observedEntries.length === entryTypes.length) {
24 observer.disconnect();
25 runTest();
27 });
28 }).observe({entryTypes});
30 // creates a `resource` entry
31 var img = document.createElement("img");
32 img.src = "./resources/square.png";
33 document.body.appendChild(img);
35 performance.mark("markName"); // creates a `mark` entry
36 performance.measure("measureName"); // creates a `measure` entry
38 function shouldExclude(entry) {
39 // exclude all `resource` entries that aren't for "square.png"
40 return entry.entryType === "resource" &&
41 entry.name.indexOf("square.png") === -1;
43 function runTest() {
44 // this PerformanceObserver is a nop because we've already been notified about all of our `entryTypes`
45 var po_nop = new PerformanceObserver(function (entryList, observer) {
46 if (entryList.getEntries().find(function(entry) {
47 return !shouldExclude(entry);
48 })) {
49 assert_unreached("this PerformanceObserver callback should never be called");
51 });
52 po_nop.observe({
53 entryTypes,
54 buffered: false
55 });
57 // this PerformanceObserver should be notified about the previously
58 // buffered mark entry only
59 const bufferedEntries = [];
60 new PerformanceObserver(function (entryList, observer) {
61 entryList.getEntries().forEach(function(entry) {
62 if (shouldExclude(entry)) {
63 return;
66 bufferedEntries.push(entry);
67 if (bufferedEntries.length === 1) {
68 observer.disconnect();
69 po_nop.disconnect();
70 for (i = 0; i < bufferedEntries.length; i++) {
71 assert_equals(bufferedEntries[i].entryType, "mark")
73 t.done();
75 });
76 }).observe({
77 type: "mark",
78 buffered: true
79 });
82 const entryTypes = ["navigation", "resource", "mark", "measure"];
83 const observedEntries = [];
84 initTest();
85 }, "PerformanceObserverInit.buffered should retrieve previously buffered entries");
87 </script>