diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-07-18 18:14:21 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-07-18 18:14:21 -0700 |
commit | 076a9d247bde6cdba54065b8aaa9ba0400c9da71 (patch) | |
tree | 88e94d4fc107f23f88d7010626d00aea99360a00 /src | |
parent | 23f7aed49d983f693c26ed3dc980e4efbd7d40eb (diff) |
add runDependency tracking and fix detected bugs
Diffstat (limited to 'src')
-rw-r--r-- | src/library.js | 15 | ||||
-rw-r--r-- | src/library_browser.js | 4 | ||||
-rw-r--r-- | src/preamble.js | 13 |
3 files changed, 22 insertions, 10 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; |