observe-entry.js (945B)
1 // Given a resource name, returns a promise that will resolve to the 2 // corresponding PerformanceResourceTiming entry. The promise will reject, 3 // however, if the PerformanceResourceTiming entry isn't observed within ~2 4 // seconds (scaled according to WPT timeout scaling). 5 const observe_entry = entry_name => { 6 const entry = new Promise(resolve => { 7 new PerformanceObserver((entry_list, observer) => { 8 for (const entry of entry_list.getEntries()) { 9 if (entry.name.endsWith(entry_name)) { 10 resolve(entry); 11 observer.disconnect(); 12 return; 13 } 14 } 15 }).observe({"type": "resource", "buffered": true}); 16 }); 17 const timeout = new Promise((resolve, reject) => { 18 step_timeout(() => { 19 reject(new Error("observe_entry: timeout")); 20 }, 2000); 21 }); 22 // If the entry isn't observed within 2 seconds, assume it will never show 23 // up. 24 return Promise.race([entry, timeout]); 25 };