loaf-promise-scheduled-render.html (1218B)
1 <!DOCTYPE HTML> 2 <meta charset=utf-8> 3 <title>Long Animation Frame Timing: promise resolver during scheduled render</title> 4 <meta name="timeout" content="long"> 5 <script src="/resources/testharness.js"></script> 6 <script src="/resources/testharnessreport.js"></script> 7 <script> 8 function infinite_render() { 9 requestAnimationFrame(infinite_render); 10 } 11 12 function generate_loaf_and_wait_for_entry() { 13 return new Promise(resolve => { 14 const reference_time = performance.now(); 15 new PerformanceObserver((entries, observer) => { 16 const entry = entries.getEntries().find(e => 17 (e.startTime < reference_time) 18 && (e.startTime + e.duration > reference_time)); 19 if (entry) { 20 observer.disconnect(); 21 resolve(entry); 22 } 23 }).observe({type: "long-animation-frame"}); 24 while (performance.now() < reference_time + 100) { 25 } 26 }); 27 } 28 29 promise_test(async t => { 30 infinite_render(); 31 const response = await fetch("/common/dummy.xml"); 32 await response.text(); 33 const entry = await generate_loaf_and_wait_for_entry(); 34 assert_equals(entry.scripts.length, 1); 35 }); 36 </script> 37 <body> 38 </body>