| 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 a7e33e2b07e5dae2e95f73073ed3e5cb446dce19..294fcbeee926d2f6e577430edac2f6cdd08a84fd 100644
|
| --- a/third_party/WebKit/Source/platform/scroll/ScrollAnimatorCompositorCoordinator.cpp
|
| +++ b/third_party/WebKit/Source/platform/scroll/ScrollAnimatorCompositorCoordinator.cpp
|
| @@ -60,6 +60,7 @@ bool ScrollAnimatorCompositorCoordinator::hasAnimationThatRequiresService() cons
|
| case RunState::WaitingToSendToCompositor:
|
| case RunState::RunningOnMainThread:
|
| case RunState::RunningOnCompositorButNeedsUpdate:
|
| + case RunState::RunningOnCompositorButNeedsTakeover:
|
| case RunState::WaitingToCancelOnCompositor:
|
| return true;
|
| }
|
| @@ -96,6 +97,7 @@ void ScrollAnimatorCompositorCoordinator::cancelAnimation()
|
| case RunState::WaitingToCancelOnCompositor:
|
| case RunState::PostAnimationCleanup:
|
| break;
|
| + case RunState::RunningOnCompositorButNeedsTakeover:
|
| case RunState::WaitingToSendToCompositor:
|
| if (m_compositorAnimationId) {
|
| // We still have a previous animation running on the compositor.
|
| @@ -116,6 +118,30 @@ void ScrollAnimatorCompositorCoordinator::cancelAnimation()
|
| }
|
| }
|
|
|
| +void ScrollAnimatorCompositorCoordinator::takeoverCompositorAnimation()
|
| +{
|
| + switch (m_runState) {
|
| + case RunState::Idle:
|
| + case RunState::WaitingToCancelOnCompositor:
|
| + case RunState::PostAnimationCleanup:
|
| + case RunState::RunningOnCompositorButNeedsTakeover:
|
| + case RunState::WaitingToSendToCompositor:
|
| + case RunState::RunningOnMainThread:
|
| + break;
|
| + case RunState::RunningOnCompositorButNeedsUpdate:
|
| + case RunState::RunningOnCompositor:
|
| + // We call abortAnimation that makes changes to the animation running on
|
| + // the compositor. Thus, this function should only be called when in
|
| + // CompositingClean state.
|
| + abortAnimation();
|
| +
|
| + m_runState = RunState::RunningOnCompositorButNeedsTakeover;
|
| +
|
| + // Get serviced the next time compositor updates are allowed.
|
| + scrollableArea()->registerForAnimation();
|
| + }
|
| +}
|
| +
|
| void ScrollAnimatorCompositorCoordinator::compositorAnimationFinished(
|
| int groupId)
|
| {
|
| @@ -135,6 +161,7 @@ void ScrollAnimatorCompositorCoordinator::compositorAnimationFinished(
|
| break;
|
| case RunState::RunningOnCompositor:
|
| case RunState::RunningOnCompositorButNeedsUpdate:
|
| + case RunState::RunningOnCompositorButNeedsTakeover:
|
| case RunState::WaitingToCancelOnCompositor:
|
| m_runState = RunState::PostAnimationCleanup;
|
| // Get serviced the next time compositor updates are allowed.
|
|
|