| // Imports code into a worklet. E.g. |
| // |
| // importWorklet(CSS.paintWorklet, {url: 'script.js'}); |
| // importWorklet(CSS.paintWorklet, '/* javascript string */'); |
| function importWorklet(worklet, code) { |
| let url; |
| if (typeof code === 'object') { |
| url = code.url; |
| } else { |
| const blob = new Blob([code], {type: 'text/javascript'}); |
| url = URL.createObjectURL(blob); |
| } |
| |
| return worklet.addModule(url); |
| } |
| |
| async function animationFrames(frames) { |
| for (let i = 0; i < frames; i++) |
| await new Promise(requestAnimationFrame); |
| } |
| |
| async function workletPainted() { |
| await animationFrames(2); |
| } |
| |
| // To make sure that we take the snapshot at the right time, we do double |
| // requestAnimationFrame. In the second frame, we take a screenshot, that makes |
| // sure that we already have a full frame. |
| async function importWorkletAndTerminateTestAfterAsyncPaint(worklet, code) { |
| if (typeof worklet === 'undefined') { |
| takeScreenshot(); |
| return; |
| } |
| |
| await importWorklet(worklet, code); |
| await workletPainted(); |
| takeScreenshot(); |
| } |