| // META: script=/resources/WebIDLParser.js |
| // META: script=/resources/idlharness.js |
| |
| // https://w3c.github.io/longtask-timing/ |
| |
| 'use strict'; |
| |
| promise_test(async t => { |
| const srcs = ['longtasks', 'performance-timeline']; |
| const [idl, perf] = await Promise.all( |
| srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text()))); |
| |
| const idl_array = new IdlArray(); |
| idl_array.add_idls(idl); |
| idl_array.add_dependency_idls(perf); |
| |
| const testIdls = new Promise(resolve => { |
| try { |
| const observer = new PerformanceObserver(entryList => { |
| const entries = Array.from(entryList.getEntries()); |
| const attribution = entries.reduce( |
| (sum, e) => sum.concat(e.attribution || []), []); |
| idl_array.add_objects({ |
| PerformanceLongTaskTiming: entries, |
| TaskAttributionTiming: attribution, |
| }); |
| idl_array.test(); |
| resolve(); |
| }); |
| observer.observe({entryTypes: ['longtask']}); |
| } catch (e) { |
| // Will be surfaces in idlharness.js's test_object below. |
| } |
| }); |
| |
| const longTask = () => { |
| var begin = self.performance.now(); |
| while (self.performance.now() < begin + 100); |
| } |
| t.step_timeout(longTask, 0); |
| |
| const timeout = new Promise( |
| (_, reject) => t.step_timeout(reject, 1000)); |
| return Promise.race([testIdls, timeout]) |
| .then( |
| t.step_func_done(), |
| () => { |
| idl_array.test(); // Rejected, but test what we can. |
| return Promise.reject('LongTask was not observed'); |
| }); |
| }, 'longtasks interfaces'); |