aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-07-18 18:14:21 -0700
committerAlon Zakai <alonzakai@gmail.com>2012-07-18 18:14:21 -0700
commit076a9d247bde6cdba54065b8aaa9ba0400c9da71 (patch)
tree88e94d4fc107f23f88d7010626d00aea99360a00 /src
parent23f7aed49d983f693c26ed3dc980e4efbd7d40eb (diff)
add runDependency tracking and fix detected bugs
Diffstat (limited to 'src')
-rw-r--r--src/library.js15
-rw-r--r--src/library_browser.js4
-rw-r--r--src/preamble.js13
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;