tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

po-observe.html (2905B)


      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;
     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>