Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
emscripten-core
GitHub Repository: emscripten-core/emscripten
Path: blob/main/src/build_as_worker.js
6162 views
1
var workerResponded = false, workerCallbackId = -1;
2
3
(() => {
4
var messageBuffer = null, buffer = 0;
5
6
function flushMessages() {
7
if (!messageBuffer) return;
8
if (runtimeInitialized) {
9
var temp = messageBuffer;
10
messageBuffer = null;
11
temp.forEach((message) => onmessage(message));
12
}
13
}
14
15
function messageResender() {
16
flushMessages();
17
if (messageBuffer) {
18
setTimeout(messageResender, 100); // still more to do
19
}
20
}
21
22
onmessage = (msg) => {
23
// if main has not yet been called (mem init file, other async things), buffer messages
24
if (!runtimeInitialized) {
25
if (!messageBuffer) {
26
messageBuffer = [];
27
setTimeout(messageResender, 100);
28
}
29
messageBuffer.push(msg);
30
return;
31
}
32
flushMessages();
33
34
var func = Module['_' + msg.data['funcName']];
35
if (!func) abort('invalid worker function to call: ' + msg.data['funcName']);
36
var data = msg.data['data'];
37
if (data) {
38
if (!data.byteLength) data = new Uint8Array(data);
39
buffer = _realloc(buffer, data.length);
40
HEAPU8.set(data, buffer);
41
}
42
43
workerResponded = false;
44
workerCallbackId = msg.data['callbackId'];
45
if (data) {
46
func(buffer, data.length);
47
} else {
48
func(0, 0);
49
}
50
}
51
})();
52
53