svg/animations/smil-leak-*.svg tests are flaky
authorap@apple.com <ap@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 12 Sep 2013 21:02:39 +0000 (21:02 +0000)
committerap@apple.com <ap@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 12 Sep 2013 21:02:39 +0000 (21:02 +0000)
https://bugs.webkit.org/show_bug.cgi?id=114280

Reviewed by Tim Horton.

Moved garbage collection out of the function that touches nodes to be collected,
making sure that they are definitely not on the stack.

I could not reproduce locally, so this is a speculative fix.

* svg/animations/smil-leak-dynamically-added-element-instances.svg:
* svg/animations/smil-leak-element-instances-noBaseValRef.svg:
* svg/animations/smil-leak-element-instances.svg:
* svg/animations/smil-leak-elements.svg:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@155648 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/svg/animations/smil-leak-dynamically-added-element-instances.svg
LayoutTests/svg/animations/smil-leak-element-instances-noBaseValRef.svg
LayoutTests/svg/animations/smil-leak-element-instances.svg
LayoutTests/svg/animations/smil-leak-elements.svg

index 8f5505a..c9ab229 100644 (file)
@@ -1,5 +1,22 @@
 2013-09-12  Alexey Proskuryakov  <ap@apple.com>
 
+        svg/animations/smil-leak-*.svg tests are flaky
+        https://bugs.webkit.org/show_bug.cgi?id=114280
+
+        Reviewed by Tim Horton.
+
+        Moved garbage collection out of the function that touches nodes to be collected,
+        making sure that they are definitely not on the stack.
+
+        I could not reproduce locally, so this is a speculative fix.
+
+        * svg/animations/smil-leak-dynamically-added-element-instances.svg:
+        * svg/animations/smil-leak-element-instances-noBaseValRef.svg:
+        * svg/animations/smil-leak-element-instances.svg:
+        * svg/animations/smil-leak-elements.svg:
+
+2013-09-12  Alexey Proskuryakov  <ap@apple.com>
+
         Flaky Test: plugins/mouse-events.html
         https://bugs.webkit.org/show_bug.cgi?id=116665
 
index b5358f5..67b2b81 100644 (file)
@@ -32,37 +32,41 @@ function createAnimatedRectInstance() {
     return use;
 }
 
-function cleanup() {
-    while (g.hasChildNodes())
-        g.removeChild(g.lastChild);
-
+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();
 
-    var liveDelta = window.internals.numberOfLiveNodes() - originalLiveElements;
-    if (liveDelta == 0)
-        log("PASS");
-    else
-        log("FAIL: " + liveDelta + " extra live node(s)");
+    for (var i = 0; i < 50; i++)
+        g.appendChild(createAnimatedRectInstance());
 
-    testRunner.notifyDone();
+    setTimeout(addMoreInstances, 100);
 }
 
 function addMoreInstances() {
     for (var i = 0; i < 50; i++)
         g.appendChild(createAnimatedRectInstance());
     
-    setTimeout(cleanup, 0);
+    setTimeout(continueTest, 0);
 }
 
-function startTest() {
-    // Collect garbage before recording starting live node count, in case there are live elements from previous tests.
+function continueTest() {
+    while (g.hasChildNodes())
+        g.removeChild(g.lastChild);
+
+    setTimeout(finishTest, 0);
+}
+
+function finishTest() {
     GCController.collect();
-    originalLiveElements = window.internals.numberOfLiveNodes();
 
-    for (var i = 0; i < 50; i++)
-        g.appendChild(createAnimatedRectInstance());
+    var liveDelta = window.internals.numberOfLiveNodes() - originalLiveElements;
+    if (liveDelta == 0)
+        log("PASS");
+    else
+        log("FAIL: " + liveDelta + " extra live node(s)");
 
-    setTimeout(addMoreInstances, 100);
+    testRunner.notifyDone();
 }
 
 function load() {
index ebb86ac..bfa620a 100644 (file)
@@ -32,10 +32,25 @@ function createAnimatedRectInstance() {
     return use;
 }
 
-function cleanup() {
+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();
+
+    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);
+}
+
+function finishTest() {
     GCController.collect();
 
     var liveDelta = window.internals.numberOfLiveNodes() - originalLiveElements;
@@ -47,17 +62,6 @@ function cleanup() {
     testRunner.notifyDone();
 }
 
-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();
-
-    for (var i = 0; i < 100; i++)
-        g.appendChild(createAnimatedRectInstance());
-
-    setTimeout(cleanup, 0);
-}
-
 function load() {
     if (window.testRunner && window.GCController && window.internals) {
         testRunner.dumpAsText();
index abf0993..b81580b 100644 (file)
@@ -32,10 +32,28 @@ function createAnimatedRectInstance() {
     return use;
 }
 
-function cleanup() {
+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);
+}
+
+function finishTest() {
     GCController.collect();
 
     var liveDelta = window.internals.numberOfLiveNodes() - originalLiveElements;
@@ -47,20 +65,6 @@ function cleanup() {
     testRunner.notifyDone();
 }
 
-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(cleanup, 0);
-}
-
 function load() {
     if (window.testRunner && window.GCController && window.internals) {
         testRunner.dumpAsText();
index 1c1415d..f1b18cd 100644 (file)
@@ -30,10 +30,25 @@ function createAnimatedRect() {
     return rect;
 }
 
-function cleanup() {
+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();
+
+    for (var i = 0; i < 100; i++)
+        g.appendChild(createAnimatedRect());
+
+    setTimeout(continueTest, 0);
+}
+
+function continueTest() {
     while (g.hasChildNodes())
         g.removeChild(g.lastChild);
 
+    setTimeout(finishTest, 0);
+}
+
+function finishTest() {
     GCController.collect();
 
     var liveDelta = window.internals.numberOfLiveNodes() - originalLiveElements;
@@ -45,17 +60,6 @@ function cleanup() {
     testRunner.notifyDone();
 }
 
-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();
-
-    for (var i = 0; i < 100; i++)
-        g.appendChild(createAnimatedRect());
-
-    setTimeout(cleanup, 0);
-}
-
 function load() {
     if (window.testRunner && window.GCController && window.internals) {
         testRunner.dumpAsText();