25 lines
945 B
JavaScript
25 lines
945 B
JavaScript
// Given a resource name, returns a promise that will resolve to the
|
|
// corresponding PerformanceResourceTiming entry. The promise will reject,
|
|
// however, if the PerformanceResourceTiming entry isn't observed within ~2
|
|
// seconds (scaled according to WPT timeout scaling).
|
|
const observe_entry = entry_name => {
|
|
const entry = new Promise(resolve => {
|
|
new PerformanceObserver((entry_list, observer) => {
|
|
for (const entry of entry_list.getEntries()) {
|
|
if (entry.name.endsWith(entry_name)) {
|
|
resolve(entry);
|
|
observer.disconnect();
|
|
return;
|
|
}
|
|
}
|
|
}).observe({"type": "resource", "buffered": true});
|
|
});
|
|
const timeout = new Promise((resolve, reject) => {
|
|
step_timeout(() => {
|
|
reject(new Error("observe_entry: timeout"));
|
|
}, 2000);
|
|
});
|
|
// If the entry isn't observed within 2 seconds, assume it will never show
|
|
// up.
|
|
return Promise.race([entry, timeout]);
|
|
};
|