MCPcopy Create free account
hub / github.com/nodejs/node / TestWasmAtomicsInWorkers

Function TestWasmAtomicsInWorkers

deps/v8/test/mjsunit/wasm/atomics-memory64.js:140–278  ·  view source on GitHub ↗
(OFFSET, INDEX, PAGES)

Source from the content-addressed store, hash-verified

138//// WORKER ONLY TESTS
139
140function TestWasmAtomicsInWorkers(OFFSET, INDEX, PAGES) {
141 // This test creates 4 workers that wait on consecutive (8 byte separated to
142 // satisfy alignments for all kinds of wait) memory locations to test various
143 // wait/wake combinations. For each combination, each thread waits 3 times
144 // expecting all 4 threads to be woken with wake(4) in first iteration, all 4
145 // to be woken with wake(5) in second iteration and, 3 and 1 to be woken in
146 // third iteration.
147 print(arguments.callee.name);
148
149 const INDEX_JS = OFFSET + INDEX;
150 let memory = CreateBigSharedWasmMemory64(PAGES);
151 let i32a = new Int32Array(memory.buffer);
152 const numWorkers = 4;
153
154 let workerScript = `onmessage = function({data:msg}) {
155 d8.file.execute("test/mjsunit/wasm/wasm-module-builder.js");
156 ${WasmI32AtomicWait.toString()}
157 ${WasmI64AtomicWait.toString()}
158 let id = msg.id;
159 let memory = msg.memory;
160 let INDEX = msg.INDEX;
161 let OFFSET = msg.OFFSET;
162 let INDEX_JS = OFFSET + INDEX;
163 let i32a = new Int32Array(memory.buffer);
164 // Indices are divided by 4 for Atomics.wait to convert them to index
165 // for Int32Array.
166 // For wasm-wake numWorkers threads.
167 let result = Atomics.wait(i32a, INDEX_JS / 4, 0);
168 postMessage(result);
169 // For wasm-wake numWorkers + 1 threads.
170 result = Atomics.wait(i32a, (INDEX_JS + 8) / 4, 0);
171 postMessage(result);
172 // For wasm-wake numWorkers - 1 threads.
173 result = Atomics.wait(i32a, (INDEX_JS + 16) / 4, 0);
174 postMessage(result);
175 // For js-wake numWorkers threads.
176 result = WasmI32AtomicWait(memory, OFFSET, INDEX + 24, 0, -1);
177 postMessage(result);
178 // For js-wake numWorkers + 1 threads.
179 result = WasmI32AtomicWait(memory, OFFSET, INDEX + 32, 0, -1);
180 postMessage(result);
181 // For js-wake numWorkers - 1 threads.
182 result = WasmI32AtomicWait(memory, OFFSET, INDEX + 40, 0, -1);
183 postMessage(result);
184 // For wasm-wake numWorkers threads.
185 result = WasmI32AtomicWait(memory, OFFSET, INDEX + 48, 0, -1);
186 postMessage(result);
187 // For wasm-wake numWorkers + 1 threads.
188 result = WasmI32AtomicWait(memory, OFFSET, INDEX + 56, 0, -1);
189 postMessage(result);
190 // For wasm-wake numWorkers - 1 threads.
191 result = WasmI32AtomicWait(memory, OFFSET, INDEX + 64, 0, -1);
192 postMessage(result);
193 // For js-wake numWorkers threads.
194 result = WasmI64AtomicWait(memory, OFFSET, INDEX + 72, 0, 0, -1);
195 postMessage(result);
196 // For js-wake numWorkers + 1 threads.
197 result = WasmI64AtomicWait(memory, OFFSET, INDEX + 80, 0, 0, -1);

Callers 1

Calls 7

wasmWakeCheckFunction · 0.70
jsWakeCheckFunction · 0.70
printFunction · 0.50
toStringMethod · 0.45
postMessageMethod · 0.45
terminateMethod · 0.45

Tested by

no test coverage detected