// META: global=window,worker // META: script=/resources/WebIDLParser.js // META: script=/resources/idlharness.js // https://w3c.github.io/performance-timeline/ 'use strict'; promise_test(async t => { const observe = new Promise((resolve, reject) => { try { self.observer = new PerformanceObserver((entries, observer) => { self.entryList = entries; self.mark = entries.getEntries()[0]; resolve(); }); observer.observe({ entryTypes: ['mark'] }); performance.mark('test'); } catch (e) { reject(e); } }); const timeout = new Promise((_, reject) => { t.step_timeout(() => reject('Timed out waiting for observation'), 3000); }); const user = await fetch('/interfaces/user-timing.idl').then(r => r.text()); const execute_test = () => { idl_test( ['performance-timeline'], ['hr-time', 'dom'], idl_array => { idl_array.add_idls(user, {only: ['PerformanceMark']}); idl_array.add_objects({ Performance: ['performance'], // NOTE: PerformanceMark cascadingly tests PerformanceEntry PerformanceMark: ['mark'], PerformanceObserver: ['observer'], PerformanceObserverEntryList: ['entryList'], }); } ); }; return Promise.race([observe, timeout]).then( execute_test, reason => { execute_test(); return Promise.reject(reason); } ); })