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
|
} |
} |
} |