aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/library.js15
-rw-r--r--src/library_browser.js4
-rw-r--r--src/preamble.js13
-rw-r--r--tools/file_packager.py11
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)