Skip to content

Commit 40f669e

Browse files
authored
Stop including malloc/free by default (#12213)
Before this we would always include malloc/free, and rely on metadce to remove them when not needed. But this has downsides: 1. Slower compile times. 2. Larger builds when not using metadce. 3. It prevented us from writing a nice sbrk using __heap_base, as if malloc is included first and removed by metadce that would still leave some data in the memory initialization, increasing code size without the workaround we had in sbrk to avoid it. Much of the work here is to get deps_info.json to handle things properly and include malloc/free when needed. I did this twice to double-check, but it is still someone error-prone, as we need each code path that reached a malloc from JS to be identified properly. Some places use malloc/free in locations that are not part of the JS deps system, and those now use makeMallocAbort. In those places we know we should not reach them if malloc is not included, so we just have an abort there. That would catch errors with deps_info.json. In assertions builds, also help users by adding malloc/free in JS that show a clear error if called, if malloc/free was not included but the user called them anyhow. With this PR we can remove the hack for sbrk, but I wanted to keep that for a later PR as this is already not small.
1 parent d94256d commit 40f669e

Some content is hidden

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

42 files changed

+236
-128
lines changed

ChangeLog.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ See docs/process.md for how version tagging works.
1717

1818
Current Trunk
1919
-------------
20+
- Stop including `malloc` and `free` by default. If you need access to them from
21+
JS, you must export them manually using
22+
`-s EXPORTED_FUNCTIONS=['_malloc', ..]`.
2023
- Stop running Binaryen optimizations in `-O1`. This makes `-O1` builds a little
2124
larger but they compile a lot faster, which makes more sense in a "compromise"
2225
build (in between `-O0` and higher optimization levels suitable for release

emcc.py

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1411,12 +1411,6 @@ def check(input_file):
14111411
if shared.Settings.EMBIND:
14121412
forced_stdlibs.append('libembind')
14131413

1414-
if not shared.Settings.MINIMAL_RUNTIME and not shared.Settings.STANDALONE_WASM:
1415-
# The normal JS runtime depends on malloc and free so always keep them alive.
1416-
# MINIMAL_RUNTIME avoids this dependency as does STANDALONE_WASM mode (since it has no
1417-
# JS runtime at all).
1418-
shared.Settings.EXPORTED_FUNCTIONS += ['_malloc', '_free']
1419-
14201414
shared.Settings.EXPORTED_FUNCTIONS += ['_stackSave', '_stackRestore', '_stackAlloc']
14211415
# We need to preserve the __data_end symbol so that wasm-emscripten-finalize can determine
14221416
# where static data ends (and correspondingly where the stack begins).
@@ -1545,7 +1539,7 @@ def check(input_file):
15451539

15461540
if shared.Settings.USE_PTHREADS:
15471541
# memalign is used to ensure allocated thread stacks are aligned.
1548-
shared.Settings.EXPORTED_FUNCTIONS += ['_memalign', '_malloc']
1542+
shared.Settings.EXPORTED_FUNCTIONS += ['_memalign']
15491543

15501544
# dynCall is used to call pthread entry points in worker.js (as
15511545
# metadce does not consider worker.js, which is external, we must
@@ -1767,6 +1761,26 @@ def include_and_export(name):
17671761
if sanitize and '-g4' in args:
17681762
shared.Settings.LOAD_SOURCE_MAP = 1
17691763

1764+
# various settings require malloc/free support from JS
1765+
if shared.Settings.RELOCATABLE or \
1766+
shared.Settings.BUILD_AS_WORKER or \
1767+
shared.Settings.USE_WEBGPU or \
1768+
shared.Settings.USE_PTHREADS or \
1769+
shared.Settings.OFFSCREENCANVAS_SUPPORT or \
1770+
shared.Settings.LEGACY_GL_EMULATION or \
1771+
shared.Settings.DISABLE_EXCEPTION_CATCHING != 1 or \
1772+
shared.Settings.ASYNCIFY or \
1773+
shared.Settings.ASMFS or \
1774+
shared.Settings.DEMANGLE_SUPPORT or \
1775+
shared.Settings.FORCE_FILESYSTEM or \
1776+
shared.Settings.STB_IMAGE or \
1777+
shared.Settings.EMBIND or \
1778+
shared.Settings.FETCH or \
1779+
shared.Settings.PROXY_POSIX_SOCKETS or \
1780+
options.memory_profiler or \
1781+
sanitize:
1782+
shared.Settings.EXPORTED_FUNCTIONS += ['_malloc', '_free']
1783+
17701784
options.binaryen_passes += backend_binaryen_passes()
17711785

17721786
if shared.Settings.WASM2JS and use_source_map(options):

emscripten.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -249,10 +249,6 @@ def report_missing_symbols(all_implemented, pre):
249249
for requested in missing:
250250
if ('function ' + asstr(requested)) in pre:
251251
continue
252-
# special-case malloc, EXPORTED by default for internal use, but we bake in a
253-
# trivial allocator and warn at runtime if used in ASSERTIONS
254-
if missing == '_malloc':
255-
continue
256252
diagnostics.warning('undefined', 'undefined exported function: "%s"', requested)
257253

258254
# Special hanlding for the `_main` symbol

src/deps_info.json

Lines changed: 109 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,40 +4,50 @@
44
"getenv": ["malloc", "free"],
55
"SDL_getenv": ["malloc", "free"],
66
"dlerror": ["malloc", "free"],
7-
"readdir": ["malloc"],
8-
"ttyname": ["malloc"],
9-
"calloc": ["malloc"],
7+
"dladdr": ["malloc", "free"],
8+
"readdir": ["malloc", "free"],
9+
"ttyname": ["malloc", "free"],
10+
"calloc": ["malloc", "free"],
1011
"realloc": ["malloc", "free"],
11-
"getlogin": ["malloc"],
12-
"tmpnam": ["malloc"],
13-
"mmap": ["memalign", "memset"],
14-
"realpath": ["malloc"],
15-
"strerror": ["malloc"],
16-
"__ctype_b_loc": ["malloc"],
17-
"__ctype_tolower_loc": ["malloc"],
18-
"__ctype_toupper_loc": ["malloc"],
19-
"newlocale": ["malloc"],
12+
"getlogin": ["malloc", "free"],
13+
"tmpnam": ["malloc", "free"],
14+
"mmap": ["memalign", "memset", "malloc", "free"],
15+
"munmap": ["memalign", "memset", "malloc", "free"],
16+
"realpath": ["malloc", "free"],
17+
"strerror": ["malloc", "free"],
18+
"__ctype_b_loc": ["malloc", "free"],
19+
"__ctype_tolower_loc": ["malloc", "free"],
20+
"__ctype_toupper_loc": ["malloc", "free"],
21+
"newlocale": ["malloc", "free"],
2022
"freelocale": ["free"],
21-
"nl_langinfo": ["malloc"],
22-
"inet_ntoa": ["malloc"],
23+
"nl_langinfo": ["malloc", "free"],
24+
"inet_ntoa": ["malloc", "free"],
2325
"gethostbyname": ["malloc", "free", "htons", "ntohs", "memcpy"],
2426
"gethostbyname_r": ["malloc", "free", "htons", "ntohs", "memcpy"],
25-
"getaddrinfo": ["malloc", "htonl", "htons", "ntohs"],
27+
"getaddrinfo": ["malloc", "free", "htonl", "htons", "ntohs"],
2628
"getnameinfo": ["htons", "ntohs"],
2729
"getpeername": ["htons", "ntohs"],
2830
"_inet_ntop6_raw": ["ntohs"],
2931
"_read_sockaddr": ["ntohs"],
3032
"freeaddrinfo": ["free"],
31-
"gai_strerror": ["malloc"],
32-
"setprotoent": ["malloc"],
33+
"gai_strerror": ["malloc", "free"],
34+
"setprotoent": ["malloc", "free"],
3335
"emscripten_run_script_string": ["malloc", "free"],
3436
"emscripten_log": ["strlen"],
3537
"uuid_clear": ["memset"],
3638
"uuid_compare": ["memcmp", "memcpy", "memset"],
3739
"uuid_copy": ["memcpy"],
3840
"SDL_Init": ["malloc", "free", "memset", "memcpy"],
41+
"SDL_PushEvent": ["malloc", "free"],
42+
"SDL_OpenAudio": ["malloc", "free"],
43+
"SDL_LockSurface": ["malloc", "free"],
3944
"SDL_GL_GetProcAddress": ["emscripten_GetProcAddress"],
45+
"SDL_CreateRGBSurface": ["malloc", "free"],
46+
"SDL_malloc": ["malloc", "free"],
47+
"SDL_free": ["free"],
48+
"emscripten_SDL_SetEventHandler": ["malloc", "free"],
4049
"Mix_LoadWAV_RW": ["fileno"],
50+
"eglQueryString": ["malloc", "free"],
4151
"eglGetProcAddress": ["emscripten_GetProcAddress"],
4252
"glfwGetProcAddress": ["emscripten_GetProcAddress"],
4353
"emscripten_GetProcAddress": ["strstr"],
@@ -46,6 +56,9 @@
4656
"emscripten_GetAlcProcAddress": ["strcmp"],
4757
"emscripten_GetAlProcAddress": ["strcmp"],
4858
"emscripten_get_preloaded_image_data_from_FILE": ["fileno"],
59+
"alGetString": ["malloc", "free"],
60+
"alcGetString": ["malloc", "free"],
61+
"emscripten_alcGetStringiSOFT": ["malloc", "free"],
4962
"__gxx_personality_v0": ["_ZSt18uncaught_exceptionv", "__cxa_find_matching_catch"],
5063
"__cxa_find_matching_catch": ["__cxa_is_pointer_type", "__cxa_can_catch"],
5164
"__cxa_find_matching_catch_0": ["__cxa_is_pointer_type", "__cxa_can_catch"],
@@ -60,36 +73,43 @@
6073
"__cxa_find_matching_catch_9": ["__cxa_is_pointer_type", "__cxa_can_catch"],
6174
"__cxa_begin_catch": ["_ZSt18uncaught_exceptionv", "setThrew"],
6275
"__cxa_end_catch": ["free"],
63-
"__cxa_allocate_exception": ["malloc", "setThrew"],
76+
"__cxa_allocate_exception": ["malloc", "free", "setThrew"],
6477
"__cxa_free_exception": ["free"],
6578
"__cxa_throw": ["setThrew"],
6679
"formatString": ["strlen"],
80+
"glfwInit": ["malloc", "free"],
6781
"glfwSleep": ["sleep"],
6882
"glBegin": ["malloc", "free"],
83+
"glewInit": ["malloc", "free"],
6984
"bind": ["htonl", "htons", "ntohs"],
7085
"connect": ["htonl", "htons", "ntohs"],
7186
"socket": ["htonl", "htons", "ntohs"],
7287
"socketpair": ["htons", "ntohs"],
7388
"sleep": ["usleep"],
7489
"recv": ["htons", "ntohs"],
7590
"send": ["htons", "ntohs"],
76-
"ctime": ["_get_tzname", "_get_daylight", "_get_timezone", "malloc"],
77-
"ctime_r": ["_get_tzname", "_get_daylight", "_get_timezone", "malloc"],
78-
"localtime": ["_get_tzname", "_get_daylight", "_get_timezone", "malloc"],
79-
"localtime_r": ["_get_tzname", "_get_daylight", "_get_timezone", "malloc"],
80-
"mktime": ["_get_tzname", "_get_daylight", "_get_timezone", "malloc"],
81-
"timegm": ["_get_tzname", "_get_daylight", "_get_timezone", "malloc"],
82-
"tzset": ["_get_tzname", "_get_daylight", "_get_timezone", "malloc"],
91+
"ctime": ["_get_tzname", "_get_daylight", "_get_timezone", "malloc", "free"],
92+
"ctime_r": ["_get_tzname", "_get_daylight", "_get_timezone", "malloc", "free"],
93+
"gmtime": ["malloc", "free"],
94+
"gmtime_r": ["malloc", "free"],
95+
"localtime": ["_get_tzname", "_get_daylight", "_get_timezone", "malloc", "free"],
96+
"localtime_r": ["_get_tzname", "_get_daylight", "_get_timezone", "malloc", "free"],
97+
"mktime": ["_get_tzname", "_get_daylight", "_get_timezone", "malloc", "free"],
98+
"timegm": ["_get_tzname", "_get_daylight", "_get_timezone", "malloc", "free"],
99+
"tzset": ["_get_tzname", "_get_daylight", "_get_timezone", "malloc", "free"],
83100
"times": ["memset"],
101+
"emscripten_pc_get_function": ["malloc", "free"],
102+
"emscripten_pc_get_file": ["malloc", "free"],
84103
"emscripten_set_canvas_element_size_calling_thread": ["_emscripten_call_on_thread"],
85-
"emscripten_set_offscreencanvas_size_on_target_thread": ["_emscripten_call_on_thread"],
86-
"emscripten_websocket_new": ["malloc"],
87-
"emscripten_wget_data": ["malloc"],
104+
"emscripten_set_offscreencanvas_size_on_target_thread": ["_emscripten_call_on_thread", "malloc", "free"],
105+
"emscripten_set_offscreencanvas_size_on_target_thread_js": ["malloc", "free"],
106+
"emscripten_websocket_new": ["malloc", "free"],
107+
"emscripten_wget_data": ["malloc", "free"],
88108
"emscripten_webgl_destroy_context": ["emscripten_webgl_make_context_current", "emscripten_webgl_get_current_context"],
89109
"emscripten_idb_async_load": ["malloc", "free"],
90110
"emscripten_idb_load": ["malloc", "free"],
91111
"wgpuDeviceCreateBuffer": ["malloc", "free"],
92-
"stringToNewUTF8": ["malloc"],
112+
"stringToNewUTF8": ["malloc", "free"],
93113
"_embind_register_std_string": ["malloc", "free"],
94114
"_embind_register_std_wstring": ["malloc", "free"],
95115
"pthread_create": ["malloc", "free", "emscripten_main_thread_process_queued_calls"],
@@ -103,5 +123,64 @@
103123
"setjmp": ["setThrew", "realloc", "testSetjmp", "saveSetjmp"],
104124
"longjmp": ["setThrew", "realloc", "testSetjmp", "saveSetjmp"],
105125
"siglongjmp": ["setThrew", "realloc", "testSetjmp", "saveSetjmp"],
106-
"emscripten_longjmp_jmpbuf": ["setThrew", "realloc", "testSetjmp", "saveSetjmp"]
126+
"emscripten_longjmp_jmpbuf": ["setThrew", "realloc", "testSetjmp", "saveSetjmp"],
127+
"emscripten_websocket_new": ["malloc", "free"],
128+
"emscripten_websocket_set_onmessage_callback_on_thread": ["malloc", "free"],
129+
"emscripten_websocket_set_onclose_callback_on_thread": ["malloc", "free"],
130+
"emscripten_websocket_set_onerror_callback_on_thread": ["malloc", "free"],
131+
"emscripten_websocket_set_onopen_callback_on_thread": ["malloc", "free"],
132+
"emscripten_init_websocket_to_posix_socket_bridge": ["malloc", "free"],
133+
"emscripten_set_keypress_callback_on_thread": ["malloc", "free"],
134+
"emscripten_set_keyup_callback_on_thread": ["malloc", "free"],
135+
"emscripten_set_keydown_callback_on_thread": ["malloc", "free"],
136+
"emscripten_set_click_callback_on_thread": ["malloc", "free"],
137+
"emscripten_set_mousedown_callback_on_thread": ["malloc", "free"],
138+
"emscripten_set_mouseup_callback_on_thread": ["malloc", "free"],
139+
"emscripten_set_dblclick_callback_on_thread": ["malloc", "free"],
140+
"emscripten_set_mousemove_callback_on_thread": ["malloc", "free"],
141+
"emscripten_set_mousemove_callback_on_thread": ["malloc", "free"],
142+
"emscripten_set_mouseenter_callback_on_thread": ["malloc", "free"],
143+
"emscripten_set_mouseleave_callback_on_thread": ["malloc", "free"],
144+
"emscripten_set_mouseover_callback_on_thread": ["malloc", "free"],
145+
"emscripten_set_mouseout_callback_on_thread": ["malloc", "free"],
146+
"emscripten_set_wheel_callback_on_thread": ["malloc", "free"],
147+
"emscripten_set_resize_callback_on_thread": ["malloc", "free"],
148+
"emscripten_set_scroll_callback_on_thread": ["malloc", "free"],
149+
"emscripten_set_blur_callback_on_thread": ["malloc", "free"],
150+
"emscripten_set_focus_callback_on_thread": ["malloc", "free"],
151+
"emscripten_set_focusin_callback_on_thread": ["malloc", "free"],
152+
"emscripten_set_focusout_callback_on_thread": ["malloc", "free"],
153+
"emscripten_set_deviceorientation_callback_on_thread": ["malloc", "free"],
154+
"emscripten_set_orientationchange_callback_on_thread": ["malloc", "free"],
155+
"emscripten_set_fullscreenchange_callback_on_thread": ["malloc", "free"],
156+
"emscripten_set_pointerlockchange_callback_on_thread": ["malloc", "free"],
157+
"emscripten_set_pointerlockerror_callback_on_thread": ["malloc", "free"],
158+
"emscripten_set_visibilitychange_callback_on_thread": ["malloc", "free"],
159+
"emscripten_set_touchstart_callback_on_thread": ["malloc", "free"],
160+
"emscripten_set_touchend_callback_on_thread": ["malloc", "free"],
161+
"emscripten_set_touchmove_callback_on_thread": ["malloc", "free"],
162+
"emscripten_set_touchcancel_callback_on_thread": ["malloc", "free"],
163+
"emscripten_set_gamepadconnected_callback_on_thread": ["malloc", "free"],
164+
"emscripten_set_gamepaddisconnected_callback_on_thread": ["malloc", "free"],
165+
"emscripten_set_beforeunload_callback_on_thread": ["malloc", "free"],
166+
"emscripten_set_batterychargingchange_callback_on_thread": ["malloc", "free"],
167+
"emscripten_set_batterylevelchange_callback_on_thread": ["malloc", "free"],
168+
"emscripten_set_devicemotion_callback_on_thread": ["malloc", "free"],
169+
"emscripten_run_preload_plugins_data": ["malloc", "free"],
170+
"emscripten_async_wget_data": ["malloc", "free"],
171+
"emscripten_async_wget2_data": ["malloc", "free"],
172+
"emscripten_get_window_title": ["malloc", "free"],
173+
"emscripten_get_compiler_setting": ["malloc", "free"],
174+
"emscripten_create_worker": ["malloc", "free"],
175+
"emscripten_get_preloaded_image_data": ["malloc", "free"],
176+
"emscripten_webgl_get_supported_extensions": ["malloc", "free"],
177+
"emscripten_webgl_get_program_info_log_utf8": ["malloc", "free"],
178+
"emscripten_webgl_get_shader_info_log_utf8": ["malloc", "free"],
179+
"emscripten_webgl_get_shader_source_utf8": ["malloc", "free"],
180+
"emscripten_webgl_get_parameter_utf8": ["malloc", "free"],
181+
"emscripten_webgl_create_context": ["malloc", "free"],
182+
"glMapBufferRange": ["malloc", "free"],
183+
"glGetString": ["malloc", "free"],
184+
"glGetStringi": ["malloc", "free"],
185+
"syslog": ["malloc", "free"]
107186
}

src/library_fs.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2026,7 +2026,7 @@ FS.staticInit();` +
20262026
// page-aligned size, and clears the padding.
20272027
mmapAlloc: function(size) {
20282028
var alignedSize = alignMemory(size, {{{ POSIX_PAGE_SIZE }}});
2029-
var ptr = _malloc(alignedSize);
2029+
var ptr = {{{ makeMalloc('mmapAlloc', 'alignedSize') }}};
20302030
while (size < alignedSize) HEAP8[ptr + size++] = 0;
20312031
return ptr;
20322032
}

src/library_sdl.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1846,10 +1846,14 @@ var LibrarySDL = {
18461846
SDL_SetError: function() {},
18471847

18481848
SDL_malloc__sig: 'ii',
1849-
SDL_malloc: 'malloc',
1849+
SDL_malloc: function(size) {
1850+
return _malloc(size);
1851+
},
18501852

18511853
SDL_free__sig: 'vi',
1852-
SDL_free: 'free',
1854+
SDL_free: function(ptr) {
1855+
_free(ptr);
1856+
},
18531857

18541858
SDL_CreateRGBSurface__proxy: 'sync',
18551859
SDL_CreateRGBSurface__sig: 'iiiiiiiii',
@@ -2653,7 +2657,7 @@ var LibrarySDL = {
26532657
SDL.audio.paused = pauseOn;
26542658
},
26552659

2656-
SDL_CloseAudio__deps: ['SDL_PauseAudio', 'free'],
2660+
SDL_CloseAudio__deps: ['SDL_PauseAudio'],
26572661
SDL_CloseAudio__proxy: 'sync',
26582662
SDL_CloseAudio__sig: 'v',
26592663
SDL_CloseAudio: function() {

src/parseTools.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1707,3 +1707,18 @@ function addReadyPromiseAssertions(promise) {
17071707
`;
17081708
}).join('\n');
17091709
}
1710+
1711+
function makeMalloc(source, param) {
1712+
if ('_malloc' in IMPLEMENTED_FUNCTIONS) {
1713+
return '_malloc(' + param + ')';
1714+
}
1715+
// It should be impossible to call some functions without malloc being
1716+
// included, unless we have a deps_info.json bug. To let closure not error
1717+
// on `_malloc` not being present, they don't call malloc and instead abort
1718+
// with an error at runtime.
1719+
// TODO: A more comprehensive deps system could catch this at compile time.
1720+
if (!ASSERTIONS) {
1721+
return "abort();";
1722+
}
1723+
return `abort('malloc was not included, but is needed in ${source}. Adding "_malloc" to EXPORTED_FUNCTIONS should fix that. This may be a bug in the compiler, please file an issue.');`
1724+
}

src/preamble.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,22 @@ function cwrap(ident, returnType, argTypes, opts) {
187187
}
188188
}
189189

190+
#if ASSERTIONS
191+
// We used to include malloc/free by default in the past. Show a helpful error in
192+
// builds with assertions.
193+
#if !('_malloc' in IMPLEMENTED_FUNCTIONS)
194+
function _malloc() {
195+
abort("malloc() called but not included in the build - add '_malloc' to EXPORTED_FUNCTIONS");
196+
}
197+
#endif // malloc
198+
#if !('_free' in IMPLEMENTED_FUNCTIONS)
199+
function _free() {
200+
// Show a helpful error since we used to include free by default in the past.
201+
abort("free() called but not included in the build - add '_free' to EXPORTED_FUNCTIONS");
202+
}
203+
#endif // free
204+
#endif // ASSERTIONS
205+
190206
var ALLOC_NORMAL = 0; // Tries to use _malloc()
191207
var ALLOC_STACK = 1; // Lives for the duration of the current function call
192208
var ALLOC_NONE = 2; // Do not allocate
@@ -221,7 +237,7 @@ function allocate(slab, types, allocator, ptr) {
221237
if (allocator == ALLOC_NONE) {
222238
ret = ptr;
223239
} else {
224-
ret = [_malloc,
240+
ret = [{{{ ('_malloc' in IMPLEMENTED_FUNCTIONS) ? '_malloc' : 'null' }}},
225241
#if DECLARE_ASM_MODULE_EXPORTS
226242
stackAlloc,
227243
#else

src/runtime_strings_extra.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ function lengthBytesUTF32(str) {
209209
// It is the responsibility of the caller to free() that memory.
210210
function allocateUTF8(str) {
211211
var size = lengthBytesUTF8(str) + 1;
212-
var ret = _malloc(size);
212+
var ret = {{{ makeMalloc('allocateUTF8', 'size') }}};
213213
if (ret) stringToUTF8Array(str, HEAP8, ret, size);
214214
return ret;
215215
}

tests/code_size/hello_webgl2_wasm.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"a.js": 5035,
55
"a.js.gz": 2395,
66
"a.wasm": 10910,
7-
"a.wasm.gz": 6930,
7+
"a.wasm.gz": 6928,
88
"total": 16508,
9-
"total_gz": 9702
9+
"total_gz": 9700
1010
}

tests/code_size/hello_webgl_wasm.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"a.js": 4519,
55
"a.js.gz": 2219,
66
"a.wasm": 10910,
7-
"a.wasm.gz": 6930,
7+
"a.wasm.gz": 6928,
88
"total": 15992,
9-
"total_gz": 9526
9+
"total_gz": 9524
1010
}

tests/code_size/hello_webgl_wasm2js.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
"a.html": 588,
33
"a.html.gz": 386,
44
"a.js": 21617,
5-
"a.js.gz": 8296,
5+
"a.js.gz": 8297,
66
"a.mem": 3168,
77
"a.mem.gz": 2711,
88
"total": 25373,
9-
"total_gz": 11393
9+
"total_gz": 11394
1010
}

0 commit comments

Comments
 (0)