From e4e7d957e8cde899d48878c83f2099b0028dfdef Mon Sep 17 00:00:00 2001 From: Casper Beyer Date: Mon, 26 Apr 2021 23:54:07 +0800 Subject: [PATCH] feat(core): enable wasm threading support (#10116) --- cli/dts/lib.deno.shared_globals.d.ts | 3 +- cli/tests/integration_tests.rs | 5 +++ cli/tests/wasm_shared.out | 0 cli/tests/wasm_shared.ts | 6 +++ core/runtime.rs | 1 + tools/wpt/expectation.json | 56 +++------------------------- 6 files changed, 20 insertions(+), 51 deletions(-) create mode 100644 cli/tests/wasm_shared.out create mode 100644 cli/tests/wasm_shared.ts diff --git a/cli/dts/lib.deno.shared_globals.d.ts b/cli/dts/lib.deno.shared_globals.d.ts index e3fd2bf60d..a2609be85c 100644 --- a/cli/dts/lib.deno.shared_globals.d.ts +++ b/cli/dts/lib.deno.shared_globals.d.ts @@ -89,7 +89,7 @@ declare namespace WebAssembly { constructor(descriptor: MemoryDescriptor); /** An accessor property that returns the buffer contained in the memory. */ - readonly buffer: ArrayBuffer; + readonly buffer: ArrayBuffer | SharedArrayBuffer; /** * Increases the size of the memory instance by a specified number of WebAssembly @@ -170,6 +170,7 @@ declare namespace WebAssembly { export interface MemoryDescriptor { initial: number; maximum?: number; + shared?: boolean; } /** A `ModuleExportDescriptor` is the description of a declared export in a `WebAssembly.Module`. */ diff --git a/cli/tests/integration_tests.rs b/cli/tests/integration_tests.rs index 50c70213ab..92deb94167 100644 --- a/cli/tests/integration_tests.rs +++ b/cli/tests/integration_tests.rs @@ -3446,6 +3446,11 @@ console.log("finish"); output: "wasm.ts.out", }); + itest!(wasm_shared { + args: "run --quiet wasm_shared.ts", + output: "wasm_shared.out", + }); + itest!(wasm_async { args: "run wasm_async.js", output: "wasm_async.out", diff --git a/cli/tests/wasm_shared.out b/cli/tests/wasm_shared.out new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cli/tests/wasm_shared.ts b/cli/tests/wasm_shared.ts new file mode 100644 index 0000000000..b713385d5a --- /dev/null +++ b/cli/tests/wasm_shared.ts @@ -0,0 +1,6 @@ +const memory = new WebAssembly.Memory({ + initial: 1, + maximum: 10, + shared: true, +}); +console.assert(memory.buffer instanceof SharedArrayBuffer); diff --git a/core/runtime.rs b/core/runtime.rs index da7d6598a7..5a0b597764 100644 --- a/core/runtime.rs +++ b/core/runtime.rs @@ -160,6 +160,7 @@ fn v8_init(v8_platform: Option>) { // remove this to make it work asynchronously too. But that requires getting // PumpMessageLoop and RunMicrotasks setup correctly. // See https://github.com/denoland/deno/issues/2544 + " --experimental-wasm-threads", " --no-wasm-async-compilation", " --harmony-top-level-await", " --harmony-import-assertions", diff --git a/tools/wpt/expectation.json b/tools/wpt/expectation.json index 72e96a0311..5159ac0b0e 100644 --- a/tools/wpt/expectation.json +++ b/tools/wpt/expectation.json @@ -39,30 +39,6 @@ "api-replacement-encodings.any.js": true, "api-surrogates-utf8.any.js": true, "encodeInto.any.js": [ - "encodeInto() into SharedArrayBuffer with Hi and destination length 0, offset 0, filler 0", - "encodeInto() into SharedArrayBuffer with Hi and destination length 0, offset 4, filler 0", - "encodeInto() into SharedArrayBuffer with Hi and destination length 0, offset 0, filler 128", - "encodeInto() into SharedArrayBuffer with Hi and destination length 0, offset 4, filler 128", - "encodeInto() into SharedArrayBuffer with Hi and destination length 0, offset 0, filler random", - "encodeInto() into SharedArrayBuffer with Hi and destination length 0, offset 4, filler random", - "encodeInto() into SharedArrayBuffer with A and destination length 10, offset 0, filler 0", - "encodeInto() into SharedArrayBuffer with A and destination length 10, offset 4, filler 0", - "encodeInto() into SharedArrayBuffer with A and destination length 10, offset 0, filler 128", - "encodeInto() into SharedArrayBuffer with A and destination length 10, offset 4, filler 128", - "encodeInto() into SharedArrayBuffer with A and destination length 10, offset 0, filler random", - "encodeInto() into SharedArrayBuffer with A and destination length 10, offset 4, filler random", - "encodeInto() into SharedArrayBuffer with 𝌆 and destination length 4, offset 0, filler 0", - "encodeInto() into SharedArrayBuffer with 𝌆 and destination length 4, offset 4, filler 0", - "encodeInto() into SharedArrayBuffer with 𝌆 and destination length 4, offset 0, filler 128", - "encodeInto() into SharedArrayBuffer with 𝌆 and destination length 4, offset 4, filler 128", - "encodeInto() into SharedArrayBuffer with 𝌆 and destination length 4, offset 0, filler random", - "encodeInto() into SharedArrayBuffer with 𝌆 and destination length 4, offset 4, filler random", - "encodeInto() into SharedArrayBuffer with 𝌆A and destination length 3, offset 0, filler 0", - "encodeInto() into SharedArrayBuffer with 𝌆A and destination length 3, offset 4, filler 0", - "encodeInto() into SharedArrayBuffer with 𝌆A and destination length 3, offset 0, filler 128", - "encodeInto() into SharedArrayBuffer with 𝌆A and destination length 3, offset 4, filler 128", - "encodeInto() into SharedArrayBuffer with 𝌆A and destination length 3, offset 0, filler random", - "encodeInto() into SharedArrayBuffer with 𝌆A and destination length 3, offset 4, filler random", "encodeInto() into ArrayBuffer with \ud834A\udf06A¥Hi and destination length 10, offset 0, filler 0", "encodeInto() into SharedArrayBuffer with \ud834A\udf06A¥Hi and destination length 10, offset 0, filler 0", "encodeInto() into ArrayBuffer with \ud834A\udf06A¥Hi and destination length 10, offset 4, filler 0", @@ -87,23 +63,7 @@ "encodeInto() into SharedArrayBuffer with A\udf06 and destination length 4, offset 0, filler random", "encodeInto() into ArrayBuffer with A\udf06 and destination length 4, offset 4, filler random", "encodeInto() into SharedArrayBuffer with A\udf06 and destination length 4, offset 4, filler random", - "encodeInto() into SharedArrayBuffer with ¥¥ and destination length 4, offset 0, filler 0", - "encodeInto() into SharedArrayBuffer with ¥¥ and destination length 4, offset 4, filler 0", - "encodeInto() into SharedArrayBuffer with ¥¥ and destination length 4, offset 0, filler 128", - "encodeInto() into SharedArrayBuffer with ¥¥ and destination length 4, offset 4, filler 128", - "encodeInto() into SharedArrayBuffer with ¥¥ and destination length 4, offset 0, filler random", - "encodeInto() into SharedArrayBuffer with ¥¥ and destination length 4, offset 4, filler random", - "encodeInto() and a detached output buffer", - "Invalid encodeInto() destination: DataView, backed by: SharedArrayBuffer", - "Invalid encodeInto() destination: Int8Array, backed by: SharedArrayBuffer", - "Invalid encodeInto() destination: Int16Array, backed by: SharedArrayBuffer", - "Invalid encodeInto() destination: Int32Array, backed by: SharedArrayBuffer", - "Invalid encodeInto() destination: Uint16Array, backed by: SharedArrayBuffer", - "Invalid encodeInto() destination: Uint32Array, backed by: SharedArrayBuffer", - "Invalid encodeInto() destination: Uint8ClampedArray, backed by: SharedArrayBuffer", - "Invalid encodeInto() destination: Float32Array, backed by: SharedArrayBuffer", - "Invalid encodeInto() destination: Float64Array, backed by: SharedArrayBuffer", - "Invalid encodeInto() destination: SharedArrayBuffer" + "encodeInto() and a detached output buffer" ], "idlharness.any.js": [ "TextDecoder interface: existence and properties of interface object", @@ -160,10 +120,7 @@ "realms.window.js": false }, "textdecoder-byte-order-marks.any.js": true, - "textdecoder-copy.any.js": [ - "Modify buffer after passing it in (ArrayBuffer)", - "Modify buffer after passing it in (SharedArrayBuffer)" - ], + "textdecoder-copy.any.js": false, "textdecoder-fatal-single-byte.any.js": true, "textdecoder-fatal-streaming.any.js": [ "Fatal flag, streaming cases" @@ -206,7 +163,8 @@ "Encoding argument supported for decode: x-user-defined" ], "textencoder-utf16-surrogates.any.js": true, - "unsupported-encodings.any.js": false + "unsupported-encodings.any.js": false, + "textdecoder-arguments.any.js": false }, "hr-time": { "monotonic-clock.any.js": true, @@ -643,12 +601,10 @@ "Setting (sloppy mode)" ], "constructor.any.js": true, - "grow.any.js": [ - "Growing shared memory does not detach old buffer" - ], + "grow.any.js": true, "toString.any.js": true, "type.tentative.any.js": false, - "constructor-shared.tentative.any.js": false, + "constructor-shared.tentative.any.js": true, "constructor-types.tentative.any.js": false }, "module": {