v8/test/mjsunit/wasm/worker-memory.js
Adam Klein fafd7c5d22 [cleanup] Remove flag for Wasm threads & atomics
It's been enabled everywhere since Chrome 88, and the related
Chromium flag was removed in https://crrev.com/c/2886421.

Bug: v8:6532
Change-Id: I987a5761f9453d4e7d77d16199e8f0b3a659c70a
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3956131
Commit-Queue: Adam Klein <adamk@chromium.org>
Reviewed-by: Clemens Backes <clemensb@chromium.org>
Reviewed-by: Deepti Gandluri <gdeepti@chromium.org>
Auto-Submit: Adam Klein <adamk@chromium.org>
Cr-Commit-Position: refs/heads/main@{#83809}
2022-10-19 23:05:37 +00:00

110 lines
3.6 KiB
JavaScript

// Copyright 2017 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
(function TestPostMessageUnsharedMemory() {
let worker = new Worker('', {type: 'string'});
let memory = new WebAssembly.Memory({initial: 1, maximum: 2});
assertThrows(() => worker.postMessage(memory), Error);
})();
(function TestPostMessageUnsharedMemoryBuffer() {
let worker = new Worker('', {type: 'string'});
let memory = new WebAssembly.Memory({initial: 1, maximum: 2});
worker.postMessage(memory.buffer);
assertThrows(() => {
worker.postMessage(memory.buffer, [memory.buffer])
}, Error)
assertThrows(() => {
worker.postMessage(undefined, [memory.buffer])
}, Error)
})();
// Can't use assert in a worker.
function workerHelpersHelper() {
assertTrue = function(value, msg) {
if (!value) {
postMessage("Error: " + msg);
throw new Error("Exit"); // To stop testing.
}
}
assertIsWasmMemory = function(memory, expectedSize) {
assertTrue(memory instanceof WebAssembly.Memory,
"object is not a WebAssembly.Memory");
assertTrue(memory.buffer instanceof SharedArrayBuffer,
"object.buffer is not a SharedArrayBuffer");
assertTrue(memory.buffer.byteLength == expectedSize,
"object.buffer.byteLength is not " + expectedSize + " bytes");
}
}
let workerHelpers = "(" + workerHelpersHelper.toString() + ")()";
(function TestPostMessageSharedMemory() {
function workerCode(workerHelpers) {
eval(workerHelpers);
onmessage = function(memory) {
assertIsWasmMemory(memory, 65536);
postMessage("OK");
};
}
let worker = new Worker(workerCode,
{type: 'function', arguments: [workerHelpers]});
let memory = new WebAssembly.Memory({initial: 1, maximum: 2, shared: true});
worker.postMessage(memory);
assertEquals("OK", worker.getMessage());
worker.terminate();
})();
(function TestPostMessageComplexObjectWithSharedMemory() {
function workerCode(workerHelpers) {
eval(workerHelpers);
onmessage = function(obj) {
assertIsWasmMemory(obj.memories[0], 65536);
assertIsWasmMemory(obj.memories[1], 65536);
assertTrue(obj.buffer instanceof SharedArrayBuffer,
"buffer is not a SharedArrayBuffer");
assertTrue(obj.memories[0] === obj.memories[1], "memories aren't equal");
assertTrue(obj.memories[0].buffer === obj.buffer,
"buffers aren't equal");
assertTrue(obj.foo === 1, "foo is not 1");
postMessage("OK");
};
}
let worker = new Worker(workerCode,
{type: 'function', arguments: [workerHelpers]});
let memory = new WebAssembly.Memory({initial: 1, maximum: 2, shared: true});
let obj = {memories: [memory, memory], buffer: memory.buffer, foo: 1};
worker.postMessage(obj);
assertEquals("OK", worker.getMessage());
worker.terminate();
})();
(function TestTwoWorkers() {
function workerCode(workerHelpers) {
eval(workerHelpers);
onmessage = function(memory) {
assertIsWasmMemory(memory, 65536);
postMessage("OK");
};
}
let workers = [new Worker(workerCode,
{type: 'function', arguments: [workerHelpers]}),
new Worker(workerCode,
{type: 'function', arguments: [workerHelpers]})];
let memory = new WebAssembly.Memory({initial: 1, maximum: 2, shared: true});
for (let worker of workers) {
worker.postMessage(memory);
assertEquals("OK", worker.getMessage());
worker.terminate();
}
})();