aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2019-01-02 16:33:58 +0100
committerAnna Henningsen <anna@addaleax.net>2019-01-06 00:54:13 +0100
commit0a549aaeaca8e3be7d19691d40f6a1c0798c82bf (patch)
treef2c981a1118e0690e4cf768829d05bd1b890e936 /test
parent47a9eea8c8843414aa09dbdea9ca5fb74279f5ab (diff)
downloadandroid-node-v8-0a549aaeaca8e3be7d19691d40f6a1c0798c82bf.tar.gz
android-node-v8-0a549aaeaca8e3be7d19691d40f6a1c0798c82bf.tar.bz2
android-node-v8-0a549aaeaca8e3be7d19691d40f6a1c0798c82bf.zip
worker: enable transferring WASM modules
Enable in-memory transfer of WASM modules without recompilation. Previously, the serialization step worked, but deserialization failed because we did not explicitly enable decoding inline WASM modules, and so the message was not successfully received. PR-URL: https://github.com/nodejs/node/pull/25314 Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Diffstat (limited to 'test')
-rw-r--r--test/parallel/test-worker-message-port-wasm-module.js19
-rw-r--r--test/parallel/test-worker-message-port-wasm-threads.js12
2 files changed, 29 insertions, 2 deletions
diff --git a/test/parallel/test-worker-message-port-wasm-module.js b/test/parallel/test-worker-message-port-wasm-module.js
new file mode 100644
index 0000000000..43c12a8519
--- /dev/null
+++ b/test/parallel/test-worker-message-port-wasm-module.js
@@ -0,0 +1,19 @@
+// Flags: --experimental-worker
+'use strict';
+const common = require('../common');
+const assert = require('assert');
+const fixtures = require('../common/fixtures');
+
+const { Worker } = require('worker_threads');
+const wasmModule = new WebAssembly.Module(fixtures.readSync('test.wasm'));
+
+const worker = new Worker(`
+const { parentPort } = require('worker_threads');
+parentPort.once('message', ({ wasmModule }) => {
+ const instance = new WebAssembly.Instance(wasmModule);
+ parentPort.postMessage(instance.exports.addTwo(10, 20));
+});
+`, { eval: true });
+
+worker.once('message', common.mustCall((num) => assert.strictEqual(num, 30)));
+worker.postMessage({ wasmModule });
diff --git a/test/parallel/test-worker-message-port-wasm-threads.js b/test/parallel/test-worker-message-port-wasm-threads.js
index 6d4f21d728..891da80e30 100644
--- a/test/parallel/test-worker-message-port-wasm-threads.js
+++ b/test/parallel/test-worker-message-port-wasm-threads.js
@@ -32,15 +32,23 @@ assert(buffer instanceof SharedArrayBuffer);
// stopped when we exit.
const worker = new Worker(`
const { parentPort } = require('worker_threads');
+
+ // Compile the same WASM module from its source bytes.
const wasmSource = new Uint8Array([${wasmSource.join(',')}]);
const wasmModule = new WebAssembly.Module(wasmSource);
const instance = new WebAssembly.Instance(wasmModule);
parentPort.postMessage(instance.exports.memory);
+
+ // Do the same thing, except we receive the WASM module via transfer.
+ parentPort.once('message', ({ wasmModule }) => {
+ const instance = new WebAssembly.Instance(wasmModule);
+ parentPort.postMessage(instance.exports.memory);
+ });
`, { eval: true });
- worker.once('message', common.mustCall(({ buffer }) => {
+ worker.on('message', common.mustCall(({ buffer }) => {
assert(buffer instanceof SharedArrayBuffer);
worker.buf = buffer; // Basically just keep the reference to buffer alive.
- }));
+ }, 2));
worker.once('exit', common.mustCall());
worker.postMessage({ wasmModule });
}