Layout Test svg/dom/animated-tearoff-list-remove-target.html is a flaky timeout
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 12 Jun 2018 00:11:02 +0000 (00:11 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 12 Jun 2018 00:11:02 +0000 (00:11 +0000)
https://bugs.webkit.org/show_bug.cgi?id=185698
<rdar://problem/40341200>

Patch by Said Abou-Hallawa <sabouhallawa@apple.com> on 2018-06-11
Reviewed by Daniel Bates.

The test is flaky because we get the animVal.getItem(0) of the 'x' attribute
from the target element without initializing this attribute with a base value.

The test assumes the animator would set the animVal of the 'x' attribute
from the 'from' attribute of the <animate> element before animVal.getItem(0)
is executed. But this may not always happen. Therefore the test will get
the 'IndexSizeError' exception and it will time out.

The fix is:
-- Initialize the attribute of the target element by a base value.
-- Use requestAnimationFrame() instead of using setTimeout() to make the
   test deterministic.
-- Allow the animation to advance one more step after kicking off the GC
   to ensure the variable 'animItem' is detached from animVal.getItem(0).

* svg/dom/animated-tearoff-list-remove-target.html:

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

LayoutTests/ChangeLog
LayoutTests/svg/dom/animated-tearoff-list-remove-target.html

index 2427f68..f1501e6 100644 (file)
@@ -1,3 +1,28 @@
+2018-06-11  Said Abou-Hallawa  <sabouhallawa@apple.com>
+
+        Layout Test svg/dom/animated-tearoff-list-remove-target.html is a flaky timeout
+        https://bugs.webkit.org/show_bug.cgi?id=185698
+        <rdar://problem/40341200>
+
+        Reviewed by Daniel Bates.
+
+        The test is flaky because we get the animVal.getItem(0) of the 'x' attribute
+        from the target element without initializing this attribute with a base value.
+
+        The test assumes the animator would set the animVal of the 'x' attribute
+        from the 'from' attribute of the <animate> element before animVal.getItem(0)
+        is executed. But this may not always happen. Therefore the test will get 
+        the 'IndexSizeError' exception and it will time out.
+
+        The fix is:
+        -- Initialize the attribute of the target element by a base value.
+        -- Use requestAnimationFrame() instead of using setTimeout() to make the
+           test deterministic.
+        -- Allow the animation to advance one more step after kicking off the GC
+           to ensure the variable 'animItem' is detached from animVal.getItem(0).
+
+        * svg/dom/animated-tearoff-list-remove-target.html:
+
 2018-06-11  Jer Noble  <jer.noble@apple.com>
 
         Unreviewed gardening; add a late endTest(), in case none of the other events fire in time.
index 782de7e..b80513c 100644 (file)
@@ -3,10 +3,10 @@
     <div>Removing the target of an animate element should detach the wrappers of the attributes from their animated properties.</div>
     <svg>
         <text x="15" y="40">
-            <tspan id="first-tspan">First tspan.</tspan> 
+            <tspan id="first-tspan" x="0">First tspan.</tspan> 
         </text>
         <text x="15" y="60">
-            <tspan id="second-tspan">Second tspan</tspan> 
+            <tspan id="second-tspan" x="0">Second tspan</tspan> 
         </text>
         <animate id="animate" xlink:href="#first-tspan" attributeType="XML" attributeName="x" from="0" to="100" dur="10s" repeatCount="indefinite"/>
     </svg>
@@ -26,7 +26,7 @@
                 testRunner.waitUntilDone();
             }
 
-            setTimeout(() => {
+            window.requestAnimationFrame(() => {
                 // The target of the <animate> element is the "first-tspan".
                 var tspanElement = document.getElementById("first-tspan");
 
                 // By now animItem should be detached from the animated animList and has its own copy
                 // of an SVGLength. animItem should not be affected if garbage collection is forced.
                 gc();
-                if (animItem.valueAsString == "0") {
-                    document.querySelector("div").innerHTML += "<br><br>PASS."
-                    document.querySelector("svg").remove();
-                }
+                window.requestAnimationFrame(() => {
+                    if (animItem.valueAsString == "0") {
+                        document.querySelector("div").innerHTML += "<br><br>PASS."
+                        document.querySelector("svg").remove();
+                    }
 
-                if (window.testRunner)
-                    testRunner.notifyDone();
-            }, 0);
+                    if (window.testRunner)
+                        testRunner.notifyDone();
+                });
+            });
         })();
     </script>
 </body>