Skip to content

Commit 09be374

Browse files
committed
Allow the createWasm function to use async/await where possible
The advantage if using `await` in the cases where we can is that it avoids the generation or wrapper function for each export. So instead of ``` var wasmExport = createWasm(); // returns empty object ... var malloc = ((..) => (malloc = wasmExports['malloc'])() ``` We can just generate: ``` var wasmExport = createWasm(); // returns empty object ... var malloc = wasmExports['malloc']; ``` This only currently works in MODULARIZE mode where the code is running inside a factory function. Otherwise it would end up using top-level-await. One wrinkle here is that this is not currently supported when closure is enabled because we run closure only on the contents of the factory function so closure ends up seeing this as a top level await when its not.
1 parent a8d325c commit 09be374

File tree

85 files changed

+115
-121
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

85 files changed

+115
-121
lines changed

src/preamble.js

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1028,11 +1028,11 @@ function getWasmImports() {
10281028
trueModule = null;
10291029
#endif
10301030
#if SHARED_MEMORY || RELOCATABLE
1031-
receiveInstance(result['instance'], result['module']);
1031+
return receiveInstance(result['instance'], result['module']);
10321032
#else
10331033
// TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line.
10341034
// When the regression is fixed, can restore the above PTHREADS-enabled path.
1035-
receiveInstance(result['instance']);
1035+
return receiveInstance(result['instance']);
10361036
#endif
10371037
}
10381038
#endif // WASM_ASYNC_COMPILATION
@@ -1068,8 +1068,7 @@ function getWasmImports() {
10681068
// Instantiate from the module posted from the main thread.
10691069
// We can just use sync instantiation in the worker.
10701070
var instance = new WebAssembly.Instance(module, getWasmImports());
1071-
receiveInstance(instance, module);
1072-
resolve();
1071+
resolve(receiveInstance(instance, module));
10731072
};
10741073
});
10751074
}
@@ -1085,11 +1084,11 @@ function getWasmImports() {
10851084
try {
10861085
#endif
10871086
var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info);
1088-
receiveInstantiationResult(result);
1087+
var exports = receiveInstantiationResult(result);
10891088
#if LOAD_SOURCE_MAP
10901089
receiveSourceMapJSON(await getSourceMapPromise());
10911090
#endif
1092-
return result;
1091+
return exports;
10931092
#if MODULARIZE
10941093
} catch (e) {
10951094
// If instantiation fails, reject the module ready promise.

test/code_size/hello_webgl2_wasm.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
22
"a.html": 454,
33
"a.html.gz": 328,
4-
"a.js": 4532,
5-
"a.js.gz": 2315,
4+
"a.js": 4538,
5+
"a.js.gz": 2320,
66
"a.wasm": 10402,
77
"a.wasm.gz": 6703,
8-
"total": 15388,
9-
"total_gz": 9346
8+
"total": 15394,
9+
"total_gz": 9351
1010
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"a.html": 346,
33
"a.html.gz": 262,
4-
"a.js": 22200,
5-
"a.js.gz": 11583,
6-
"total": 22546,
7-
"total_gz": 11845
4+
"a.js": 22206,
5+
"a.js.gz": 11589,
6+
"total": 22552,
7+
"total_gz": 11851
88
}

test/code_size/hello_webgl_wasm.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
22
"a.html": 454,
33
"a.html.gz": 328,
4-
"a.js": 4070,
5-
"a.js.gz": 2158,
4+
"a.js": 4076,
5+
"a.js.gz": 2163,
66
"a.wasm": 10402,
77
"a.wasm.gz": 6703,
8-
"total": 14926,
9-
"total_gz": 9189
8+
"total": 14932,
9+
"total_gz": 9194
1010
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"a.html": 346,
33
"a.html.gz": 262,
4-
"a.js": 21726,
5-
"a.js.gz": 11413,
6-
"total": 22072,
7-
"total_gz": 11675
4+
"a.js": 21732,
5+
"a.js.gz": 11419,
6+
"total": 22078,
7+
"total_gz": 11681
88
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
8545
1+
8542
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20951
1+
20947
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
8530
1+
8528
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20919
1+
20915
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
9579
1+
9578
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
24796
1+
24792
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
8508
1+
8506
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20845
1+
20841
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
8508
1+
8506
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20845
1+
20841
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
8446
1+
8445
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20530
1+
20526
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
9580
1+
9579
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
24796
1+
24792
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
8545
1+
8542
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20951
1+
20947
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3807
1+
3805
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
8588
1+
8584
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
7686
1+
7684
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
18858
1+
18854
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2906
1+
2903
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
6229
1+
6225
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
8021
1+
8019
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
21551
1+
21542
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2761
1+
2758
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
7028
1+
7016
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2408
1+
2407
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4937
1+
4933
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2320
1+
2318
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4784
1+
4780
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2320
1+
2318
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4784
1+
4780
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2301
1+
2300
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4751
1+
4747
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
6198
1+
6204
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
13710
1+
13727
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1694
1+
1691
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3644
1+
3640
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2320
1+
2318
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4784
1+
4780
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1896
1+
1893
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4022
1+
4018
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1934
1+
1932
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4069
1+
4065
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4925
1+
4921
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2503
1+
2502
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
5210
1+
5206
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2199
1+
2197
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4618
1+
4614
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2164
1+
2161
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4548
1+
4544
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1921
1+
1917
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4069
1+
4065
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1934
1+
1932
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4069
1+
4065
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1934
1+
1932
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4069
1+
4065
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1469
1+
1470
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3124
1+
3118
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1546
1+
1548
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3693
1+
3682
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1398
1+
1399
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2829
1+
2823
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1363
1+
1365
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2779
1+
2773
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1363
1+
1365
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2779
1+
2773
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1354
1+
1356
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2764
1+
2758
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1363
1+
1365
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2779
1+
2773
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4163
1+
4170
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
8638
1+
8654
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1363
1+
1365
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2779
1+
2773
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
54298
1+
54320
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
29718
1+
29740
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
53094
1+
53116

tools/emscripten.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -885,6 +885,13 @@ def create_sending(metadata, library_symbols):
885885
return '{\n ' + ',\n '.join(elems) + '\n}'
886886

887887

888+
def can_use_await():
889+
# In modularize mode we can use `await` since the factor function itself
890+
# is marked as `async` and the generated code all lives inside that factory
891+
# function.
892+
return settings.MODULARIZE and not settings.USE_CLOSURE_COMPILER
893+
894+
888895
def make_export_wrappers(function_exports):
889896
assert not settings.MINIMAL_RUNTIME
890897

@@ -924,7 +931,7 @@ def install_wrapper(sym):
924931
# With assertions enabled we create a wrapper that are calls get routed through, for
925932
# the lifetime of the program.
926933
wrapper += f"createExportWrapper('{name}', {nargs});"
927-
elif settings.WASM_ASYNC_COMPILATION or settings.PTHREADS:
934+
elif (settings.WASM_ASYNC_COMPILATION and not can_use_await()) or settings.PTHREADS:
928935
# With WASM_ASYNC_COMPILATION wrapper will replace the global var and Module var on
929936
# first use.
930937
args = [f'a{i}' for i in range(nargs)]
@@ -990,7 +997,11 @@ def create_module(receiving, metadata, global_exports, library_symbols):
990997

991998
if not settings.MINIMAL_RUNTIME:
992999
if settings.WASM_ASYNC_COMPILATION:
993-
module.append("var wasmExports;\ncreateWasm();\n")
1000+
if can_use_await():
1001+
# In modullize mode the generated code is within a factory function.
1002+
module.append("var wasmExports = await createWasm();\n")
1003+
else:
1004+
module.append("var wasmExports;\ncreateWasm();\n")
9941005
else:
9951006
module.append("var wasmExports = createWasm();\n")
9961007

0 commit comments

Comments
 (0)