87 lines
2.3 KiB
XML
87 lines
2.3 KiB
XML
<svg id="svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" onload="load()">
|
|
<defs>
|
|
<rect id="rect" width="100" height="100" />
|
|
</defs>
|
|
<g id="g"/>
|
|
<text x="50" y="50" id="log"/>
|
|
<script id="script">
|
|
<![CDATA[
|
|
|
|
var g = document.getElementById("g");
|
|
|
|
function log(message) {
|
|
var logDiv = document.getElementById('log');
|
|
logDiv.appendChild(document.createTextNode(message));
|
|
}
|
|
|
|
function createAnimatedRectInstance() {
|
|
var use = document.createElementNS("http://www.w3.org/2000/svg", "use");
|
|
use.setAttributeNS("http://www.w3.org/1999/xlink", "href", "#rect");
|
|
|
|
var anim = document.createElementNS("http://www.w3.org/2000/svg", "animate");
|
|
anim.setAttribute("attributeType", "XML");
|
|
anim.setAttribute("attributeName", "x");
|
|
anim.setAttribute("from", "100");
|
|
anim.setAttribute("to", "0");
|
|
anim.setAttribute("begin", "0s");
|
|
anim.setAttribute("dur", "10.0s");
|
|
anim.setAttribute("repeatCount", 1);
|
|
|
|
use.appendChild(anim);
|
|
|
|
return use;
|
|
}
|
|
|
|
function startTest() {
|
|
// Collect garbage before recording starting live node count, in case there are live elements from previous tests.
|
|
GCController.collect();
|
|
originalLiveElements = window.internals.numberOfLiveNodes();
|
|
|
|
// Hold a reference to rect.x.baseVal on the root instance.
|
|
xBaseVal = document.getElementById("rect").x.baseVal;
|
|
|
|
for (var i = 0; i < 100; i++)
|
|
g.appendChild(createAnimatedRectInstance());
|
|
|
|
setTimeout(continueTest, 0);
|
|
}
|
|
|
|
function continueTest() {
|
|
while (g.hasChildNodes())
|
|
g.removeChild(g.lastChild);
|
|
|
|
setTimeout(finishTest, 0);
|
|
}
|
|
|
|
var attemptsToFinish = 5;
|
|
|
|
function finishTest() {
|
|
GCController.collect();
|
|
|
|
var liveDelta = window.internals.numberOfLiveNodes() - originalLiveElements;
|
|
if (liveDelta == 0)
|
|
log("PASS");
|
|
else if (--attemptsToFinish) {
|
|
setTimeout(finishTest, 100);
|
|
return;
|
|
} else
|
|
log("FAIL: " + liveDelta + " extra live node(s)");
|
|
|
|
testRunner.notifyDone();
|
|
}
|
|
|
|
function load() {
|
|
if (window.testRunner && window.GCController && window.internals) {
|
|
testRunner.dumpAsText();
|
|
testRunner.waitUntilDone();
|
|
} else {
|
|
log("This test only works when run with the testRunner, GCController, and internals available.");
|
|
return;
|
|
}
|
|
|
|
setTimeout(startTest, 0);
|
|
}
|
|
]]>
|
|
</script>
|
|
</svg>
|