Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: c409399155163c223f7bb1bca5d54e71a8724b99 https://github.com/WebKit/WebKit/commit/c409399155163c223f7bb1bca5d54e71a8724b99 Author: Antoine Quint <grao...@webkit.org> Date: 2024-02-22 (Thu, 22 Feb 2024)
Changed paths: M Source/WebCore/animation/KeyframeEffectStack.cpp M Source/WebCore/animation/KeyframeEffectStack.h M Source/WebCore/rendering/RenderBoxModelObject.cpp M Source/WebCore/rendering/RenderLayerBacking.cpp M Source/WebCore/rendering/RenderLayerCompositor.cpp M Source/WebCore/style/Styleable.cpp M Source/WebCore/style/Styleable.h Log Message: ----------- [threaded-animation-resolution] webanimations/transform-accelerated-animation-finishes-before-removal.html is a failure https://bugs.webkit.org/show_bug.cgi?id=269278 rdar://122856408 Reviewed by Dean Jackson. We need to ensure keyframe effects that are accelerated using threaded animation resolution cause the target element to remain on a layer until the effect has completed. In the case of threaded animation resolution, because accelerated effects run in the UIProcess, we cannot simply rely on whether the keyframe effect stack has a running effect indicating it is accelerated, because it will no longer be "running" as soon as timing in the WebProcess resolves to such a state. What we want is to ensure the target element remains on a layer until after that state has been propagated to the UIProcess. To do so, we now set a list of all accelerated effects on the `KeyframeEffectStack` when we compute the latest accelerated effect stack in RenderLayerBacking::updateAcceleratedEffectsAndBaseValues(). Then the keyframe effect stack can be queried for the presence of at least one accelerated effect using `KeyframeEffectStack::hasAcceleratedEffects()`. We call this new function in two spots: 1. `RenderLayerCompositor::requiresCompositingForAnimation()` 2. `Styleable::hasRunningAcceleratedAnimations()` The latter was formerly called `Styleable::runningAnimationsAreAllAccelerated()` which, while named accurately, was not doing what was required, which was to identify whether at least one animation was being run with acceleration. This method is called under `RenderBox::requiresLayer()` and `RenderInline::requiresLayer()`. This addresses the test regression with threaded animation resolution enabled. * Source/WebCore/animation/KeyframeEffectStack.cpp: (WebCore::KeyframeEffectStack::hasAcceleratedEffects const): * Source/WebCore/animation/KeyframeEffectStack.h: (WebCore::KeyframeEffectStack::setAcceleratedEffects): * Source/WebCore/rendering/RenderBoxModelObject.cpp: (WebCore::RenderBoxModelObject::hasRunningAcceleratedAnimations const): * Source/WebCore/rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::updateAcceleratedEffectsAndBaseValues): * Source/WebCore/rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::requiresCompositingForAnimation const): * Source/WebCore/style/Styleable.cpp: (WebCore::Styleable::hasRunningAcceleratedAnimations const): (WebCore::Styleable::runningAnimationsAreAllAccelerated const): Deleted. * Source/WebCore/style/Styleable.h: Canonical link: https://commits.webkit.org/275178@main To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes