| function run({script, port}) { |
| const reports = []; |
| const observer = new ReportingObserver((rs) => { |
| for (const r of rs) { |
| reports.push(r.toJSON()); |
| } |
| }); |
| // Wait 200ms for reports to settle. |
| setTimeout(() => { |
| observer.disconnect(); |
| port.postMessage(reports); |
| }, 200); |
| observer.observe(); |
| |
| // This eval call may generate some reports. |
| eval(script); |
| } |
| |
| // For DedicatedWorker and ServiceWorker |
| self.addEventListener('message', (e) => run(e.data)); |
| |
| // For SharedWorker |
| self.addEventListener('connect', (e) => { |
| e.ports[0].onmessage = (ev) => run(ev.data); |
| }); |