aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xemcc23
-rwxr-xr-xtests/runner.py2
2 files changed, 18 insertions, 7 deletions
diff --git a/emcc b/emcc
index e23c4ca8..7987e2e6 100755
--- a/emcc
+++ b/emcc
@@ -381,6 +381,10 @@ class Compression:
def compress(filename):
execute(Compression.encoder, stdin=open(filename, 'rb'), stdout=open(Compression.compressed_name(filename), 'wb'))
+ @staticmethod
+ def worth_it(original, compressed):
+ return compressed < original - 1500 # save at least one TCP packet or so
+
try:
call = CXX if use_cxx else CC
@@ -813,12 +817,18 @@ try:
os.path.walk(file_['name'], add, file_['name'], )
data_files = filter(lambda file_: not os.path.isdir(file_['name']), data_files)
+ for file_ in data_files:
+ file_['net_name'] = file_['name']
+ file_['compressed'] = False
+
if Compression.on:
- # Compress each file
- # TODO: if compressed size is not significantly smaller, do not compress!
+ # Compress each file, if it is worth it
for file_ in data_files:
Compression.compress(file_['name'])
- file_['name'] = Compression.compressed_name(file_['name'])
+ if Compression.worth_it(os.stat(file_['name']).st_size,
+ os.stat(Compression.compressed_name(file_['name'])).st_size):
+ file_['net_name'] = Compression.compressed_name(file_['name'])
+ file_['compressed'] = True
# Set up folders
partial_dirs = []
@@ -845,7 +855,7 @@ try:
image = filename.endswith(IMAGE_SUFFIXES)
code += '''
var %(varname)s = new XMLHttpRequest();
- %(varname)s.open('GET', '%(filename)s', true);
+ %(varname)s.open('GET', '%(netname)s', true);
%(varname)s.responseType = 'arraybuffer';
%(varname)s.onload = function() {
var arrayBuffer = %(varname)s.response; // Note: not X.responseText
@@ -860,9 +870,10 @@ try:
''' % {
'varname': varname,
'filename': filename,
+ 'netname': file_['net_name'],
'dirname': os.path.dirname(filename),
- 'basename': os.path.basename(filename) if not Compression.on else os.path.basename(filename)[:-len(Compression.compressed_name(''))],
- 'decompress': '' if not Compression.on else 'byteArray = Module["decompress"](byteArray);',
+ 'basename': os.path.basename(filename),
+ 'decompress': '' if not file_['compressed'] else 'byteArray = Module["decompress"](byteArray);',
'finish': 'removeRunDependency();' if not image else '''var bb = new MozBlobBuilder();
bb.append(byteArray.buffer);
var b = bb.getBlob();
diff --git a/tests/runner.py b/tests/runner.py
index 3b0bde6b..b14151a4 100755
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -6342,7 +6342,7 @@ f.close()
Popen([EMCC, os.path.join(self.get_dir(), 'sdl_image.c'), '--preload-file', 'screenshot.jpg', '-o', 'page.html']).communicate()
self.run_browser('page.html', 'You should see |load me right before|.', '/report_result?600')
- def zzztest_emcc_sdl_image_compressed(self):
+ def test_emcc_sdl_image_compressed(self):
# load an image file, get pixel data
shutil.copyfile(path_from_root('tests', 'screenshot.jpg'), os.path.join(self.get_dir(), 'screenshot.jpg'))
open(os.path.join(self.get_dir(), 'sdl_image.c'), 'w').write(self.with_report_result(open(path_from_root('tests', 'sdl_image.c')).read()))