Skip to content

Commit b08a8a1

Browse files
committed
stop doing the extra preparation work (decode images, etc.) unless asked to emscripten-core#3785
1 parent ee95e13 commit b08a8a1

5 files changed

Lines changed: 61 additions & 37 deletions

File tree

emcc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,7 @@ try:
413413
memory_init_file = None
414414
use_preload_cache = False
415415
no_heap_copy = False
416+
use_preload_plugins = False
416417
proxy_to_worker = False
417418
default_object_extension = '.o'
418419
valid_abspaths = []
@@ -572,6 +573,9 @@ try:
572573
elif newargs[i].startswith('--no-heap-copy'):
573574
no_heap_copy = True
574575
newargs[i] = ''
576+
elif newargs[i].startswith('--use-preload-plugins'):
577+
use_preload_plugins = True
578+
newargs[i] = ''
575579
elif newargs[i] == '--ignore-dynamic-linking':
576580
ignore_dynamic_linking = True
577581
newargs[i] = ''
@@ -1341,6 +1345,8 @@ try:
13411345
file_args.append('--no-closure')
13421346
if shared.Settings.LZ4:
13431347
file_args.append('--lz4')
1348+
if use_preload_plugins:
1349+
file_args.append('--use-preload-plugins')
13441350
file_code = execute([shared.PYTHON, shared.FILE_PACKAGER, unsuffixed(target) + '.data'] + file_args, stdout=PIPE)[0]
13451351
pre_js = file_code + pre_js
13461352

site/source/docs/tools_reference/emcc.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,9 @@ Options that are modified or new in *emcc* are listed below:
282282
``--exclude-file <name>``
283283
Files and directories to be excluded from :ref:`--embed-file <emcc-embed-file>` and :ref:`--preload-file <emcc-preload-file>`. Wildcards (*) are supported.
284284

285+
``--use-preload-plugins``
286+
Tells the file packager to run preload plugins on the files as they are loaded. This performs tasks like decoding images and audio using the browser's codecs.
287+
285288
.. _emcc-shell-file:
286289

287290
``--shell-file <path>``

src/library_sdl.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2151,7 +2151,7 @@ var LibrarySDL = {
21512151
var raw = callStbImage('stbi_load_from_memory', [rwops.bytes, rwops.count]);
21522152
if (!raw) return 0;
21532153
#else
2154-
Runtime.warnOnce('Only file names that have been preloaded are supported for IMG_Load_RW. Consider using STB_IMAGE=1 if you want synchronous image decoding (see settings.js)');
2154+
Runtime.warnOnce('Only file names that have been preloaded are supported for IMG_Load_RW. Consider using STB_IMAGE=1 if you want synchronous image decoding (see settings.js), or package files with --use-preload-plugins');
21552155
return 0;
21562156
#endif
21572157
}
@@ -2171,7 +2171,7 @@ var LibrarySDL = {
21712171
if (!raw) return 0;
21722172
#else
21732173
Runtime.warnOnce('Cannot find preloaded image ' + filename);
2174-
Runtime.warnOnce('Cannot find preloaded image ' + filename + '. Consider using STB_IMAGE=1 if you want synchronous image decoding (see settings.js)');
2174+
Runtime.warnOnce('Cannot find preloaded image ' + filename + '. Consider using STB_IMAGE=1 if you want synchronous image decoding (see settings.js), or package files with --use-preload-plugins');
21752175
return 0;
21762176
#endif
21772177
} else if (Module['freePreloadedMediaOnUse']) {

tests/test_browser.py

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ def test_sdl_image(self):
422422
('screenshot.jpg@/assets/screenshot.jpg', '/assets', 'screenshot.jpg')]:
423423
Popen([
424424
PYTHON, EMCC, os.path.join(self.get_dir(), 'sdl_image.c'), '-o', 'page.html', '-O2', '--memory-init-file', str(mem),
425-
'--preload-file', dest, '-DSCREENSHOT_DIRNAME="' + dirname + '"', '-DSCREENSHOT_BASENAME="' + basename + '"'
425+
'--preload-file', dest, '-DSCREENSHOT_DIRNAME="' + dirname + '"', '-DSCREENSHOT_BASENAME="' + basename + '"', '--use-preload-plugins'
426426
]).communicate()
427427
self.run_browser('page.html', '', '/report_result?600')
428428

@@ -431,7 +431,7 @@ def test_sdl_image_jpeg(self):
431431
open(os.path.join(self.get_dir(), 'sdl_image_jpeg.c'), 'w').write(self.with_report_result(open(path_from_root('tests', 'sdl_image.c')).read()))
432432
Popen([
433433
PYTHON, EMCC, os.path.join(self.get_dir(), 'sdl_image_jpeg.c'), '-o', 'page.html',
434-
'--preload-file', 'screenshot.jpeg', '-DSCREENSHOT_DIRNAME="/"', '-DSCREENSHOT_BASENAME="screenshot.jpeg"'
434+
'--preload-file', 'screenshot.jpeg', '-DSCREENSHOT_DIRNAME="/"', '-DSCREENSHOT_BASENAME="screenshot.jpeg"', '--use-preload-plugins'
435435
]).communicate()
436436
self.run_browser('page.html', '', '/report_result?600')
437437

@@ -1047,55 +1047,55 @@ def test_sdl_gl_mapbuffers(self):
10471047
def test_sdl_ogl(self):
10481048
shutil.copyfile(path_from_root('tests', 'screenshot.png'), os.path.join(self.get_dir(), 'screenshot.png'))
10491049
self.btest('sdl_ogl.c', reference='screenshot-gray-purple.png', reference_slack=1,
1050-
args=['-O2', '--minify', '0', '--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1'],
1050+
args=['-O2', '--minify', '0', '--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1', '--use-preload-plugins'],
10511051
message='You should see an image with gray at the top.')
10521052

10531053
def test_sdl_ogl_defaultmatrixmode(self):
10541054
shutil.copyfile(path_from_root('tests', 'screenshot.png'), os.path.join(self.get_dir(), 'screenshot.png'))
10551055
self.btest('sdl_ogl_defaultMatrixMode.c', reference='screenshot-gray-purple.png', reference_slack=1,
1056-
args=['--minify', '0', '--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1'],
1056+
args=['--minify', '0', '--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1', '--use-preload-plugins'],
10571057
message='You should see an image with gray at the top.')
10581058

10591059
def test_sdl_ogl_p(self):
10601060
# Immediate mode with pointers
10611061
shutil.copyfile(path_from_root('tests', 'screenshot.png'), os.path.join(self.get_dir(), 'screenshot.png'))
10621062
self.btest('sdl_ogl_p.c', reference='screenshot-gray.png', reference_slack=1,
1063-
args=['--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1'],
1063+
args=['--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1', '--use-preload-plugins'],
10641064
message='You should see an image with gray at the top.')
10651065

10661066
def test_sdl_ogl_proc_alias(self):
10671067
shutil.copyfile(path_from_root('tests', 'screenshot.png'), os.path.join(self.get_dir(), 'screenshot.png'))
10681068
self.btest('sdl_ogl_proc_alias.c', reference='screenshot-gray-purple.png', reference_slack=1,
1069-
args=['-O2', '-g2', '-s', 'INLINING_LIMIT=1', '--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1'])
1069+
args=['-O2', '-g2', '-s', 'INLINING_LIMIT=1', '--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1', '--use-preload-plugins'])
10701070

10711071
def test_sdl_fog_simple(self):
10721072
shutil.copyfile(path_from_root('tests', 'screenshot.png'), os.path.join(self.get_dir(), 'screenshot.png'))
10731073
self.btest('sdl_fog_simple.c', reference='screenshot-fog-simple.png',
1074-
args=['-O2', '--minify', '0', '--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1'],
1074+
args=['-O2', '--minify', '0', '--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1', '--use-preload-plugins'],
10751075
message='You should see an image with fog.')
10761076

10771077
def test_sdl_fog_negative(self):
10781078
shutil.copyfile(path_from_root('tests', 'screenshot.png'), os.path.join(self.get_dir(), 'screenshot.png'))
10791079
self.btest('sdl_fog_negative.c', reference='screenshot-fog-negative.png',
1080-
args=['--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1'],
1080+
args=['--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1', '--use-preload-plugins'],
10811081
message='You should see an image with fog.')
10821082

10831083
def test_sdl_fog_density(self):
10841084
shutil.copyfile(path_from_root('tests', 'screenshot.png'), os.path.join(self.get_dir(), 'screenshot.png'))
10851085
self.btest('sdl_fog_density.c', reference='screenshot-fog-density.png',
1086-
args=['--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1'],
1086+
args=['--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1', '--use-preload-plugins'],
10871087
message='You should see an image with fog.')
10881088

10891089
def test_sdl_fog_exp2(self):
10901090
shutil.copyfile(path_from_root('tests', 'screenshot.png'), os.path.join(self.get_dir(), 'screenshot.png'))
10911091
self.btest('sdl_fog_exp2.c', reference='screenshot-fog-exp2.png',
1092-
args=['--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1'],
1092+
args=['--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1', '--use-preload-plugins'],
10931093
message='You should see an image with fog.')
10941094

10951095
def test_sdl_fog_linear(self):
10961096
shutil.copyfile(path_from_root('tests', 'screenshot.png'), os.path.join(self.get_dir(), 'screenshot.png'))
10971097
self.btest('sdl_fog_linear.c', reference='screenshot-fog-linear.png', reference_slack=1,
1098-
args=['--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1'],
1098+
args=['--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1', '--use-preload-plugins'],
10991099
message='You should see an image with fog.')
11001100

11011101
def test_glfw(self):
@@ -1371,20 +1371,20 @@ def test_gl_textures(self):
13711371
def test_gl_ps(self):
13721372
# pointers and a shader
13731373
shutil.copyfile(path_from_root('tests', 'screenshot.png'), os.path.join(self.get_dir(), 'screenshot.png'))
1374-
self.btest('gl_ps.c', reference='gl_ps.png', args=['--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1'], reference_slack=1)
1374+
self.btest('gl_ps.c', reference='gl_ps.png', args=['--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1', '--use-preload-plugins'], reference_slack=1)
13751375

13761376
def test_gl_ps_packed(self):
13771377
# packed data that needs to be strided
13781378
shutil.copyfile(path_from_root('tests', 'screenshot.png'), os.path.join(self.get_dir(), 'screenshot.png'))
1379-
self.btest('gl_ps_packed.c', reference='gl_ps.png', args=['--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1'], reference_slack=1)
1379+
self.btest('gl_ps_packed.c', reference='gl_ps.png', args=['--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1', '--use-preload-plugins'], reference_slack=1)
13801380

13811381
def test_gl_ps_strides(self):
13821382
shutil.copyfile(path_from_root('tests', 'screenshot.png'), os.path.join(self.get_dir(), 'screenshot.png'))
1383-
self.btest('gl_ps_strides.c', reference='gl_ps_strides.png', args=['--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1'])
1383+
self.btest('gl_ps_strides.c', reference='gl_ps_strides.png', args=['--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1', '--use-preload-plugins'])
13841384

13851385
def test_gl_ps_worker(self):
13861386
shutil.copyfile(path_from_root('tests', 'screenshot.png'), os.path.join(self.get_dir(), 'screenshot.png'))
1387-
self.btest('gl_ps_worker.c', reference='gl_ps.png', args=['--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1'], reference_slack=1, also_proxied=True)
1387+
self.btest('gl_ps_worker.c', reference='gl_ps.png', args=['--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1', '--use-preload-plugins'], reference_slack=1, also_proxied=True)
13881388

13891389
def test_gl_renderers(self):
13901390
self.btest('gl_renderers.c', reference='gl_renderers.png', args=['-s', 'GL_UNSAFE_OPTS=0', '-s', 'LEGACY_GL_EMULATION=1'])
@@ -1506,7 +1506,7 @@ def test_sdl_create_rgb_surface_from(self):
15061506

15071507
def test_sdl_rotozoom(self):
15081508
shutil.copyfile(path_from_root('tests', 'screenshot.png'), os.path.join(self.get_dir(), 'screenshot.png'))
1509-
self.btest('sdl_rotozoom.c', reference='sdl_rotozoom.png', args=['--preload-file', 'screenshot.png'], reference_slack=3)
1509+
self.btest('sdl_rotozoom.c', reference='sdl_rotozoom.png', args=['--preload-file', 'screenshot.png', '--use-preload-plugins'], reference_slack=3)
15101510

15111511
def test_sdl_gfx_primitives(self):
15121512
self.btest('sdl_gfx_primitives.c', reference='sdl_gfx_primitives.png', reference_slack=1)
@@ -1545,7 +1545,7 @@ def test_sdl_free_screen(self):
15451545

15461546
def test_glbegin_points(self):
15471547
shutil.copyfile(path_from_root('tests', 'screenshot.png'), os.path.join(self.get_dir(), 'screenshot.png'))
1548-
self.btest('glbegin_points.c', reference='glbegin_points.png', args=['--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1'])
1548+
self.btest('glbegin_points.c', reference='glbegin_points.png', args=['--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1', '--use-preload-plugins'])
15491549

15501550
def test_s3tc(self):
15511551
shutil.copyfile(path_from_root('tests', 'screenshot.dds'), os.path.join(self.get_dir(), 'screenshot.dds'))
@@ -2094,7 +2094,7 @@ def test_sdl2_image(self):
20942094
('screenshot.jpg@/assets/screenshot.jpg', '/assets', 'screenshot.jpg')]:
20952095
Popen([
20962096
PYTHON, EMCC, os.path.join(self.get_dir(), 'sdl2_image.c'), '-o', 'page.html', '-O2', '--memory-init-file', str(mem),
2097-
'--preload-file', dest, '-DSCREENSHOT_DIRNAME="' + dirname + '"', '-DSCREENSHOT_BASENAME="' + basename + '"', '-s', 'USE_SDL=2', '-s', 'USE_SDL_IMAGE=2'
2097+
'--preload-file', dest, '-DSCREENSHOT_DIRNAME="' + dirname + '"', '-DSCREENSHOT_BASENAME="' + basename + '"', '-s', 'USE_SDL=2', '-s', 'USE_SDL_IMAGE=2', '--use-preload-plugins'
20982098
]).communicate()
20992099
self.run_browser('page.html', '', '/report_result?600')
21002100

@@ -2103,7 +2103,7 @@ def test_sdl2_image_jpeg(self):
21032103
open(os.path.join(self.get_dir(), 'sdl2_image_jpeg.c'), 'w').write(self.with_report_result(open(path_from_root('tests', 'sdl2_image.c')).read()))
21042104
Popen([
21052105
PYTHON, EMCC, os.path.join(self.get_dir(), 'sdl2_image_jpeg.c'), '-o', 'page.html',
2106-
'--preload-file', 'screenshot.jpeg', '-DSCREENSHOT_DIRNAME="/"', '-DSCREENSHOT_BASENAME="screenshot.jpeg"', '-s', 'USE_SDL=2', '-s', 'USE_SDL_IMAGE=2'
2106+
'--preload-file', 'screenshot.jpeg', '-DSCREENSHOT_DIRNAME="/"', '-DSCREENSHOT_BASENAME="screenshot.jpeg"', '-s', 'USE_SDL=2', '-s', 'USE_SDL_IMAGE=2', '--use-preload-plugins'
21072107
]).communicate()
21082108
self.run_browser('page.html', '', '/report_result?600')
21092109

@@ -2371,31 +2371,31 @@ def test_sdl2_gl_read(self):
23712371
def test_sdl2_fog_simple(self):
23722372
shutil.copyfile(path_from_root('tests', 'screenshot.png'), os.path.join(self.get_dir(), 'screenshot.png'))
23732373
self.btest('sdl2_fog_simple.c', reference='screenshot-fog-simple.png',
2374-
args=['-s', 'USE_SDL=2', '-s', 'USE_SDL_IMAGE=2','-O2', '--minify', '0', '--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1'],
2374+
args=['-s', 'USE_SDL=2', '-s', 'USE_SDL_IMAGE=2','-O2', '--minify', '0', '--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1', '--use-preload-plugins'],
23752375
message='You should see an image with fog.')
23762376

23772377
def test_sdl2_fog_negative(self):
23782378
shutil.copyfile(path_from_root('tests', 'screenshot.png'), os.path.join(self.get_dir(), 'screenshot.png'))
23792379
self.btest('sdl2_fog_negative.c', reference='screenshot-fog-negative.png',
2380-
args=['-s', 'USE_SDL=2', '-s', 'USE_SDL_IMAGE=2','--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1'],
2380+
args=['-s', 'USE_SDL=2', '-s', 'USE_SDL_IMAGE=2','--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1', '--use-preload-plugins'],
23812381
message='You should see an image with fog.')
23822382

23832383
def test_sdl2_fog_density(self):
23842384
shutil.copyfile(path_from_root('tests', 'screenshot.png'), os.path.join(self.get_dir(), 'screenshot.png'))
23852385
self.btest('sdl2_fog_density.c', reference='screenshot-fog-density.png',
2386-
args=['-s', 'USE_SDL=2', '-s', 'USE_SDL_IMAGE=2','--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1'],
2386+
args=['-s', 'USE_SDL=2', '-s', 'USE_SDL_IMAGE=2','--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1', '--use-preload-plugins'],
23872387
message='You should see an image with fog.')
23882388

23892389
def test_sdl2_fog_exp2(self):
23902390
shutil.copyfile(path_from_root('tests', 'screenshot.png'), os.path.join(self.get_dir(), 'screenshot.png'))
23912391
self.btest('sdl2_fog_exp2.c', reference='screenshot-fog-exp2.png',
2392-
args=['-s', 'USE_SDL=2', '-s', 'USE_SDL_IMAGE=2','--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1'],
2392+
args=['-s', 'USE_SDL=2', '-s', 'USE_SDL_IMAGE=2','--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1', '--use-preload-plugins'],
23932393
message='You should see an image with fog.')
23942394

23952395
def test_sdl2_fog_linear(self):
23962396
shutil.copyfile(path_from_root('tests', 'screenshot.png'), os.path.join(self.get_dir(), 'screenshot.png'))
23972397
self.btest('sdl2_fog_linear.c', reference='screenshot-fog-linear.png', reference_slack=1,
2398-
args=['-s', 'USE_SDL=2', '-s', 'USE_SDL_IMAGE=2','--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1'],
2398+
args=['-s', 'USE_SDL=2', '-s', 'USE_SDL_IMAGE=2','--preload-file', 'screenshot.png', '-s', 'LEGACY_GL_EMULATION=1', '--use-preload-plugins'],
23992399
message='You should see an image with fog.')
24002400

24012401
def test_sdl2_unwasteful(self):

0 commit comments

Comments
 (0)