Skip to content
Snippets Groups Projects
Commit 43d48b44 authored by Cheng Shao's avatar Cheng Shao Committed by Marge Bot
Browse files

wasm: use scheduler.postTask() for context switch when available

This patch makes use of scheduler.postTask() for JSFFI context switch
when it's available. It's a more principled approach than our
MessageChannel based setImmediate() implementation, and it's available
in latest version of Chromium based browsers.
parent 4941b90e
No related branches found
No related tags found
No related merge requests found
......@@ -75,17 +75,21 @@ class SetImmediate {
// The actual setImmediate() to be used. This is a ESM module top
// level binding and doesn't pollute the globalThis namespace.
let setImmediate;
if (globalThis.setImmediate) {
// node.js, bun
setImmediate = globalThis.setImmediate;
} else {
const setImmediate = await (async () => {
// https://developer.mozilla.org/en-US/docs/Web/API/Scheduler
if (globalThis.scheduler) {
return (cb, ...args) => scheduler.postTask(() => cb(...args));
}
// node, bun, or other scripts might have set this up in the browser
if (globalThis.setImmediate) {
return globalThis.setImmediate;
}
try {
// deno
setImmediate = (await import("node:timers")).setImmediate;
return (await import("node:timers")).setImmediate;
} catch {
// browsers
const sm = new SetImmediate();
setImmediate = (cb, ...args) => sm.setImmediate(cb, ...args);
return (cb, ...args) => sm.setImmediate(cb, ...args);
}
}
})();
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment