blob: 51fe8b81fcd1cde61a8f52e4db4078bfb88f6077 [file] [log] [blame]
<svg id="svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" onload="load()">
<defs>
<polyline id="polyline" points="20,20 80,20 80,80 20,80" />
</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 createAnimatedPolylineInstance() {
var use = document.createElementNS("http://www.w3.org/2000/svg", "use");
use.setAttributeNS("http://www.w3.org/1999/xlink", "href", "#polyline");
var anim = document.createElementNS("http://www.w3.org/2000/svg", "animate");
anim.setAttribute("attributeType", "XML");
anim.setAttribute("attributeName", "points");
anim.setAttribute("from", "20,20 80,20 80,80 20,80");
anim.setAttribute("to", "10,10 90,10 90,90 10,90");
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 references to points and animatedPoints on the root instance.
points = document.getElementById("polyline").points;
animatedPoints = document.getElementById("polyline").animatedPoints;
for (var i = 0; i < 100; i++)
g.appendChild(createAnimatedPolylineInstance());
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>