blob: 585bda92dced217354f93fb5beebe6d930890c0e [file] [log] [blame]
// 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);
}
);
})