From 239be27f63d75dfbb69b671600e81936ce395249 Mon Sep 17 00:00:00 2001 From: Sam Clegg Date: Tue, 9 Jun 2026 11:18:47 -0700 Subject: [PATCH] Remove unnecessary dependencies. NFC Followup to #27075 --- src/lib/libbrowser.js | 2 +- src/lib/libfetch.js | 8 +- .../test_codesize_file_preload.expected.js | 38 ++++----- test/codesize/test_codesize_file_preload.json | 8 +- test/codesize/test_codesize_hello_O0.json | 8 +- test/codesize/test_codesize_hello_dylink.json | 4 +- .../test_codesize_minimal_O0.expected.js | 77 +------------------ test/codesize/test_codesize_minimal_O0.json | 4 +- .../test_codesize_minimal_pthreads.json | 8 +- ...t_codesize_minimal_pthreads_memgrowth.json | 8 +- test/codesize/test_small_js_flags.expected.js | 13 ---- test/codesize/test_unoptimized_code_size.json | 16 ++-- tools/link.py | 6 +- 13 files changed, 60 insertions(+), 140 deletions(-) diff --git a/src/lib/libbrowser.js b/src/lib/libbrowser.js index 0e2ba4064f49a..e28324bdb7819 100644 --- a/src/lib/libbrowser.js +++ b/src/lib/libbrowser.js @@ -614,7 +614,7 @@ var LibraryBrowser = { }, // TODO: currently not callable from a pthread, but immediately calls onerror() if not on main thread. - emscripten_async_load_script__deps: ['$UTF8ToString'], + emscripten_async_load_script__deps: ['$UTF8ToString', '$runDependencies', '$dependenciesFulfilled'], emscripten_async_load_script: async (url, onload, onerror) => { url = UTF8ToString(url); #if PTHREADS diff --git a/src/lib/libfetch.js b/src/lib/libfetch.js index 03dba8681e6be..4a1220879c374 100644 --- a/src/lib/libfetch.js +++ b/src/lib/libfetch.js @@ -8,7 +8,13 @@ var LibraryFetch = { $Fetch__postset: 'Fetch.init();', - $Fetch__deps: ['$HandleAllocator'], + $Fetch__deps: [ + '$HandleAllocator', +#if FETCH_SUPPORT_INDEXEDDB + '$addRunDependency', + '$removeRunDependency', +#endif + ], $Fetch: Fetch, _emscripten_fetch_get_response_headers_length__deps: ['$lengthBytesUTF8'], _emscripten_fetch_get_response_headers_length: fetchGetResponseHeadersLength, diff --git a/test/codesize/test_codesize_file_preload.expected.js b/test/codesize/test_codesize_file_preload.expected.js index 824ec2fbd7d8b..dc412229c2187 100644 --- a/test/codesize/test_codesize_file_preload.expected.js +++ b/test/codesize/test_codesize_file_preload.expected.js @@ -517,25 +517,6 @@ var onPreRuns = []; var addOnPreRun = cb => onPreRuns.push(cb); -var runDependencies = 0; - -var dependenciesFulfilled = null; - -var removeRunDependency = id => { - runDependencies--; - if (runDependencies == 0) { - if (dependenciesFulfilled) { - var callback = dependenciesFulfilled; - dependenciesFulfilled = null; - callback(); - } - } -}; - -var addRunDependency = id => { - runDependencies++; -}; - /** @param {number=} offset */ var doWritev = (stream, iov, iovcnt, offset) => { var ret = 0; for (var i = 0; i < iovcnt; i++) { @@ -1323,6 +1304,25 @@ var FS_createDataFile = (...args) => FS.createDataFile(...args); var getUniqueRunDependency = id => id; +var runDependencies = 0; + +var dependenciesFulfilled = null; + +var removeRunDependency = id => { + runDependencies--; + if (runDependencies == 0) { + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); + } + } +}; + +var addRunDependency = id => { + runDependencies++; +}; + var preloadPlugins = []; var FS_handledByPreloadPlugin = async (byteArray, fullname) => { diff --git a/test/codesize/test_codesize_file_preload.json b/test/codesize/test_codesize_file_preload.json index cfcadb657bbbe..d4e588abd444b 100644 --- a/test/codesize/test_codesize_file_preload.json +++ b/test/codesize/test_codesize_file_preload.json @@ -1,10 +1,10 @@ { - "a.out.js": 22109, - "a.out.js.gz": 9180, + "a.out.js": 22108, + "a.out.js.gz": 9183, "a.out.nodebug.wasm": 1666, "a.out.nodebug.wasm.gz": 945, - "total": 23775, - "total_gz": 10125, + "total": 23774, + "total_gz": 10128, "sent": [ "a (fd_write)" ], diff --git a/test/codesize/test_codesize_hello_O0.json b/test/codesize/test_codesize_hello_O0.json index e8d889441c671..37e5e05139892 100644 --- a/test/codesize/test_codesize_hello_O0.json +++ b/test/codesize/test_codesize_hello_O0.json @@ -1,10 +1,10 @@ { - "a.out.js": 23358, - "a.out.js.gz": 8434, + "a.out.js": 23248, + "a.out.js.gz": 8396, "a.out.nodebug.wasm": 15115, "a.out.nodebug.wasm.gz": 7464, - "total": 38473, - "total_gz": 15898, + "total": 38363, + "total_gz": 15860, "sent": [ "fd_write" ], diff --git a/test/codesize/test_codesize_hello_dylink.json b/test/codesize/test_codesize_hello_dylink.json index 9db5f2b792605..13c13029343ec 100644 --- a/test/codesize/test_codesize_hello_dylink.json +++ b/test/codesize/test_codesize_hello_dylink.json @@ -1,9 +1,9 @@ { - "a.out.js": 26398, + "a.out.js": 26397, "a.out.js.gz": 11245, "a.out.nodebug.wasm": 17861, "a.out.nodebug.wasm.gz": 9019, - "total": 44259, + "total": 44258, "total_gz": 20264, "sent": [ "__syscall_stat64", diff --git a/test/codesize/test_codesize_minimal_O0.expected.js b/test/codesize/test_codesize_minimal_O0.expected.js index aaa9a9721f041..448b167942cdf 100644 --- a/test/codesize/test_codesize_minimal_O0.expected.js +++ b/test/codesize/test_codesize_minimal_O0.expected.js @@ -736,67 +736,6 @@ async function createWasm() { /** @type {!Uint8Array} */ var HEAPU8; - var runDependencies = 0; - - - var dependenciesFulfilled = null; - - var runDependencyTracking = { - }; - - var runDependencyWatcher = null; - var removeRunDependency = (id) => { - runDependencies--; - - assert(id, 'removeRunDependency requires an ID'); - assert(runDependencyTracking[id]); - delete runDependencyTracking[id]; - if (runDependencies == 0) { - if (runDependencyWatcher !== null) { - clearInterval(runDependencyWatcher); - runDependencyWatcher = null; - } - if (dependenciesFulfilled) { - var callback = dependenciesFulfilled; - dependenciesFulfilled = null; - callback(); // can add another dependenciesFulfilled - } - } - }; - - - var addRunDependency = (id) => { - runDependencies++; - - assert(id, 'addRunDependency requires an ID') - assert(!runDependencyTracking[id]); - runDependencyTracking[id] = 1; - if (runDependencyWatcher === null && globalThis.setInterval) { - // Check for missing dependencies every few seconds - runDependencyWatcher = setInterval(() => { - if (ABORT) { - clearInterval(runDependencyWatcher); - runDependencyWatcher = null; - return; - } - var shown = false; - for (var dep in runDependencyTracking) { - if (!shown) { - shown = true; - err('still waiting on run dependencies:'); - } - err(`dependency: ${dep}`); - } - if (shown) { - err('(end of list)'); - } - }, 10000); - // Prevent this timer from keeping the runtime alive if nothing - // else is. - runDependencyWatcher.unref?.() - } - }; - var callRuntimeCallbacks = (callbacks) => { while (callbacks.length > 0) { // Pass the module as the first argument. @@ -831,7 +770,6 @@ async function createWasm() { return '0x' + ptr.toString(16).padStart(8, '0'); } - /** * @param {number} ptr @@ -953,6 +891,8 @@ Module['FS_createPreloadedFile'] = FS.createPreloadedFile; 'mmapAlloc', 'HandleAllocator', 'getUniqueRunDependency', + 'addRunDependency', + 'removeRunDependency', 'addOnPreRun', 'addOnInit', 'addOnPostCtor', @@ -1103,8 +1043,6 @@ missingLibrarySymbols.forEach(missingLibrarySymbol) 'wasmTable', 'wasmMemory', 'noExitRuntime', - 'addRunDependency', - 'removeRunDependency', 'freeTableIndexes', 'functionsInTableMap', 'setValue', @@ -1380,21 +1318,10 @@ function stackCheckInit() { function run() { - if (runDependencies > 0) { - dependenciesFulfilled = run; - return; - } - stackCheckInit(); preRun(); - // a preRun added a dependency, run will be called later - if (runDependencies > 0) { - dependenciesFulfilled = run; - return; - } - function doRun() { // run may have just been called through dependencies being fulfilled just in this very frame, // or while the async setStatus time below was happening diff --git a/test/codesize/test_codesize_minimal_O0.json b/test/codesize/test_codesize_minimal_O0.json index 296ff7eac7f01..a1cf25d9113fa 100644 --- a/test/codesize/test_codesize_minimal_O0.json +++ b/test/codesize/test_codesize_minimal_O0.json @@ -1,10 +1,10 @@ { "a.out.js": 18596, - "a.out.js.gz": 6720, + "a.out.js.gz": 6718, "a.out.nodebug.wasm": 1015, "a.out.nodebug.wasm.gz": 602, "total": 19611, - "total_gz": 7322, + "total_gz": 7320, "sent": [], "imports": [], "exports": [ diff --git a/test/codesize/test_codesize_minimal_pthreads.json b/test/codesize/test_codesize_minimal_pthreads.json index 1a2ef9528d5a2..a60cc29cf4110 100644 --- a/test/codesize/test_codesize_minimal_pthreads.json +++ b/test/codesize/test_codesize_minimal_pthreads.json @@ -1,10 +1,10 @@ { - "a.out.js": 6975, - "a.out.js.gz": 3442, + "a.out.js": 6949, + "a.out.js.gz": 3427, "a.out.nodebug.wasm": 19063, "a.out.nodebug.wasm.gz": 8803, - "total": 26038, - "total_gz": 12245, + "total": 26012, + "total_gz": 12230, "sent": [ "a (memory)", "b (exit)", diff --git a/test/codesize/test_codesize_minimal_pthreads_memgrowth.json b/test/codesize/test_codesize_minimal_pthreads_memgrowth.json index c059b735e570f..ad0524a4dd8a1 100644 --- a/test/codesize/test_codesize_minimal_pthreads_memgrowth.json +++ b/test/codesize/test_codesize_minimal_pthreads_memgrowth.json @@ -1,10 +1,10 @@ { - "a.out.js": 7383, - "a.out.js.gz": 3643, + "a.out.js": 7357, + "a.out.js.gz": 3627, "a.out.nodebug.wasm": 19064, "a.out.nodebug.wasm.gz": 8804, - "total": 26447, - "total_gz": 12447, + "total": 26421, + "total_gz": 12431, "sent": [ "a (memory)", "b (exit)", diff --git a/test/codesize/test_small_js_flags.expected.js b/test/codesize/test_small_js_flags.expected.js index cca37ee126424..6439d949c047c 100644 --- a/test/codesize/test_small_js_flags.expected.js +++ b/test/codesize/test_small_js_flags.expected.js @@ -284,10 +284,6 @@ class ExitStatus { /** @type {!Uint8Array} */ var HEAPU8; -var runDependencies = 0; - -var dependenciesFulfilled = null; - var printCharBuffers = [ null, [], [] ]; var UTF8Decoder = globalThis.TextDecoder && new TextDecoder; @@ -444,16 +440,7 @@ function callMain() { } function run() { - if (runDependencies > 0) { - dependenciesFulfilled = run; - return; - } preRun(); - // a preRun added a dependency, run will be called later - if (runDependencies > 0) { - dependenciesFulfilled = run; - return; - } function doRun() { // run may have just been called through dependencies being fulfilled just in this very frame, // or while the async setStatus time below was happening diff --git a/test/codesize/test_unoptimized_code_size.json b/test/codesize/test_unoptimized_code_size.json index a0e82b230b4fc..dba4f70894f1b 100644 --- a/test/codesize/test_unoptimized_code_size.json +++ b/test/codesize/test_unoptimized_code_size.json @@ -1,16 +1,16 @@ { - "hello_world.js": 57125, - "hello_world.js.gz": 17796, + "hello_world.js": 54902, + "hello_world.js.gz": 17283, "hello_world.wasm": 15115, "hello_world.wasm.gz": 7464, - "no_asserts.js": 26698, - "no_asserts.js.gz": 8934, + "no_asserts.js": 25903, + "no_asserts.js.gz": 8768, "no_asserts.wasm": 12229, "no_asserts.wasm.gz": 6004, - "strict.js": 54758, - "strict.js.gz": 17042, + "strict.js": 52659, + "strict.js.gz": 16513, "strict.wasm": 15115, "strict.wasm.gz": 7461, - "total": 181040, - "total_gz": 64701 + "total": 175923, + "total_gz": 63493 } diff --git a/tools/link.py b/tools/link.py index eded3cd7e37db..f4915764fb831 100644 --- a/tools/link.py +++ b/tools/link.py @@ -1252,8 +1252,8 @@ def limit_incoming_module_api(): settings.DEFAULT_LIBRARY_FUNCS_TO_INCLUDE += ['$ExitStatus'] - # Certain configurations require the removeRunDependency/addRunDependency system. - if settings.LOAD_SOURCE_MAP or (settings.WASM_ASYNC_COMPILATION and not settings.MODULARIZE): + if settings.LOAD_SOURCE_MAP: + # Loading the source map uses the addRunDependency/removeRunDependency system. settings.DEFAULT_LIBRARY_FUNCS_TO_INCLUDE += ['$addRunDependency', '$removeRunDependency'] if settings.ABORT_ON_WASM_EXCEPTIONS or settings.SPLIT_MODULE: @@ -1953,7 +1953,7 @@ def run_embind_gen(options, wasm_target, js_syms, extra_settings): settings.MIN_NODE_VERSION = feature_matrix.OLDEST_SUPPORTED_NODE settings.MINIMAL_RUNTIME = 0 # Required function to trigger TS generation. - settings.DEFAULT_LIBRARY_FUNCS_TO_INCLUDE += ['$callRuntimeCallbacks', '$addRunDependency', '$removeRunDependency'] + settings.DEFAULT_LIBRARY_FUNCS_TO_INCLUDE += ['$callRuntimeCallbacks'] settings.EXPORT_ES6 = False # Disable proxying and thread pooling so a worker is not automatically created. settings.PROXY_TO_PTHREAD = False