Reviewers: jarin,

Description:
d8 Worker test of SharedArrayBuffer transferring

BUG=chromium:497295
[email protected]
LOG=n

Please review this at https://codereview.chromium.org/1216023003/

Base URL: https://chromium.googlesource.com/v8/v8.git@master

Affected files (+29, -11 lines):
  A + test/mjsunit/d8-worker-sharedarraybuffer.js


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() {
-    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");
+      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.
+
+  // Spinwait for the worker to update ta[0]
+  var ta0;
+  while ((ta0 = Atomics.load(ta, 0)) == 0);
+
+  assertEquals(100, ta0);
+
+  w.terminate();
 }


--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to