blob: 29bfbcf847386c16d4eafa2646cc363f2ec910f2 [file]
var wwParams;
/**
* Called once the intiial message has been recieved from the creating thread.
* The `props` object is property bag sent via postMessage to create the worker.
*
* This function is called both in normal wasm workers and in audio worklets.
*/
function startWasmWorker(props) {
#if RUNTIME_DEBUG
dbg('startWasmWorker', props);
#endif
wwParams = props;
wasmMemory = props.wasmMemory;
updateMemoryViews();
#if MINIMAL_RUNTIME
Module ||= {};
Module['wasm'] = props.wasm;
loadModule()
#else
wasmModuleReceived(props.wasm);
#endif
// Drop now unneeded references to from the Module object in this Worker,
// these are not needed anymore.
props.wasm = props.memMemory = 0;
}
#if AUDIO_WORKLET
if (ENVIRONMENT_IS_WASM_WORKER && !ENVIRONMENT_IS_AUDIO_WORKLET) {
#else
if (ENVIRONMENT_IS_WASM_WORKER) {
#endif
#if RUNTIME_DEBUG
dbg('wasm worker starting ...');
#endif
#if ENVIRONMENT_MAY_BE_NODE
// Node.js support
if (ENVIRONMENT_IS_NODE) {
// Weak map of handle functions to their wrapper. Used to implement
// addEventListener/removeEventListener.
var wrappedHandlers = new WeakMap();
/** @suppress {checkTypes} */
globalThis.onmessage = null;
function wrapMsgHandler(h) {
var f = wrappedHandlers.get(h)
if (!f) {
f = (msg) => h({data: msg});
wrappedHandlers.set(h, f);
}
return f;
}
Object.assign(globalThis, {
addEventListener: (name, handler) => parentPort['on'](name, wrapMsgHandler(handler)),
removeEventListener: (name, handler) => parentPort['off'](name, wrapMsgHandler(handler)),
});
}
#endif // ENVIRONMENT_MAY_BE_NODE
onmessage = (d) => {
// The first message sent to the Worker is always the bootstrap message.
// Drop this message listener, it served its purpose of bootstrapping
// the Wasm Module load, and is no longer needed. Let user code register
// any desired message handlers from now on.
/** @suppress {checkTypes} */
onmessage = null;
#if RUNTIME_DEBUG
dbg('wasm worker initial onmessage');
#endif
startWasmWorker(d.data);
}
}