Chromium Code Reviews| Index: third_party/WebKit/Source/platform/scroll/ScrollAnimatorCompositorCoordinator.cpp |
| diff --git a/third_party/WebKit/Source/platform/scroll/ScrollAnimatorCompositorCoordinator.cpp b/third_party/WebKit/Source/platform/scroll/ScrollAnimatorCompositorCoordinator.cpp |
| index 142b27e77d62f5646402360ceea8281f46b330ca..8edc1cbd74b89d5c9e85912a550e63e4dbddd4dd 100644 |
| --- a/third_party/WebKit/Source/platform/scroll/ScrollAnimatorCompositorCoordinator.cpp |
| +++ b/third_party/WebKit/Source/platform/scroll/ScrollAnimatorCompositorCoordinator.cpp |
| @@ -6,6 +6,7 @@ |
| #include "platform/RuntimeEnabledFeatures.h" |
| #include "platform/graphics/GraphicsLayer.h" |
| +#include "platform/scroll/MainThreadScrollingReason.h" |
| #include "platform/scroll/ScrollableArea.h" |
| #include "public/platform/Platform.h" |
| #include "public/platform/WebCompositorAnimationPlayer.h" |
| @@ -14,6 +15,11 @@ |
| namespace blink { |
| +WebLayer* toWebLayer(blink::GraphicsLayer* layer) |
| +{ |
| + return layer ? layer->platformLayer() : nullptr; |
| +} |
| + |
| ScrollAnimatorCompositorCoordinator::ScrollAnimatorCompositorCoordinator() |
| : m_compositorAnimationAttachedToLayerId(0) |
| , m_runState(RunState::Idle) |
| @@ -41,6 +47,26 @@ void ScrollAnimatorCompositorCoordinator::resetAnimationState() |
| m_runState = RunState::Idle; |
| m_compositorAnimationId = 0; |
| m_compositorAnimationGroupId = 0; |
| + |
| + // Remove the temporary main thread scrolling reason that was added while |
| + // main thread had scheduled an animation. |
| + removeMainThreadScrollingReason(); |
| +} |
| + |
| +void ScrollAnimatorCompositorCoordinator::addMainThreadScrollingReason() |
| +{ |
| + if (WebLayer* scrollLayer = toWebLayer(scrollableArea()->layerForScrolling())) { |
| + scrollLayer->addMainThreadScrollingReasons( |
| + MainThreadScrollingReason::kAnimatingScollOnMainThread); |
| + } |
| +} |
| + |
| +void ScrollAnimatorCompositorCoordinator::removeMainThreadScrollingReason() |
| +{ |
| + if (WebLayer* scrollLayer = toWebLayer(scrollableArea()->layerForScrolling())) { |
| + scrollLayer->clearMainThreadScrollingReasons( |
| + MainThreadScrollingReason::kAnimatingScollOnMainThread); |
| + } |
| } |
| bool ScrollAnimatorCompositorCoordinator::hasAnimationThatRequiresService() const |
| @@ -167,6 +193,8 @@ void ScrollAnimatorCompositorCoordinator::reattachCompositorPlayerIfNeeded( |
| scrollableArea()->layerForScrolling()->platformLayer()); |
| } |
| m_compositorAnimationAttachedToLayerId = compositorAnimationAttachedToLayerId; |
| + if (hasRunningAnimation()) |
| + addMainThreadScrollingReason(); |
|
ajuma
2016/02/04 20:08:40
Will this also affect input-driven smooth scroll (
ymalik
2016/02/04 21:53:20
You're right, this should not affect non*-input dr
|
| } |
| } |
| } |