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