mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
eb9d7a437e
PR-URL: https://github.com/nodejs/node/pull/33770 Reviewed-By: Daijiro Wachi <daijiro.wachi@gmail.com> Reviewed-By: Shingo Inoue <leko.noor@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
51 lines
1.2 KiB
JavaScript
51 lines
1.2 KiB
JavaScript
/**
|
|
* Imports code into a worklet. E.g.
|
|
*
|
|
* importWorklet(CSS.paintWorklet, {url: 'script.js'});
|
|
* importWorklet(CSS.paintWorklet, '(javascript string)');
|
|
*
|
|
* @param {Worklet} worklet
|
|
* @param {(Object|string)} code
|
|
*/
|
|
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);
|
|
}
|
|
|
|
/** @private */
|
|
async function animationFrames(frames) {
|
|
for (let i = 0; i < frames; i++)
|
|
await new Promise(requestAnimationFrame);
|
|
}
|
|
|
|
/** @private */
|
|
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.
|
|
*
|
|
* @param {Worklet} worklet
|
|
* @param {(Object|string)} code
|
|
*/
|
|
async function importWorkletAndTerminateTestAfterAsyncPaint(worklet, code) {
|
|
if (typeof worklet === 'undefined') {
|
|
takeScreenshot();
|
|
return;
|
|
}
|
|
|
|
await importWorklet(worklet, code);
|
|
await workletPainted();
|
|
takeScreenshot();
|
|
}
|