summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCasper Beyer <caspervonb@pm.me>2021-04-26 23:54:07 +0800
committerGitHub <noreply@github.com>2021-04-26 17:54:07 +0200
commite4e7d957e8cde899d48878c83f2099b0028dfdef (patch)
tree23e0503921c4749aab4a0ba08ddaec6b7756f4ba
parent791513d608279796a6a1fd963ea1d5b012699baa (diff)
feat(core): enable wasm threading support (#10116)
-rw-r--r--cli/dts/lib.deno.shared_globals.d.ts3
-rw-r--r--cli/tests/integration_tests.rs5
-rw-r--r--cli/tests/wasm_shared.out0
-rw-r--r--cli/tests/wasm_shared.ts6
-rw-r--r--core/runtime.rs1
-rw-r--r--tools/wpt/expectation.json56
6 files changed, 20 insertions, 51 deletions
diff --git a/cli/dts/lib.deno.shared_globals.d.ts b/cli/dts/lib.deno.shared_globals.d.ts
index e3fd2bf60..a2609be85 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 50c70213a..92deb9416 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 000000000..e69de29bb
--- /dev/null
+++ b/cli/tests/wasm_shared.out
diff --git a/cli/tests/wasm_shared.ts b/cli/tests/wasm_shared.ts
new file mode 100644
index 000000000..b713385d5
--- /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 da7d6598a..5a0b59776 100644
--- a/core/runtime.rs
+++ b/core/runtime.rs
@@ -160,6 +160,7 @@ fn v8_init(v8_platform: Option<v8::UniquePtr<v8::Platform>>) {
// 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 72e96a031..5159ac0b0 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": {