Skip to content

Commit 7f8c706

Browse files
committed
worker message structure
1 parent c3ee136 commit 7f8c706

File tree

2 files changed

+54
-24
lines changed

2 files changed

+54
-24
lines changed

packages/emnapi/src/core/async.ts

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,15 @@ function spawnThread (startArg: number, threadId?: Int32Array): number {
7272
const threadIdBuffer = new SharedArrayBuffer(4)
7373
const id = new Int32Array(threadIdBuffer)
7474
Atomics.store(id, 0, -1)
75-
postMessage({ cmd: 'thread-spawn', startArg, threadId: id })
75+
postMessage({
76+
__emnapi__: {
77+
type: 'thread-spawn',
78+
payload: {
79+
startArg,
80+
threadId: id
81+
}
82+
}
83+
})
7684
Atomics.wait(id, 0, -1)
7785
const tid = Atomics.load(id, 0)
7886
return tid
@@ -84,16 +92,19 @@ function spawnThread (startArg: number, threadId?: Int32Array): number {
8492
const worker = onCreateWorker()
8593

8694
worker.onmessage = function (e: any) {
87-
if (e.data.cmd === 'loaded') {
88-
if (typeof worker.unref === 'function') {
89-
worker.unref()
90-
}
91-
if (!e.data.success) {
92-
err(e.data.message)
93-
err(e.data.stack)
95+
if (e.data.__emnapi__) {
96+
const type = e.data.__emnapi__.type
97+
const payload = e.data.__emnapi__.payload
98+
if (type === 'loaded') {
99+
if (typeof worker.unref === 'function') {
100+
worker.unref()
101+
}
102+
if (payload.err) {
103+
err(payload.err)
104+
}
105+
} else if (type === 'thread-spawn') {
106+
spawnThread(payload.startArg, payload.threadId)
94107
}
95-
} else if (e.data.cmd === 'thread-spawn') {
96-
spawnThread(e.data.startArg, e.data.threadId)
97108
}
98109
}
99110
worker.onerror = (e: any) => {
@@ -121,19 +132,22 @@ function spawnThread (startArg: number, threadId?: Int32Array): number {
121132
nextTid++
122133
// napiModule.PThread.pthreads[tid] = worker
123134
// worker.pthread_ptr = tid
124-
const payload = {
125-
cmd: 'load',
126-
wasmModule,
127-
wasmMemory,
128-
tid,
129-
arg: startArg
135+
const msg = {
136+
__emnapi__: {
137+
type: 'load',
138+
payload: {
139+
wasmModule,
140+
wasmMemory,
141+
tid,
142+
arg: startArg
143+
}
144+
}
130145
}
131-
// console.log(payload)
132146
if (threadId) {
133147
Atomics.store(threadId, 0, tid)
134148
Atomics.notify(threadId, 0)
135149
}
136-
worker.postMessage(payload)
150+
worker.postMessage(msg)
137151
return tid
138152
}
139153
napiModule.spawnThread = spawnThread

packages/test/worker.js

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,16 +91,32 @@ function instantiate (wasmMemory, wasmModule, tid, arg) {
9191
})
9292

9393
wasi.initialize(instanceProxy)
94-
postMessage({ cmd: 'loaded', success: true })
94+
postMessage({
95+
__emnapi__: {
96+
type: 'loaded',
97+
payload: {
98+
err: null
99+
}
100+
}
101+
})
95102
instance.exports.wasi_thread_start(tid, arg)
96103
}
97104

98105
self.onmessage = function (e) {
99-
if (e.data.cmd === 'load') {
100-
try {
101-
instantiate(e.data.wasmMemory, e.data.wasmModule, e.data.tid, e.data.arg)
102-
} catch (err) {
103-
postMessage({ cmd: 'loaded', success: false, message: err.message, stack: err.stack })
106+
if (e.data.__emnapi__) {
107+
const type = e.data.__emnapi__.type
108+
const payload = e.data.__emnapi__.payload
109+
if (type === 'load') {
110+
try {
111+
instantiate(payload.wasmMemory, payload.wasmModule, payload.tid, payload.arg)
112+
} catch (err) {
113+
postMessage({
114+
__emnapi__: {
115+
type: 'loaded',
116+
payload: { err }
117+
}
118+
})
119+
}
104120
}
105121
}
106122
}

0 commit comments

Comments
 (0)