| 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 f5a31538c089572fbe47800f9506d218d3393c72..634381a2e830c25a7b6537406c0f8be4501b29e7 100644
|
| --- a/third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp
|
| +++ b/third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp
|
| @@ -50,7 +50,6 @@ PassOwnPtrWillBeRawPtr<ScrollAnimatorBase> ScrollAnimatorBase::create(Scrollable
|
|
|
| ScrollAnimator::ScrollAnimator(ScrollableArea* scrollableArea, WTF::TimeFunction timeFunction)
|
| : ScrollAnimatorBase(scrollableArea)
|
| - , m_lastTickTime(0.0)
|
| , m_timeFunction(timeFunction)
|
| {
|
| }
|
| @@ -114,7 +113,8 @@ ScrollResultOneDimensional ScrollAnimator::userScroll(
|
|
|
| if (m_runState == RunState::RunningOnCompositor
|
| || m_runState == RunState::RunningOnCompositorButNeedsUpdate) {
|
| - m_runState = RunState::RunningOnCompositorButNeedsUpdate;
|
| + if (registerAndScheduleAnimation())
|
| + m_runState = RunState::RunningOnCompositorButNeedsUpdate;
|
| return ScrollResultOneDimensional(/* didScroll */ true, /* unusedScrollDelta */ 0);
|
| }
|
|
|
| @@ -134,14 +134,9 @@ ScrollResultOneDimensional ScrollAnimator::userScroll(
|
| m_targetOffset = targetPos;
|
| m_startTime = m_timeFunction();
|
|
|
| - scrollableArea()->registerForAnimation();
|
| - if (!m_scrollableArea->scheduleAnimation()) {
|
| - scrollToOffsetWithoutAnimation(targetPos);
|
| - resetAnimationState();
|
| - return ScrollResultOneDimensional(/* didScroll */ true, /* unusedScrollDelta */ 0);
|
| - }
|
| + if (registerAndScheduleAnimation())
|
| + m_runState = RunState::WaitingToSendToCompositor;
|
|
|
| - m_runState = RunState::WaitingToSendToCompositor;
|
| return ScrollResultOneDimensional(/* didScroll */ true, /* unusedScrollDelta */ 0);
|
| }
|
|
|
| @@ -156,8 +151,6 @@ void ScrollAnimator::scrollToOffsetWithoutAnimation(const FloatPoint& offset)
|
|
|
| void ScrollAnimator::tickAnimation(double monotonicTime)
|
| {
|
| - m_lastTickTime = monotonicTime;
|
| -
|
| if (m_runState != RunState::RunningOnMainThread)
|
| return;
|
|
|
| @@ -213,7 +206,7 @@ void ScrollAnimator::updateCompositorAnimations()
|
| m_compositorAnimationId = 0;
|
| m_compositorAnimationGroupId = 0;
|
|
|
| - m_animationCurve->updateTarget(m_lastTickTime - m_startTime,
|
| + m_animationCurve->updateTarget(m_timeFunction() - m_startTime,
|
| m_targetOffset);
|
| m_runState = RunState::WaitingToSendToCompositor;
|
| }
|
| @@ -256,11 +249,8 @@ void ScrollAnimator::updateCompositorAnimations()
|
| }
|
|
|
| if (!sentToCompositor) {
|
| - m_runState = RunState::RunningOnMainThread;
|
| - if (!m_scrollableArea->scheduleAnimation()) {
|
| - scrollToOffsetWithoutAnimation(m_targetOffset);
|
| - resetAnimationState();
|
| - }
|
| + if (registerAndScheduleAnimation())
|
| + m_runState = RunState::RunningOnMainThread;
|
| }
|
| }
|
| }
|
| @@ -281,6 +271,17 @@ void ScrollAnimator::layerForCompositedScrollingDidChange(
|
| reattachCompositorPlayerIfNeeded(timeline);
|
| }
|
|
|
| +bool ScrollAnimator::registerAndScheduleAnimation()
|
| +{
|
| + scrollableArea()->registerForAnimation();
|
| + if (!m_scrollableArea->scheduleAnimation()) {
|
| + scrollToOffsetWithoutAnimation(m_targetOffset);
|
| + resetAnimationState();
|
| + return false;
|
| + }
|
| + return true;
|
| +}
|
| +
|
| DEFINE_TRACE(ScrollAnimator)
|
| {
|
| ScrollAnimatorBase::trace(visitor);
|
|
|