зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1059265 - reduce number of concurrent playback and active cubeb streams to avoid hitting bug 847903.
This commit is contained in:
Родитель
566ebe2786
Коммит
a2070ed137
|
@ -5,29 +5,45 @@
|
||||||
var loadsWaiting = 0;
|
var loadsWaiting = 0;
|
||||||
var elements = [];
|
var elements = [];
|
||||||
|
|
||||||
function loadedData(event) {
|
function checkAllLoaded() {
|
||||||
parent.ok(elements.indexOf(event.target) == -1, "Element already loaded: " + event.target.currentSrc);
|
|
||||||
|
|
||||||
elements.push(event.target);
|
|
||||||
|
|
||||||
--loadsWaiting;
|
--loadsWaiting;
|
||||||
parent.ok(true, "Loaded " + event.target.currentSrc);
|
|
||||||
if (loadsWaiting == 0) {
|
if (loadsWaiting == 0) {
|
||||||
parent.loadedAll(elements);
|
parent.loadedAll(elements);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function loadedData(event) {
|
||||||
|
var e = event.target;
|
||||||
|
parent.ok(elements.indexOf(e) == -1, "Element already loaded: " + e._name);
|
||||||
|
parent.info("Loaded " + e._name);
|
||||||
|
elements.push(e);
|
||||||
|
// Reset "onerror" handler to avoid triggering another error in removeNodeAndSource().
|
||||||
|
e.onerror = null;
|
||||||
|
checkAllLoaded();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function error(event) {
|
||||||
|
var e = event.target;
|
||||||
|
parent.info("Error " + e._name);
|
||||||
|
// Don't wait for the element encounting errors.
|
||||||
|
checkAllLoaded();
|
||||||
|
}
|
||||||
|
|
||||||
for (var i = 0; i < parent.gSmallTests.length; ++i) {
|
for (var i = 0; i < parent.gSmallTests.length; ++i) {
|
||||||
var test = parent.gSmallTests[i];
|
var test = parent.gSmallTests[i];
|
||||||
var elemType = /^audio/.test(test.type) ? "audio" : "video";
|
var elemType = /^audio/.test(test.type) ? "audio" : "video";
|
||||||
// Associate these elements with the subframe's document
|
// Associate these elements with the subframe's document
|
||||||
var e = document.createElement(elemType);
|
var e = document.createElement(elemType);
|
||||||
e.preload = "auto";
|
e.preload = "metadata";
|
||||||
if (e.canPlayType(test.type)) {
|
if (e.canPlayType(test.type)) {
|
||||||
e.src = test.name;
|
e.src = test.name;
|
||||||
e.addEventListener("loadeddata", loadedData, false);
|
e._name = test.name;
|
||||||
|
e.onloadeddata = loadedData;
|
||||||
|
e.onerror = error;
|
||||||
e.load();
|
e.load();
|
||||||
++loadsWaiting;
|
++loadsWaiting;
|
||||||
|
parent.info("Loading " + e._name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,28 +13,27 @@
|
||||||
<pre id="test">
|
<pre id="test">
|
||||||
<script class="testbody" type="text/javascript">
|
<script class="testbody" type="text/javascript">
|
||||||
|
|
||||||
var testsWaiting;
|
|
||||||
var elements;
|
var elements;
|
||||||
|
|
||||||
function didPlay(event) {
|
function playElement(e) {
|
||||||
ok(true, "Element ended: " + event.target.currentSrc);
|
// All elements played out, finish the test case.
|
||||||
|
if (!e) {
|
||||||
removeNodeAndSource(event.target);
|
|
||||||
|
|
||||||
--testsWaiting;
|
|
||||||
if (testsWaiting == 0) {
|
|
||||||
SimpleTest.finish();
|
SimpleTest.finish();
|
||||||
}
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function reviveElements() {
|
e.play();
|
||||||
// reactivate the elements by moving them to our document
|
info("Element play: " + e._name);
|
||||||
for (var i = 0; i < elements.length; ++i) {
|
var reviveElement = function() {
|
||||||
document.body.appendChild(elements[i]);
|
document.body.appendChild(e);
|
||||||
elements[i].addEventListener("ended", didPlay, false);
|
e.onended = function() {
|
||||||
|
info("Element ended: " + e._name);
|
||||||
|
removeNodeAndSource(e);
|
||||||
|
// Play next element.
|
||||||
|
playElement(elements.pop());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
testsWaiting = elements.length;
|
setTimeout(reviveElement, 2000);
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadedAll(elementList) {
|
function loadedAll(elementList) {
|
||||||
|
@ -43,12 +42,8 @@ function loadedAll(elementList) {
|
||||||
// Blow away the subframe
|
// Blow away the subframe
|
||||||
document.body.removeChild(document.getElementById("frame"));
|
document.body.removeChild(document.getElementById("frame"));
|
||||||
|
|
||||||
// Start the elements playing.
|
// Play elements one by one to avoid hitting bug 847903 on MacOSX.
|
||||||
for (var i = 0; i < elements.length; ++i) {
|
playElement(elements.pop());
|
||||||
elements[i].play();
|
|
||||||
}
|
|
||||||
|
|
||||||
setTimeout(reviveElements, 2000);
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
</pre>
|
</pre>
|
||||||
|
|
Загрузка…
Ссылка в новой задаче