[Web Animations] Make WPT test at timing-model/timelines/timelines.html pass reliably
authorgraouts@webkit.org <graouts@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 4 Jul 2018 07:58:30 +0000 (07:58 +0000)
committergraouts@webkit.org <graouts@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 4 Jul 2018 07:58:30 +0000 (07:58 +0000)
https://bugs.webkit.org/show_bug.cgi?id=186508
<rdar://problem/41000260>

Reviewed by Dean Jackson.

LayoutTests/imported/w3c:

Record WPT test progressions.

* web-platform-tests/web-animations/interfaces/Animation/finished-expected.txt:
* web-platform-tests/web-animations/timing-model/timelines/timelines-expected.txt:

Source/WebCore:

The remaining failing assertion in this test assumes that the ready promise for an animation is fired
prior to requestAnimationFrame callbacks being fired in the current event loop such that registering
the requestAnimationFrame() call within the ready promise has its callback fired with the same timeline
time. To ensure that is true, we perform a microtask checkpoint as soon as we're done running pending
tasks, which will resolve the ready promise for any play-pending animations.

* animation/DocumentTimeline.cpp:
(WebCore::DocumentTimeline::updateAnimations):

LayoutTests:

We're now passing this test reliably.

* TestExpectations:

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

LayoutTests/ChangeLog
LayoutTests/TestExpectations
LayoutTests/imported/w3c/ChangeLog
LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/finished-expected.txt
LayoutTests/imported/w3c/web-platform-tests/web-animations/timing-model/timelines/timelines-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/animation/DocumentTimeline.cpp

index 75b3025..57d39eb 100644 (file)
@@ -1,3 +1,15 @@
+2018-07-03  Antoine Quint  <graouts@apple.com>
+
+        [Web Animations] Make WPT test at timing-model/timelines/timelines.html pass reliably
+        https://bugs.webkit.org/show_bug.cgi?id=186508
+        <rdar://problem/41000260>
+
+        Reviewed by Dean Jackson.
+
+        We're now passing this test reliably.
+
+        * TestExpectations:
+
 2018-07-03  Ryosuke Niwa  <rniwa@webkit.org>
 
         Nullptr crash accessing Document in GenericEventQueue::dispatchOneEvent()
index 3ab6812..b908aa0 100644 (file)
@@ -1974,7 +1974,6 @@ webkit.org/b/177997 webgl/1.0.2/conformance/textures/copy-tex-image-2d-formats.h
 
 webkit.org/b/179069 imported/w3c/web-platform-tests/html/semantics/embedded-content/the-iframe-element/sandbox_032.htm [ Pass Failure ]
 
-webkit.org/b/179287 imported/w3c/web-platform-tests/web-animations/timing-model/timelines/timelines.html [ Pass Failure ]
 webkit.org/b/181116 imported/w3c/web-platform-tests/web-animations/interfaces/Animation/finished.html [ Pass Failure ]
 webkit.org/b/181120 imported/w3c/web-platform-tests/web-animations/interfaces/Animation/onfinish.html [ Pass Failure ]
 webkit.org/b/181121 imported/w3c/web-platform-tests/web-animations/timing-model/animations/updating-the-finished-state.html [ Pass Failure ]
index 715e480..3c4dad0 100644 (file)
@@ -1,3 +1,16 @@
+2018-07-03  Antoine Quint  <graouts@apple.com>
+
+        [Web Animations] Make WPT test at timing-model/timelines/timelines.html pass reliably
+        https://bugs.webkit.org/show_bug.cgi?id=186508
+        <rdar://problem/41000260>
+
+        Reviewed by Dean Jackson.
+
+        Record WPT test progressions.
+
+        * web-platform-tests/web-animations/interfaces/Animation/finished-expected.txt:
+        * web-platform-tests/web-animations/timing-model/timelines/timelines-expected.txt:
+
 2018-07-03  Chris Dumez  <cdumez@apple.com>
 
         Improve window.event compliance: Should not be set when target is in shadow tree
index e683fbe..ad8bee1 100644 (file)
@@ -8,7 +8,7 @@ PASS Finished promise does not resolve when pause-pending
 PASS The finished promise is fulfilled with its Animation 
 PASS finished promise is rejected when an animation is canceled by calling cancel() 
 PASS canceling an already-finished animation replaces the finished promise 
-FAIL Test finished promise changes for animation duration changes assert_not_equals: Finished promise should change after lengthening the duration causes the animation to become active got disallowed value object "[object Promise]"
+FAIL Test finished promise changes for animation duration changes assert_false: shortening of the animation duration should resolve the finished promise expected false got true
 PASS Test finished promise changes when playbackRate == 0 
 PASS Test finished promise resolves when reaching to the natural boundary. 
 PASS Test finished promise changes when a prior finished promise resolved and the animation falls out finished state 
index 551eee7..de4b2de 100644 (file)
@@ -2,5 +2,5 @@
 PASS Timeline time increases once per animation frame 
 PASS Timeline time increases once per animation frame in an iframe 
 PASS Timeline time should be the same for all RAF callbacks in an animation frame 
-FAIL Performs a microtask checkpoint after updating timelins assert_equals: There should be a microtask checkpoint expected 300 but got 233
+PASS Performs a microtask checkpoint after updating timelins 
 
index e729fb3..459dc6f 100644 (file)
@@ -1,3 +1,20 @@
+2018-07-03  Antoine Quint  <graouts@apple.com>
+
+        [Web Animations] Make WPT test at timing-model/timelines/timelines.html pass reliably
+        https://bugs.webkit.org/show_bug.cgi?id=186508
+        <rdar://problem/41000260>
+
+        Reviewed by Dean Jackson.
+
+        The remaining failing assertion in this test assumes that the ready promise for an animation is fired
+        prior to requestAnimationFrame callbacks being fired in the current event loop such that registering
+        the requestAnimationFrame() call within the ready promise has its callback fired with the same timeline
+        time. To ensure that is true, we perform a microtask checkpoint as soon as we're done running pending
+        tasks, which will resolve the ready promise for any play-pending animations.
+
+        * animation/DocumentTimeline.cpp:
+        (WebCore::DocumentTimeline::updateAnimations):
+
 2018-07-03  Ryosuke Niwa  <rniwa@webkit.org>
 
         Nullptr crash accessing Document in GenericEventQueue::dispatchOneEvent()
index 9619d94..0046c4d 100644 (file)
@@ -31,6 +31,7 @@
 #include "DeclarativeAnimation.h"
 #include "Document.h"
 #include "KeyframeEffect.h"
+#include "Microtasks.h"
 #include "Page.h"
 #include "RenderElement.h"
 
@@ -272,6 +273,10 @@ void DocumentTimeline::updateAnimations()
     for (const auto& animation : animations())
         animation->runPendingTasks();
 
+    // Perform a microtask checkpoint such that all promises that may have resolved while
+    // running pending tasks can fire right away.
+    MicrotaskQueue::mainThreadQueue().performMicrotaskCheckpoint();
+
     if (m_document && hasElementAnimations()) {
         for (const auto& elementToAnimationsMapItem : elementToAnimationsMap())
             elementToAnimationsMapItem.key->invalidateStyleAndLayerComposition();