| Index: third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp
|
| diff --git a/third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp b/third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp
|
| index ef7a5d0f7b7b061d3385d9ac59b56a34564fd148..1f24fca4ce78ee500c163adfd50963bd42e307fe 100644
|
| --- a/third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp
|
| +++ b/third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp
|
| @@ -186,8 +186,14 @@ bool ScrollAnimator::willAnimateToOffset(const FloatPoint& targetPos)
|
| m_targetOffset = targetPos;
|
| m_startTime = m_timeFunction();
|
|
|
| - if (registerAndScheduleAnimation())
|
| - m_runState = RunState::WaitingToSendToCompositor;
|
| + if (registerAndScheduleAnimation()) {
|
| + if (m_scrollableArea->shouldScrollOnMainThread()) {
|
| + createAnimationCurve();
|
| + m_runState = RunState::RunningOnMainThread;
|
| + } else {
|
| + m_runState = RunState::WaitingToSendToCompositor;
|
| + }
|
| + }
|
|
|
| return true;
|
| }
|
| @@ -287,9 +293,28 @@ bool ScrollAnimator::sendAnimationToCompositor()
|
| return sentToCompositor;
|
| }
|
|
|
| +void ScrollAnimator::createAnimationCurve()
|
| +{
|
| + DCHECK(!m_animationCurve);
|
| + m_animationCurve = adoptPtr(CompositorFactory::current().createScrollOffsetAnimationCurve(
|
| + compositorOffsetFromBlinkOffset(m_targetOffset),
|
| + m_lastGranularity == ScrollByPixel ?
|
| + CompositorScrollOffsetAnimationCurve::ScrollDurationInverseDelta :
|
| + CompositorScrollOffsetAnimationCurve::ScrollDurationConstant));
|
| + m_animationCurve->setInitialValue(compositorOffsetFromBlinkOffset(currentPosition()));
|
| +}
|
| +
|
| void ScrollAnimator::updateCompositorAnimations()
|
| {
|
| ScrollAnimatorCompositorCoordinator::updateCompositorAnimations();
|
| + if (m_runState == RunState::RunningOnMainThread) {
|
| + // We add a temporary main thread scrolling reason so that subsequent
|
| + // scrolls get handled on the main thread. This is removed when the
|
| + // animation is finished in ::tickAnimation.
|
| + addMainThreadScrollingReason();
|
| + return;
|
| + }
|
| +
|
| if (m_runState == RunState::PostAnimationCleanup) {
|
| postAnimationCleanupAndReset();
|
| return;
|
| @@ -338,14 +363,8 @@ void ScrollAnimator::updateCompositorAnimations()
|
| if (!m_compositorAnimationAttachedToLayerId)
|
| reattachCompositorPlayerIfNeeded(getScrollableArea()->compositorAnimationTimeline());
|
|
|
| - if (!m_animationCurve) {
|
| - m_animationCurve = adoptPtr(CompositorFactory::current().createScrollOffsetAnimationCurve(
|
| - compositorOffsetFromBlinkOffset(m_targetOffset),
|
| - m_lastGranularity == ScrollByPixel ?
|
| - CompositorScrollOffsetAnimationCurve::ScrollDurationInverseDelta :
|
| - CompositorScrollOffsetAnimationCurve::ScrollDurationConstant));
|
| - m_animationCurve->setInitialValue(compositorOffsetFromBlinkOffset(currentPosition()));
|
| - }
|
| + if (!m_animationCurve)
|
| + createAnimationCurve();
|
|
|
| bool runningOnMainThread = false;
|
| bool sentToCompositor = sendAnimationToCompositor();
|
|
|