diff options
-rw-r--r-- | src/library.js | 15 | ||||
-rw-r--r-- | src/library_browser.js | 4 | ||||
-rw-r--r-- | src/preamble.js | 13 | ||||
-rw-r--r-- | tools/file_packager.py | 11 |
4 files changed, 27 insertions, 16 deletions
diff --git a/src/library.js b/src/library.js index 8bee4521..a3628179 100644 --- a/src/library.js +++ b/src/library.js @@ -313,8 +313,8 @@ LibraryManager.library = { ctx.drawImage(img, 0, 0); Module["preloadedImages"][fullname] = canvas; Browser.URLObject.revokeObjectURL(url); - removeRunDependency(); if (onload) onload(); + removeRunDependency('cp ' + fullname); }; img.onerror = function(event) { console.log('Image ' + url + ' could not be decoded'); @@ -331,14 +331,16 @@ LibraryManager.library = { audio['oncanplaythrough'] = null; Module["preloadedAudios"][fullname] = audio; if (!audio.removedDependency) { - removeRunDependency(); + if (onload) onload(); + removeRunDependency('cp ' + fullname); audio.removedDependency = true; } }; audio.onerror = function(event) { if (!audio.removedDependency) { console.log('Audio ' + url + ' could not be decoded or timed out trying to decode'); - removeRunDependency(); // keep calm and carry on + if (onerror) onerror(); + removeRunDependency('cp ' + fullname); // keep calm and carry on audio.removedDependency = true; } }; @@ -346,14 +348,15 @@ LibraryManager.library = { audio.src = url; } else { Module["preloadedAudios"][fullname] = new Audio(); // empty shim - removeRunDependency(); + if (onerror) onerror(); + removeRunDependency('cp ' + fullname); } } else { if (onload) onload(); - removeRunDependency(); + removeRunDependency('cp ' + fullname); } } - addRunDependency(); + addRunDependency('cp ' + fullname); if (typeof url == 'string') { Browser.asyncLoad(url, function(byteArray) { finish(byteArray); diff --git a/src/library_browser.js b/src/library_browser.js index a98f4089..5461e663 100644 --- a/src/library_browser.js +++ b/src/library_browser.js @@ -190,7 +190,7 @@ mergeInto(LibraryManager.library, { Browser.xhrLoad(url, function(arrayBuffer) { assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).'); onload(new Uint8Array(arrayBuffer)); - removeRunDependency(); + removeRunDependency('al ' + url); }, function(event) { if (onerror) { onerror(); @@ -198,7 +198,7 @@ mergeInto(LibraryManager.library, { throw 'Loading data file "' + url + '" failed.'; } }); - addRunDependency(); + addRunDependency('al ' + url); }, isImageFile: function(name) { diff --git a/src/preamble.js b/src/preamble.js index 21b09985..7abe0db8 100644 --- a/src/preamble.js +++ b/src/preamble.js @@ -793,19 +793,28 @@ var STRING_TABLE = []; // it happens right before run - run will be postponed until // the dependencies are met. var runDependencies = 0; +var runDependencyTracking = {}; var calledRun = false; -function addRunDependency() { +function addRunDependency(id) { runDependencies++; if (Module['monitorRunDependencies']) { Module['monitorRunDependencies'](runDependencies); } + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + } } Module['addRunDependency'] = addRunDependency; -function removeRunDependency() { +function removeRunDependency(id) { runDependencies--; if (Module['monitorRunDependencies']) { Module['monitorRunDependencies'](runDependencies); } + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } if (runDependencies == 0 && !calledRun) run(); } Module['removeRunDependency'] = removeRunDependency; diff --git a/tools/file_packager.py b/tools/file_packager.py index 996b544b..bb03667b 100644 --- a/tools/file_packager.py +++ b/tools/file_packager.py @@ -230,7 +230,7 @@ for file_ in data_files: dds = crunch and filename.endswith(CRUNCH_INPUT_SUFFIX) prepare = '' - finish = "Module['removeRunDependency']();\n" + finish = "Module['removeRunDependency']('fp %s');\n" % filename if dds: # decompress crunch format into dds @@ -242,8 +242,7 @@ for file_ in data_files: byteArray.set(ddsData, %(dds_header_size)d); ''' % { 'filename': filename, 'dds_header_size': DDS_HEADER_SIZE } - finish = ''' - Module['removeRunDependency'](); + finish += ''' }); ''' @@ -260,7 +259,7 @@ for file_ in data_files: %(finish)s }); }; - Module['addRunDependency'](); + Module['addRunDependency']('fp %(filename)s'); %(varname)s.send(null); ''' % { 'request': 'DataRequest', # In the past we also supported XHRs here @@ -284,7 +283,7 @@ if has_preloaded: curr.response = byteArray.subarray(%d,%d); curr.onload(); ''' % (file_['name'], file_['data_start'], file_['data_end']) - use_data += " Module['removeRunDependency']();\n" + use_data += " Module['removeRunDependency']('datafile');\n" if Compression.on: use_data = ''' @@ -305,7 +304,7 @@ if has_preloaded: var curr; %s }; - Module['addRunDependency'](); + Module['addRunDependency']('datafile'); dataFile.send(null); if (Module['setStatus']) Module['setStatus']('Downloading...'); ''' % (Compression.compressed_name(data_target) if Compression.on else data_target, use_data) |