(OFFSET, INDEX, PAGES)
| 138 | //// WORKER ONLY TESTS |
| 139 | |
| 140 | function 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); |
no test coverage detected