• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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>
10PerformanceObserverInit.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;
20          }
21
22          observedEntries.push(entry);
23          if (observedEntries.length === entryTypes.length) {
24            observer.disconnect();
25            runTest();
26          }
27        });
28      }).observe({entryTypes});
29
30      // creates a `resource` entry
31      var img = document.createElement("img");
32      img.src = "./resources/square.png";
33      document.body.appendChild(img);
34
35      performance.mark("markName"); // creates a `mark` entry
36      performance.measure("measureName"); // creates a `measure` entry
37    }
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;
42    }
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");
50        }
51      });
52      po_nop.observe({
53        entryTypes,
54      });
55
56      // this PerformanceObserver should be notified about the previously
57      // buffered mark entry only
58      const bufferedEntries = [];
59      new PerformanceObserver(function (entryList, observer) {
60        entryList.getEntries().forEach(function(entry) {
61          if (shouldExclude(entry)) {
62            return;
63          }
64
65          bufferedEntries.push(entry);
66          if (bufferedEntries.length === 1) {
67            observer.disconnect();
68            po_nop.disconnect();
69            for (i = 0; i < bufferedEntries.length; i++) {
70              assert_equals(bufferedEntries[i].entryType, "mark")
71            }
72            t.done();
73          }
74        });
75      }).observe({
76        type: "mark",
77        buffered: true
78      });
79    }
80
81    const entryTypes = ["navigation", "resource", "mark", "measure"];
82    const observedEntries = [];
83    initTest();
84  }, "PerformanceObserverInit.buffered should retrieve previously buffered entries");
85
86</script>
87