Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(359)

Unified Diff: test/mjsunit/wasm/instance-gc.js

Issue 2345593003: [wasm] Master CL for Binary 0xC changes. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix test failures and TSAN races. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « test/mjsunit/wasm/indirect-calls.js ('k') | test/mjsunit/wasm/instantiate-module-basic.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/mjsunit/wasm/instance-gc.js
diff --git a/test/mjsunit/wasm/instance-gc.js b/test/mjsunit/wasm/instance-gc.js
new file mode 100644
index 0000000000000000000000000000000000000000..1713f27b99af2eec16480445d0cc89a09fb264d2
--- /dev/null
+++ b/test/mjsunit/wasm/instance-gc.js
@@ -0,0 +1,122 @@
+// Copyright 2016 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --expose-wasm --expose-gc
+
+load("test/mjsunit/wasm/wasm-constants.js");
+load("test/mjsunit/wasm/wasm-module-builder.js");
+
+let nogc = () => {};
+
+function newModule() {
+ let builder = new WasmModuleBuilder();
+ builder.addMemory(1, 1, true);
+ builder.addFunction("main", kSig_i)
+ .addBody([kExprI32Const, 0, kExprI32LoadMem, 0, 0])
+ .exportFunc();
+
+ return new WebAssembly.Module(builder.toBuffer());
+}
+
+function newInstance(module, val) {
+ var instance = new WebAssembly.Instance(module);
+ var view = new Int32Array(instance.exports.memory.buffer);
+ view[0] = val;
+ return instance;
+}
+
+function TestSingleLiveInstance(gc) {
+ let module = newModule();
+
+ print("TestSingleLiveInstance...");
+ for (var i = 0; i < 5; i++) {
+ (() => { // don't leak references between iterations.
+ print(" [" + i + "]...");
+ gc();
+ var instance = newInstance(module, i + 99);
+ assertEquals(i + 99, instance.exports.main());
+ })();
+ }
+}
+
+TestSingleLiveInstance(nogc);
+TestSingleLiveInstance(gc);
+
+function TestMultiInstance(gc) {
+ let module = newModule();
+
+ print("TestMultiInstance...");
+ // Note: compute the root instances in another function to be
+ // sure that {roots} really is the only set of roots to the instances.
+ let roots = (() => { return [
+ newInstance(module, 33),
+ newInstance(module, 4444),
+ newInstance(module, 555555)
+ ];})();
+
+ (() => { // don't leak references!
+ print(" [0]...");
+ gc();
+ assertEquals(33, roots[0].exports.main());
+ roots[0] = null;
+ })();
+
+ (() => { // don't leak references!
+ print(" [1]...");
+ gc();
+ assertEquals(4444, roots[1].exports.main());
+ roots[1] = null;
+ })();
+
+ (() => { // don't leak references!
+ print(" [2]...");
+ gc();
+ assertEquals(555555, roots[2].exports.main());
+ roots[2] = null;
+ })();
+}
+
+TestMultiInstance(nogc);
+TestMultiInstance(gc);
+
+function TestReclaimingCompiledModule() {
+ let module = newModule();
+
+ print("TestReclaimingCompiledModule...");
+ let roots = (() => { return [
+ newInstance(module, 7777),
+ newInstance(module, 8888),
+ ];})();
+
+ (() => { // don't leak references!
+ print(" [0]...");
+ assertEquals(7777, roots[0].exports.main());
+ assertEquals(8888, roots[1].exports.main());
+ roots[1] = null;
+ })();
+
+ (() => { // don't leak references!
+ print(" [1]...");
+ gc();
+ roots[1] = newInstance(module, 9999);
+ assertEquals(7777, roots[0].exports.main());
+ assertEquals(9999, roots[1].exports.main());
+ roots[0] = null;
+ roots[1] = null;
+ })();
+
+ (() => { // don't leak references!
+ print(" [2]...");
+ gc();
+ roots[0] = newInstance(module, 11111);
+ roots[1] = newInstance(module, 22222);
+ assertEquals(11111, roots[0].exports.main());
+ assertEquals(22222, roots[1].exports.main());
+ roots[0] = null;
+ roots[1] = null;
+ })();
+}
+
+TestReclaimingCompiledModule(nogc);
+TestReclaimingCompiledModule(gc);
« no previous file with comments | « test/mjsunit/wasm/indirect-calls.js ('k') | test/mjsunit/wasm/instantiate-module-basic.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698