Title: [237939] trunk/LayoutTests
Revision
237939
Author
[email protected]
Date
2018-11-07 13:00:34 -0800 (Wed, 07 Nov 2018)

Log Message

IntersectionObserver GC-dependent tests are flaky
https://bugs.webkit.org/show_bug.cgi?id=191387

Reviewed by Chris Dumez.

Make these tests more robust by triggering GC repeatedly inside a setInterval(). Having only a single call to
GC is potentially flaky, since that call will early-out and return immediately if a GC is already underway.

* intersection-observer/root-element-deleted.html:
* intersection-observer/target-deleted.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (237938 => 237939)


--- trunk/LayoutTests/ChangeLog	2018-11-07 20:59:15 UTC (rev 237938)
+++ trunk/LayoutTests/ChangeLog	2018-11-07 21:00:34 UTC (rev 237939)
@@ -1,3 +1,16 @@
+2018-11-07  Ali Juma  <[email protected]>
+
+        IntersectionObserver GC-dependent tests are flaky
+        https://bugs.webkit.org/show_bug.cgi?id=191387
+
+        Reviewed by Chris Dumez.
+
+        Make these tests more robust by triggering GC repeatedly inside a setInterval(). Having only a single call to
+        GC is potentially flaky, since that call will early-out and return immediately if a GC is already underway.
+
+        * intersection-observer/root-element-deleted.html:
+        * intersection-observer/target-deleted.html:
+
 2018-11-07  Dan Bernstein  <[email protected]>
 
         Add a pseudoclass that matches img elements that are backed by an attachment

Modified: trunk/LayoutTests/intersection-observer/root-element-deleted.html (237938 => 237939)


--- trunk/LayoutTests/intersection-observer/root-element-deleted.html	2018-11-07 20:59:15 UTC (rev 237938)
+++ trunk/LayoutTests/intersection-observer/root-element-deleted.html	2018-11-07 21:00:34 UTC (rev 237939)
@@ -9,6 +9,19 @@
 </div>
 
 <script>
+    function observerShouldBeRemoved()
+    {
+        return new Promise(function(resolve) {
+            handle = setInterval(function() {
+                GCController.collect();
+                if (internals && internals.numberOfIntersectionObservers(document) == 0) {
+                    clearInterval(handle);
+                    resolve();
+                }
+            }, 10);
+        });
+    }
+
     async_test(function(t) {
         var root = document.getElementById('root');
         var observer = new IntersectionObserver(function() {}, { root: document.getElementById('root') });;
@@ -19,12 +32,12 @@
         root.parentNode.removeChild(root);
         root = null;
         target = null;
-        requestAnimationFrame(t.step_func_done(function() {
+        requestAnimationFrame(function() {
             observer.takeRecords();
-            GCController.collect();
-            assert_equals(observer.root, null, 'Observer has null root after root element is destroyed');
-            assert_equals(internals.numberOfIntersectionObservers(document), 0);
-        }));
+            observerShouldBeRemoved().then(t.step_func_done(function() {
+                assert_equals(observer.root, null, 'Observer has null root after root element is destroyed');
+            }));
+        });
     }, "IntersectionObserver doesn't keep unreachable root alive");
 </script>
 </body>

Modified: trunk/LayoutTests/intersection-observer/target-deleted.html (237938 => 237939)


--- trunk/LayoutTests/intersection-observer/target-deleted.html	2018-11-07 20:59:15 UTC (rev 237938)
+++ trunk/LayoutTests/intersection-observer/target-deleted.html	2018-11-07 21:00:34 UTC (rev 237939)
@@ -8,14 +8,26 @@
 <div id="target" style="width: 100px; height: 100px; background-color: green"></div>
 
 <script>
+    function observerShouldBeRemoved()
+    {
+        return new Promise(function(resolve) {
+            handle = setInterval(function() {
+                gc();
+                if (internals && internals.numberOfIntersectionObservers(document) == 0) {
+                    clearInterval(handle);
+                    resolve();
+                }
+            }, 10);
+        });
+    }
+
     async_test(function(t) {
         let observer = new IntersectionObserver(function(entries) {
             if (entries[0].isIntersecting) {
                 entries[0].target.remove();
-                requestAnimationFrame(t.step_func_done(function() {
-                    gc();
-                    assert_equals(internals.numberOfIntersectionObservers(document), 0);
-                }));
+                observerShouldBeRemoved().then(function() {
+                    t.done();
+                });
             }
         });
         observer.observe(document.getElementById("target"));
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to