diff options
-rwxr-xr-x | emcc | 23 | ||||
-rwxr-xr-x | tests/runner.py | 2 |
2 files changed, 18 insertions, 7 deletions
@@ -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())) |