[Webkit-unassigned] [Bug 244017] Tiled layer flicker when an animation ends

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Tue Aug 16 19:54:44 PDT 2022


https://bugs.webkit.org/show_bug.cgi?id=244017

Simon Fraser (smfr) <simon.fraser at apple.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |simon.fraser at apple.com

--- Comment #1 from Simon Fraser (smfr) <simon.fraser at apple.com> ---
While the animation is running, we adjust the tile coverage taking the animation motion into account (GraphicsLayer::adjustCoverageRectForMovement() etc). At some point, our KeyframeEffect animation code determines that the animation is complete, and in that same rendering update, we recompute the tile coverage assuming no animation. However, the Core Animation animation is still running in WindowServer, so the composited layer position continues to be affected by it (even though we’ve recomputed the tile coverage).

The animation is only removed from the CALayer in the next rendering update loop, one frame too late:

Page::updateRendering()
DocumentTimelinesController::updateAnimationsAndSendEvents for time 4.61s
AnimationEffect 0x4730b00c0 getBasicTiming - localTime 1482.00 activeAfterBoundaryTime 1500.00
KeyframeEffect 0x4730b00c0 getAnimatedStyle - progress 1.00
  blending transform from translateX(0px, 0px, 0px) to translateX(-100%, 0px, 0px) at 1.00 -> translate(-99.99%, 0px, 0px)
GraphicsLayer::adjustCoverageRectForMovement - previousVisibleRect (1119.29,0) width=1120.00 height=440, currentVisibleRect (1119.91,0) width=1120 height=440 expandedRect (1119.91,0) width=1121.24 height=440
TileGrid 0x4730216c0 (controller 0x4731500c0) revalidateTiles: bounds (0,0) width=2242 height=440 coverageRect(1119.91,0) width=1121.24 height=440 validation: []

Page::updateRendering()
AnimationEffect 0x4730b00c0 getBasicTiming - localTime 1532.00 activeAfterBoundaryTime 1500.00
KeyframeEffect 0x4730b00c0 getAnimatedStyle - progress unset
GraphicsLayer::adjustCoverageRectForMovement - previousVisibleRect (1119.91,0) width=1120 height=440, currentVisibleRect (5.40,0) width=1120 height=440 expandedRect (-2223.64,0) width=3349.04 height=440
TileGrid 0x4730216c0 (controller 0x4731500c0) revalidateTiles: bounds (0,0) width=2242 height=440 coverageRect(-2223.64,0) width=3349.04 height=440 validation: []

Page::updateRendering()
DocumentTimelinesController::updateAnimationsAndSendEvents for time 4.67s
DeclarativeAnimation::tick for element node 0x4a900d510 DIV 0x4a900d510 class='heroslide-set'
KeyframeEffect::invalidate on element node 0x4a900d510 DIV 0x4a900d510 class='heroslide-set'
GraphicsLayerCA 0x47303b370 id 91 removeAnimation keyframe-effect-2675c818-2317-40e3-9d74-32f9fc4036bd (is running 1)
animationDidStop <CAAnimationGroup: 0x6000007e0f20> finished 0
animationDidStop <CAAnimationGroup: 0x6000007e10c0> finished 0

-- 
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-unassigned/attachments/20220817/c425f714/attachment-0001.htm>


More information about the webkit-unassigned mailing list