зеркало из 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 elements = [];
|
||||
|
||||
function loadedData(event) {
|
||||
parent.ok(elements.indexOf(event.target) == -1, "Element already loaded: " + event.target.currentSrc);
|
||||
|
||||
elements.push(event.target);
|
||||
|
||||
function checkAllLoaded() {
|
||||
--loadsWaiting;
|
||||
parent.ok(true, "Loaded " + event.target.currentSrc);
|
||||
if (loadsWaiting == 0) {
|
||||
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) {
|
||||
var test = parent.gSmallTests[i];
|
||||
var elemType = /^audio/.test(test.type) ? "audio" : "video";
|
||||
// Associate these elements with the subframe's document
|
||||
var e = document.createElement(elemType);
|
||||
e.preload = "auto";
|
||||
e.preload = "metadata";
|
||||
if (e.canPlayType(test.type)) {
|
||||
e.src = test.name;
|
||||
e.addEventListener("loadeddata", loadedData, false);
|
||||
e._name = test.name;
|
||||
e.onloadeddata = loadedData;
|
||||
e.onerror = error;
|
||||
e.load();
|
||||
++loadsWaiting;
|
||||
parent.info("Loading " + e._name);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -13,28 +13,27 @@
|
|||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
var testsWaiting;
|
||||
var elements;
|
||||
|
||||
function didPlay(event) {
|
||||
ok(true, "Element ended: " + event.target.currentSrc);
|
||||
|
||||
removeNodeAndSource(event.target);
|
||||
|
||||
--testsWaiting;
|
||||
if (testsWaiting == 0) {
|
||||
function playElement(e) {
|
||||
// All elements played out, finish the test case.
|
||||
if (!e) {
|
||||
SimpleTest.finish();
|
||||
}
|
||||
}
|
||||
|
||||
function reviveElements() {
|
||||
// reactivate the elements by moving them to our document
|
||||
for (var i = 0; i < elements.length; ++i) {
|
||||
document.body.appendChild(elements[i]);
|
||||
elements[i].addEventListener("ended", didPlay, false);
|
||||
return;
|
||||
}
|
||||
|
||||
testsWaiting = elements.length;
|
||||
e.play();
|
||||
info("Element play: " + e._name);
|
||||
var reviveElement = function() {
|
||||
document.body.appendChild(e);
|
||||
e.onended = function() {
|
||||
info("Element ended: " + e._name);
|
||||
removeNodeAndSource(e);
|
||||
// Play next element.
|
||||
playElement(elements.pop());
|
||||
}
|
||||
}
|
||||
setTimeout(reviveElement, 2000);
|
||||
}
|
||||
|
||||
function loadedAll(elementList) {
|
||||
|
@ -43,12 +42,8 @@ function loadedAll(elementList) {
|
|||
// Blow away the subframe
|
||||
document.body.removeChild(document.getElementById("frame"));
|
||||
|
||||
// Start the elements playing.
|
||||
for (var i = 0; i < elements.length; ++i) {
|
||||
elements[i].play();
|
||||
}
|
||||
|
||||
setTimeout(reviveElements, 2000);
|
||||
// Play elements one by one to avoid hitting bug 847903 on MacOSX.
|
||||
playElement(elements.pop());
|
||||
}
|
||||
</script>
|
||||
</pre>
|
||||
|
|
Загрузка…
Ссылка в новой задаче