| <!DOCTYPE html> |
| <html> |
| <head> |
| <script> |
| function log(message) |
| { |
| document.getElementById('console').appendChild(document.createTextNode(message + "\n")); |
| } |
| |
| function runTest() |
| { |
| log("Test calling asm functions across workers with the same heap."); |
| var string = [ |
| "worker = this;", |
| "onmessage = function(e) {", |
| " function Module(stdlib, foreign, heap) {", |
| " 'use asm';", |
| " var MEM32 = new stdlib.Int32Array(heap);", |
| " function load() { var res = MEM32[255]; MEM32[255] = 123457; return res; }", |
| " return { load: load };", |
| " }", |
| " var buffer = e.data;", |
| " var result = Module(worker, {}, buffer).load();", |
| " var message = result == 123456 ? 'SUCCESS' : 'FAILURE ' + result;", |
| " postMessage(message);", |
| "};" |
| ].join('\n'); |
| var blobURL = URL.createObjectURL(new Blob([string])); |
| var worker = new Worker(blobURL); |
| function Module(stdlib, foreign, heap) { |
| 'use asm'; |
| var MEM32 = new stdlib.Int32Array(heap); |
| function store() { MEM32[255] = 123456; } |
| return { store: store }; |
| } |
| var buffer = new ArrayBuffer(4 * 256); |
| Module(this, {}, buffer).store(); |
| worker.onmessage = function(event) { |
| try { |
| // This buffer may or may not have been neutered, ensure we don't write across threads. |
| for (var i = 0; i < 4 * 256; i++) { |
| buffer[i] = 0; |
| } |
| } catch(e) {} |
| log(event.data); |
| log("DONE"); |
| if (testRunner.notifyDone) |
| testRunner.notifyDone(); |
| }; |
| worker.postMessage(buffer); |
| } |
| |
| if (window.testRunner) { |
| testRunner.setAllowUniversalAccessFromFileURLs(false); |
| testRunner.setAllowFileAccessFromFileURLs(true); |
| testRunner.dumpAsText(); |
| testRunner.waitUntilDone(); |
| } |
| </script> |
| </head> |
| <body onload="runTest()"> |
| <pre id='console'></pre> |
| </body> |
| </html> |