Currently, when a main-thread animation is waiting for its impl-thread counterpart to start animating, it still gets ticked and at each tick considers the normalized time (current time - start time) to be zero. That is, it pauses at the first keyframe. The problem is that if (current time - start time) > duration, then we consider the animation finished and remove it. This is invalid if the animation is waiting for a start time from the impl-thread: it hasn't really started at all. So in ::tickAnimations, we must not consider an animation finished if it is waiting for a synchronized start time.
Created attachment 138216 [details] Patch
Comment on attachment 138216 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=138216&action=review Nice. Might tweak the phrasing but LGTM. > Source/WebKit/chromium/tests/CCLayerAnimationControllerTest.cpp:193 > +// Tests animations that are waiting for a synchronized start time do not finish. DoNotFinishIfTheyWaitLongerToStartThanTheirDuration?
Created attachment 138217 [details] Patch (In reply to comment #2) > (From update of attachment 138216 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=138216&action=review > > Nice. Might tweak the phrasing but LGTM. > > > Source/WebKit/chromium/tests/CCLayerAnimationControllerTest.cpp:193 > > +// Tests animations that are waiting for a synchronized start time do not finish. > > DoNotFinishIfTheyWaitLongerToStartThanTheirDuration? Done. I think I may have broken some sort of record with this test name. :)
Confirmed this fixes the issue. Thanks!
Comment on attachment 138217 [details] Patch r=me
Comment on attachment 138217 [details] Patch Clearing flags on attachment: 138217 Committed r115202: <http://trac.webkit.org/changeset/115202>
All reviewed patches have been landed. Closing bug.