Chromium Code Reviews| Index: test/mjsunit/d8-worker-sharedarraybuffer.js |
| diff --git a/test/mjsunit/d8-worker-spawn-worker.js b/test/mjsunit/d8-worker-sharedarraybuffer.js |
| similarity index 66% |
| copy from test/mjsunit/d8-worker-spawn-worker.js |
| copy to test/mjsunit/d8-worker-sharedarraybuffer.js |
| index b9d7f9ade4fd116837c275a73867eeda26076e5a..99d730690c6b0af09020265fed25c0649638e1fc 100644 |
| --- a/test/mjsunit/d8-worker-spawn-worker.js |
| +++ b/test/mjsunit/d8-worker-sharedarraybuffer.js |
| @@ -25,22 +25,40 @@ |
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| +// Flags: --harmony-sharedarraybuffer --harmony-atomics |
| + |
| if (this.Worker) { |
| function f() { |
|
Jarin
2015/06/30 17:42:43
I do not think this is doing what you think it's d
binji
2015/06/30 18:11:04
Oh, I wasn't trying to prevent the definition of f
|
| - var g = function () { |
| - postMessage(42); |
| - }; |
| + onmessage = function(m) { |
| + var sab = m; |
| + var ta = new Uint32Array(sab); |
| + if (sab.byteLength !== 16) |
| + throw new Error("SharedArrayBuffer transfer byteLength"); |
|
Jarin
2015/06/30 17:42:43
Nit: Could we get the braces here and below? (In g
binji
2015/06/30 18:11:04
Done.
|
| + for (var i = 0; i < 4; ++i) |
| + if (ta[i] !== i) |
| + throw new Error("SharedArrayBuffer transfer value " + i); |
| - var w = new Worker(g); |
| - |
| - onmessage = function(parentMsg) { |
| - w.postMessage(parentMsg); |
| - var childMsg = w.getMessage(); |
| - postMessage(childMsg); |
| + // Atomically update ta[0] |
| + Atomics.store(ta, 0, 100); |
| }; |
| } |
| var w = new Worker(f); |
| - w.postMessage(9); |
| - assertEquals(42, w.getMessage()); |
| + |
| + var sab = new SharedArrayBuffer(16); |
| + var ta = new Uint32Array(sab); |
| + for (var i = 0; i < 4; ++i) |
| + ta[i] = i; |
| + |
| + // Transfer SharedArrayBuffer |
| + w.postMessage(sab, [sab]); |
| + assertEquals(16, sab.byteLength); // ArrayBuffer should not neutered. |
|
Jarin
2015/06/30 17:42:43
In the comment: ... should not *be* neutered.
binji
2015/06/30 18:11:04
Done.
|
| + |
| + // Spinwait for the worker to update ta[0] |
| + var ta0; |
| + while ((ta0 = Atomics.load(ta, 0)) == 0); |
|
Jarin
2015/06/30 17:42:43
"while (<condition>);" is not recommended by the C
|
| + |
| + assertEquals(100, ta0); |
| + |
| + w.terminate(); |
|
Jarin
2015/06/30 17:42:43
Could we also check that the array has not been ne
binji
2015/06/30 18:11:04
Done.
|
| } |