Reland "[d8][wasm] Test wasm compilation completion"

This is a reland of ed2605f040

Original change's description:
> [d8][wasm] Test wasm compilation completion
> 
> d8 was recently changed to keep running until wasm compilation has
> completed. This adds a message test to test that.
> 
> R=ahaas@chromium.org
> 
> Change-Id: I73af53b6df4ee5f9a6afd26cf2d71a269140465f
> Reviewed-on: https://chromium-review.googlesource.com/966184
> Reviewed-by: Andreas Haas <ahaas@chromium.org>
> Commit-Queue: Clemens Hammacher <clemensh@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#52008}

Change-Id: Iadbd5056dfa58da454956c4e89369af8b0455b35
Reviewed-on: https://chromium-review.googlesource.com/975242
Reviewed-by: Andreas Haas <ahaas@chromium.org>
Commit-Queue: Clemens Hammacher <clemensh@chromium.org>
Cr-Commit-Position: refs/heads/master@{#52154}
This commit is contained in:
Clemens Hammacher 2018-03-22 11:40:10 +01:00 committed by Commit Bot
parent 543c007ea6
commit 4d1c2907d3
3 changed files with 28 additions and 0 deletions

View File

@ -0,0 +1,22 @@
// Copyright 2018 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: --no-stress-opt
load('test/mjsunit/wasm/wasm-constants.js');
load('test/mjsunit/wasm/wasm-module-builder.js');
// Test that d8 does not terminate until wasm compilation has finished and the
// promise was resolved.
var builder = new WasmModuleBuilder();
// Add a few functions so it takes some time to compile.
for (var i = 0; i < 2000; ++i) {
builder.addFunction('fun' + i, kSig_i_v)
.addBody([...wasmI32Const(i)])
.exportFunc();
}
builder.asyncInstantiate()
.then(instance => instance.exports.fun1155())
.then(res => print('Result of executing fun1155: ' + res));

View File

@ -0,0 +1 @@
Result of executing fun1155: 1155

View File

@ -683,6 +683,11 @@ class WasmModuleBuilder {
return instance; return instance;
} }
asyncInstantiate(ffi) {
return WebAssembly.instantiate(this.toBuffer(), ffi)
.then(({module, instance}) => instance);
}
toModule(debug = false) { toModule(debug = false) {
return new WebAssembly.Module(this.toBuffer(debug)); return new WebAssembly.Module(this.toBuffer(debug));
} }