| Index: Source/core/platform/ScrollAnimatorNone.cpp | 
| diff --git a/Source/core/platform/ScrollAnimatorNone.cpp b/Source/core/platform/ScrollAnimatorNone.cpp | 
| deleted file mode 100644 | 
| index 7e1d6044a004c42a6a63a402d5e9fe87fd8fd97b..0000000000000000000000000000000000000000 | 
| --- a/Source/core/platform/ScrollAnimatorNone.cpp | 
| +++ /dev/null | 
| @@ -1,526 +0,0 @@ | 
| -/* | 
| - * Copyright (c) 2011, Google Inc. All rights reserved. | 
| - * | 
| - * Redistribution and use in source and binary forms, with or without | 
| - * modification, are permitted provided that the following conditions are | 
| - * met: | 
| - * | 
| - *     * Redistributions of source code must retain the above copyright | 
| - * notice, this list of conditions and the following disclaimer. | 
| - *     * Redistributions in binary form must reproduce the above | 
| - * copyright notice, this list of conditions and the following disclaimer | 
| - * in the documentation and/or other materials provided with the | 
| - * distribution. | 
| - *     * Neither the name of Google Inc. nor the names of its | 
| - * contributors may be used to endorse or promote products derived from | 
| - * this software without specific prior written permission. | 
| - * | 
| - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 
| - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 
| - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
| - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | 
| - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
| - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 
| - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
| - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
| - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 
| - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
| - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
| - */ | 
| - | 
| -#include "config.h" | 
| - | 
| -#include "core/platform/ScrollAnimatorNone.h" | 
| - | 
| -#include <algorithm> | 
| -#include "core/platform/ScrollableArea.h" | 
| -#include "wtf/CurrentTime.h" | 
| -#include "wtf/PassOwnPtr.h" | 
| - | 
| -#include "platform/TraceEvent.h" | 
| - | 
| -using namespace std; | 
| - | 
| -namespace WebCore { | 
| - | 
| -const double kFrameRate = 60; | 
| -const double kTickTime = 1 / kFrameRate; | 
| -const double kMinimumTimerInterval = .001; | 
| - | 
| -PassOwnPtr<ScrollAnimator> ScrollAnimator::create(ScrollableArea* scrollableArea) | 
| -{ | 
| -    if (scrollableArea && scrollableArea->scrollAnimatorEnabled()) | 
| -        return adoptPtr(new ScrollAnimatorNone(scrollableArea)); | 
| -    return adoptPtr(new ScrollAnimator(scrollableArea)); | 
| -} | 
| - | 
| -ScrollAnimatorNone::Parameters::Parameters() | 
| -    : m_isEnabled(false) | 
| -{ | 
| -} | 
| - | 
| -ScrollAnimatorNone::Parameters::Parameters(bool isEnabled, double animationTime, double repeatMinimumSustainTime, Curve attackCurve, double attackTime, Curve releaseCurve, double releaseTime, Curve coastTimeCurve, double maximumCoastTime) | 
| -    : m_isEnabled(isEnabled) | 
| -    , m_animationTime(animationTime) | 
| -    , m_repeatMinimumSustainTime(repeatMinimumSustainTime) | 
| -    , m_attackCurve(attackCurve) | 
| -    , m_attackTime(attackTime) | 
| -    , m_releaseCurve(releaseCurve) | 
| -    , m_releaseTime(releaseTime) | 
| -    , m_coastTimeCurve(coastTimeCurve) | 
| -    , m_maximumCoastTime(maximumCoastTime) | 
| -{ | 
| -} | 
| - | 
| -double ScrollAnimatorNone::PerAxisData::curveAt(Curve curve, double t) | 
| -{ | 
| -    switch (curve) { | 
| -    case Linear: | 
| -        return t; | 
| -    case Quadratic: | 
| -        return t * t; | 
| -    case Cubic: | 
| -        return t * t * t; | 
| -    case Quartic: | 
| -        return t * t * t * t; | 
| -    case Bounce: | 
| -        // Time base is chosen to keep the bounce points simpler: | 
| -        // 1 (half bounce coming in) + 1 + .5 + .25 | 
| -        const double kTimeBase = 2.75; | 
| -        const double kTimeBaseSquared = kTimeBase * kTimeBase; | 
| -        if (t < 1 / kTimeBase) | 
| -            return kTimeBaseSquared * t * t; | 
| -        if (t < 2 / kTimeBase) { | 
| -            // Invert a [-.5,.5] quadratic parabola, center it in [1,2]. | 
| -            double t1 = t - 1.5 / kTimeBase; | 
| -            const double kParabolaAtEdge = 1 - .5 * .5; | 
| -            return kTimeBaseSquared * t1 * t1 + kParabolaAtEdge; | 
| -        } | 
| -        if (t < 2.5 / kTimeBase) { | 
| -            // Invert a [-.25,.25] quadratic parabola, center it in [2,2.5]. | 
| -            double t2 = t - 2.25 / kTimeBase; | 
| -            const double kParabolaAtEdge = 1 - .25 * .25; | 
| -            return kTimeBaseSquared * t2 * t2 + kParabolaAtEdge; | 
| -        } | 
| -            // Invert a [-.125,.125] quadratic parabola, center it in [2.5,2.75]. | 
| -        const double kParabolaAtEdge = 1 - .125 * .125; | 
| -        t -= 2.625 / kTimeBase; | 
| -        return kTimeBaseSquared * t * t + kParabolaAtEdge; | 
| -    } | 
| -    ASSERT_NOT_REACHED(); | 
| -    return 0; | 
| -} | 
| - | 
| -double ScrollAnimatorNone::PerAxisData::attackCurve(Curve curve, double deltaTime, double curveT, double startPosition, double attackPosition) | 
| -{ | 
| -    double t = deltaTime / curveT; | 
| -    double positionFactor = curveAt(curve, t); | 
| -    return startPosition + positionFactor * (attackPosition - startPosition); | 
| -} | 
| - | 
| -double ScrollAnimatorNone::PerAxisData::releaseCurve(Curve curve, double deltaTime, double curveT, double releasePosition, double desiredPosition) | 
| -{ | 
| -    double t = deltaTime / curveT; | 
| -    double positionFactor = 1 - curveAt(curve, 1 - t); | 
| -    return releasePosition + (positionFactor * (desiredPosition - releasePosition)); | 
| -} | 
| - | 
| -double ScrollAnimatorNone::PerAxisData::coastCurve(Curve curve, double factor) | 
| -{ | 
| -    return 1 - curveAt(curve, 1 - factor); | 
| -} | 
| - | 
| -double ScrollAnimatorNone::PerAxisData::curveIntegralAt(Curve curve, double t) | 
| -{ | 
| -    switch (curve) { | 
| -    case Linear: | 
| -        return t * t / 2; | 
| -    case Quadratic: | 
| -        return t * t * t / 3; | 
| -    case Cubic: | 
| -        return t * t * t * t / 4; | 
| -    case Quartic: | 
| -        return t * t * t * t * t / 5; | 
| -    case Bounce: | 
| -        const double kTimeBase = 2.75; | 
| -        const double kTimeBaseSquared = kTimeBase * kTimeBase; | 
| -        const double kTimeBaseSquaredOverThree = kTimeBaseSquared / 3; | 
| -        double area; | 
| -        double t1 = min(t, 1 / kTimeBase); | 
| -        area = kTimeBaseSquaredOverThree * t1 * t1 * t1; | 
| -        if (t < 1 / kTimeBase) | 
| -            return area; | 
| - | 
| -        t1 = min(t - 1 / kTimeBase, 1 / kTimeBase); | 
| -        // The integral of kTimeBaseSquared * (t1 - .5 / kTimeBase) * (t1 - .5 / kTimeBase) + kParabolaAtEdge | 
| -        const double kSecondInnerOffset = kTimeBaseSquared * .5 / kTimeBase; | 
| -        double bounceArea = t1 * (t1 * (kTimeBaseSquaredOverThree * t1 - kSecondInnerOffset) + 1); | 
| -        area += bounceArea; | 
| -        if (t < 2 / kTimeBase) | 
| -            return area; | 
| - | 
| -        t1 = min(t - 2 / kTimeBase, 0.5 / kTimeBase); | 
| -        // The integral of kTimeBaseSquared * (t1 - .25 / kTimeBase) * (t1 - .25 / kTimeBase) + kParabolaAtEdge | 
| -        const double kThirdInnerOffset = kTimeBaseSquared * .25 / kTimeBase; | 
| -        bounceArea =  t1 * (t1 * (kTimeBaseSquaredOverThree * t1 - kThirdInnerOffset) + 1); | 
| -        area += bounceArea; | 
| -        if (t < 2.5 / kTimeBase) | 
| -            return area; | 
| - | 
| -        t1 = t - 2.5 / kTimeBase; | 
| -        // The integral of kTimeBaseSquared * (t1 - .125 / kTimeBase) * (t1 - .125 / kTimeBase) + kParabolaAtEdge | 
| -        const double kFourthInnerOffset = kTimeBaseSquared * .125 / kTimeBase; | 
| -        bounceArea = t1 * (t1 * (kTimeBaseSquaredOverThree * t1 - kFourthInnerOffset) + 1); | 
| -        area += bounceArea; | 
| -        return area; | 
| -    } | 
| -    ASSERT_NOT_REACHED(); | 
| -    return 0; | 
| -} | 
| - | 
| -double ScrollAnimatorNone::PerAxisData::attackArea(Curve curve, double startT, double endT) | 
| -{ | 
| -    double startValue = curveIntegralAt(curve, startT); | 
| -    double endValue = curveIntegralAt(curve, endT); | 
| -    return endValue - startValue; | 
| -} | 
| - | 
| -double ScrollAnimatorNone::PerAxisData::releaseArea(Curve curve, double startT, double endT) | 
| -{ | 
| -    double startValue = curveIntegralAt(curve, 1 - endT); | 
| -    double endValue = curveIntegralAt(curve, 1 - startT); | 
| -    return endValue - startValue; | 
| -} | 
| - | 
| -ScrollAnimatorNone::PerAxisData::PerAxisData(ScrollAnimatorNone* parent, float* currentPosition, int visibleLength) | 
| -    : m_currentPosition(currentPosition) | 
| -    , m_visibleLength(visibleLength) | 
| -{ | 
| -    reset(); | 
| -} | 
| - | 
| -void ScrollAnimatorNone::PerAxisData::reset() | 
| -{ | 
| -    m_currentVelocity = 0; | 
| - | 
| -    m_desiredPosition = 0; | 
| -    m_desiredVelocity = 0; | 
| - | 
| -    m_startPosition = 0; | 
| -    m_startTime = 0; | 
| -    m_startVelocity = 0; | 
| - | 
| -    m_animationTime = 0; | 
| -    m_lastAnimationTime = 0; | 
| - | 
| -    m_attackPosition = 0; | 
| -    m_attackTime = 0; | 
| -    m_attackCurve = Quadratic; | 
| - | 
| -    m_releasePosition = 0; | 
| -    m_releaseTime = 0; | 
| -    m_releaseCurve = Quadratic; | 
| -} | 
| - | 
| - | 
| -bool ScrollAnimatorNone::PerAxisData::updateDataFromParameters(float step, float multiplier, float scrollableSize, double currentTime, Parameters* parameters) | 
| -{ | 
| -    float delta = step * multiplier; | 
| -    if (!m_startTime || !delta || (delta < 0) != (m_desiredPosition - *m_currentPosition < 0)) { | 
| -        m_desiredPosition = *m_currentPosition; | 
| -        m_startTime = 0; | 
| -    } | 
| -    float newPosition = m_desiredPosition + delta; | 
| - | 
| -    if (newPosition < 0 || newPosition > scrollableSize) | 
| -        newPosition = max(min(newPosition, scrollableSize), 0.0f); | 
| - | 
| -    if (newPosition == m_desiredPosition) | 
| -        return false; | 
| - | 
| -    m_desiredPosition = newPosition; | 
| - | 
| -    if (!m_startTime) { | 
| -        m_attackTime = parameters->m_attackTime; | 
| -        m_attackCurve = parameters->m_attackCurve; | 
| -    } | 
| -    m_animationTime = parameters->m_animationTime; | 
| -    m_releaseTime = parameters->m_releaseTime; | 
| -    m_releaseCurve = parameters->m_releaseCurve; | 
| - | 
| -    // Prioritize our way out of over constraint. | 
| -    if (m_attackTime + m_releaseTime > m_animationTime) { | 
| -        if (m_releaseTime > m_animationTime) | 
| -            m_releaseTime = m_animationTime; | 
| -        m_attackTime = m_animationTime - m_releaseTime; | 
| -    } | 
| - | 
| -    if (!m_startTime) { | 
| -        // FIXME: This should be the time from the event that got us here. | 
| -        m_startTime = currentTime - kTickTime / 2; | 
| -        m_startPosition = *m_currentPosition; | 
| -        m_lastAnimationTime = m_startTime; | 
| -    } | 
| -    m_startVelocity = m_currentVelocity; | 
| - | 
| -    double remainingDelta = m_desiredPosition - *m_currentPosition; | 
| - | 
| -    double attackAreaLeft = 0; | 
| - | 
| -    double deltaTime = m_lastAnimationTime - m_startTime; | 
| -    double attackTimeLeft = max(0., m_attackTime - deltaTime); | 
| -    double timeLeft = m_animationTime - deltaTime; | 
| -    double minTimeLeft = m_releaseTime + min(parameters->m_repeatMinimumSustainTime, m_animationTime - m_releaseTime - attackTimeLeft); | 
| -    if (timeLeft < minTimeLeft) { | 
| -        m_animationTime = deltaTime + minTimeLeft; | 
| -        timeLeft = minTimeLeft; | 
| -    } | 
| - | 
| -    if (parameters->m_maximumCoastTime > (parameters->m_repeatMinimumSustainTime + parameters->m_releaseTime)) { | 
| -        double targetMaxCoastVelocity = m_visibleLength * .25 * kFrameRate; | 
| -        // This needs to be as minimal as possible while not being intrusive to page up/down. | 
| -        double minCoastDelta = m_visibleLength; | 
| - | 
| -        if (fabs(remainingDelta) > minCoastDelta) { | 
| -            double maxCoastDelta = parameters->m_maximumCoastTime * targetMaxCoastVelocity; | 
| -            double coastFactor = min(1., (fabs(remainingDelta) - minCoastDelta) / (maxCoastDelta - minCoastDelta)); | 
| - | 
| -            // We could play with the curve here - linear seems a little soft. Initial testing makes me want to feed into the sustain time more aggressively. | 
| -            double coastMinTimeLeft = min(parameters->m_maximumCoastTime, minTimeLeft + coastCurve(parameters->m_coastTimeCurve, coastFactor) * (parameters->m_maximumCoastTime - minTimeLeft)); | 
| - | 
| -            double additionalTime = max(0., coastMinTimeLeft - minTimeLeft); | 
| -            if (additionalTime) { | 
| -                double additionalReleaseTime = min(additionalTime, parameters->m_releaseTime / (parameters->m_releaseTime + parameters->m_repeatMinimumSustainTime) * additionalTime); | 
| -                m_releaseTime = parameters->m_releaseTime + additionalReleaseTime; | 
| -                m_animationTime = deltaTime + coastMinTimeLeft; | 
| -                timeLeft = coastMinTimeLeft; | 
| -            } | 
| -        } | 
| -    } | 
| - | 
| -    double releaseTimeLeft = min(timeLeft, m_releaseTime); | 
| -    double sustainTimeLeft = max(0., timeLeft - releaseTimeLeft - attackTimeLeft); | 
| - | 
| -    if (attackTimeLeft) { | 
| -        double attackSpot = deltaTime / m_attackTime; | 
| -        attackAreaLeft = attackArea(m_attackCurve, attackSpot, 1) * m_attackTime; | 
| -    } | 
| - | 
| -    double releaseSpot = (m_releaseTime - releaseTimeLeft) / m_releaseTime; | 
| -    double releaseAreaLeft  = releaseArea(m_releaseCurve, releaseSpot, 1) * m_releaseTime; | 
| - | 
| -    m_desiredVelocity = remainingDelta / (attackAreaLeft + sustainTimeLeft + releaseAreaLeft); | 
| -    m_releasePosition = m_desiredPosition - m_desiredVelocity * releaseAreaLeft; | 
| -    if (attackAreaLeft) | 
| -        m_attackPosition = m_startPosition + m_desiredVelocity * attackAreaLeft; | 
| -    else | 
| -        m_attackPosition = m_releasePosition - (m_animationTime - m_releaseTime - m_attackTime) * m_desiredVelocity; | 
| - | 
| -    if (sustainTimeLeft) { | 
| -        double roundOff = m_releasePosition - ((attackAreaLeft ? m_attackPosition : *m_currentPosition) + m_desiredVelocity * sustainTimeLeft); | 
| -        m_desiredVelocity += roundOff / sustainTimeLeft; | 
| -    } | 
| - | 
| -    return true; | 
| -} | 
| - | 
| -// FIXME: Add in jank detection trace events into this function. | 
| -bool ScrollAnimatorNone::PerAxisData::animateScroll(double currentTime) | 
| -{ | 
| -    double lastScrollInterval = currentTime - m_lastAnimationTime; | 
| -    if (lastScrollInterval < kMinimumTimerInterval) | 
| -        return true; | 
| - | 
| -    m_lastAnimationTime = currentTime; | 
| - | 
| -    double deltaTime = currentTime - m_startTime; | 
| -    double newPosition = *m_currentPosition; | 
| - | 
| -    if (deltaTime > m_animationTime) { | 
| -        *m_currentPosition = m_desiredPosition; | 
| -        reset(); | 
| -        return false; | 
| -    } | 
| -    if (deltaTime < m_attackTime) | 
| -        newPosition = attackCurve(m_attackCurve, deltaTime, m_attackTime, m_startPosition, m_attackPosition); | 
| -    else if (deltaTime < (m_animationTime - m_releaseTime)) | 
| -        newPosition = m_attackPosition + (deltaTime - m_attackTime) * m_desiredVelocity; | 
| -    else { | 
| -        // release is based on targeting the exact final position. | 
| -        double releaseDeltaT = deltaTime - (m_animationTime - m_releaseTime); | 
| -        newPosition = releaseCurve(m_releaseCurve, releaseDeltaT, m_releaseTime, m_releasePosition, m_desiredPosition); | 
| -    } | 
| - | 
| -    // Normalize velocity to a per second amount. Could be used to check for jank. | 
| -    if (lastScrollInterval > 0) | 
| -        m_currentVelocity = (newPosition - *m_currentPosition) / lastScrollInterval; | 
| -    *m_currentPosition = newPosition; | 
| - | 
| -    return true; | 
| -} | 
| - | 
| -void ScrollAnimatorNone::PerAxisData::updateVisibleLength(int visibleLength) | 
| -{ | 
| -    m_visibleLength = visibleLength; | 
| -} | 
| - | 
| -ScrollAnimatorNone::ScrollAnimatorNone(ScrollableArea* scrollableArea) | 
| -    : ScrollAnimator(scrollableArea) | 
| -    , m_horizontalData(this, &m_currentPosX, scrollableArea->visibleWidth()) | 
| -    , m_verticalData(this, &m_currentPosY, scrollableArea->visibleHeight()) | 
| -    , m_startTime(0) | 
| -    , m_animationActive(false) | 
| -{ | 
| -} | 
| - | 
| -ScrollAnimatorNone::~ScrollAnimatorNone() | 
| -{ | 
| -    stopAnimationTimerIfNeeded(); | 
| -} | 
| - | 
| -ScrollAnimatorNone::Parameters ScrollAnimatorNone::parametersForScrollGranularity(ScrollGranularity granularity) const | 
| -{ | 
| -    switch (granularity) { | 
| -    case ScrollByDocument: | 
| -        return Parameters(true, 20 * kTickTime, 10 * kTickTime, Cubic, 10 * kTickTime, Cubic, 10 * kTickTime, Linear, 1); | 
| -    case ScrollByLine: | 
| -        return Parameters(true, 10 * kTickTime, 7 * kTickTime, Cubic, 3 * kTickTime, Cubic, 3 * kTickTime, Linear, 1); | 
| -    case ScrollByPage: | 
| -        return Parameters(true, 15 * kTickTime, 10 * kTickTime, Cubic, 5 * kTickTime, Cubic, 5 * kTickTime, Linear, 1); | 
| -    case ScrollByPixel: | 
| -        return Parameters(true, 11 * kTickTime, 2 * kTickTime, Cubic, 3 * kTickTime, Cubic, 3 * kTickTime, Quadratic, 1.25); | 
| -    default: | 
| -        ASSERT_NOT_REACHED(); | 
| -    } | 
| -    return Parameters(); | 
| -} | 
| - | 
| -bool ScrollAnimatorNone::scroll(ScrollbarOrientation orientation, ScrollGranularity granularity, float step, float multiplier) | 
| -{ | 
| -    if (!m_scrollableArea->scrollAnimatorEnabled()) | 
| -        return ScrollAnimator::scroll(orientation, granularity, step, multiplier); | 
| - | 
| -    TRACE_EVENT0("webkit", "ScrollAnimatorNone::scroll"); | 
| - | 
| -    // FIXME: get the type passed in. MouseWheel could also be by line, but should still have different | 
| -    // animation parameters than the keyboard. | 
| -    Parameters parameters; | 
| -    switch (granularity) { | 
| -    case ScrollByDocument: | 
| -    case ScrollByLine: | 
| -    case ScrollByPage: | 
| -    case ScrollByPixel: | 
| -        parameters = parametersForScrollGranularity(granularity); | 
| -        break; | 
| -    case ScrollByPrecisePixel: | 
| -        return ScrollAnimator::scroll(orientation, granularity, step, multiplier); | 
| -    } | 
| - | 
| -    // If the individual input setting is disabled, bail. | 
| -    if (!parameters.m_isEnabled) | 
| -        return ScrollAnimator::scroll(orientation, granularity, step, multiplier); | 
| - | 
| -    // This is an animatable scroll. Set the animation in motion using the appropriate parameters. | 
| -    float scrollableSize = static_cast<float>(m_scrollableArea->scrollSize(orientation)); | 
| - | 
| -    PerAxisData& data = (orientation == VerticalScrollbar) ? m_verticalData : m_horizontalData; | 
| -    bool needToScroll = data.updateDataFromParameters(step, multiplier, scrollableSize, WTF::monotonicallyIncreasingTime(), ¶meters); | 
| -    if (needToScroll && !animationTimerActive()) { | 
| -        m_startTime = data.m_startTime; | 
| -        animationWillStart(); | 
| -        animationTimerFired(); | 
| -    } | 
| -    return needToScroll; | 
| -} | 
| - | 
| -void ScrollAnimatorNone::scrollToOffsetWithoutAnimation(const FloatPoint& offset) | 
| -{ | 
| -    stopAnimationTimerIfNeeded(); | 
| - | 
| -    FloatSize delta = FloatSize(offset.x() - *m_horizontalData.m_currentPosition, offset.y() - *m_verticalData.m_currentPosition); | 
| - | 
| -    m_horizontalData.reset(); | 
| -    *m_horizontalData.m_currentPosition = offset.x(); | 
| -    m_horizontalData.m_desiredPosition = offset.x(); | 
| - | 
| -    m_verticalData.reset(); | 
| -    *m_verticalData.m_currentPosition = offset.y(); | 
| -    m_verticalData.m_desiredPosition = offset.y(); | 
| - | 
| -    notifyPositionChanged(delta); | 
| -} | 
| - | 
| -void ScrollAnimatorNone::cancelAnimations() | 
| -{ | 
| -    m_animationActive = false; | 
| -} | 
| - | 
| -void ScrollAnimatorNone::serviceScrollAnimations() | 
| -{ | 
| -    if (m_animationActive) | 
| -        animationTimerFired(); | 
| -} | 
| - | 
| -void ScrollAnimatorNone::willEndLiveResize() | 
| -{ | 
| -    updateVisibleLengths(); | 
| -} | 
| - | 
| -void ScrollAnimatorNone::didAddVerticalScrollbar(Scrollbar*) | 
| -{ | 
| -    updateVisibleLengths(); | 
| -} | 
| - | 
| -void ScrollAnimatorNone::didAddHorizontalScrollbar(Scrollbar*) | 
| -{ | 
| -    updateVisibleLengths(); | 
| -} | 
| - | 
| -void ScrollAnimatorNone::updateVisibleLengths() | 
| -{ | 
| -    m_horizontalData.updateVisibleLength(scrollableArea()->visibleWidth()); | 
| -    m_verticalData.updateVisibleLength(scrollableArea()->visibleHeight()); | 
| -} | 
| - | 
| -void ScrollAnimatorNone::animationTimerFired() | 
| -{ | 
| -    TRACE_EVENT0("webkit", "ScrollAnimatorNone::animationTimerFired"); | 
| - | 
| -    double currentTime = WTF::monotonicallyIncreasingTime(); | 
| - | 
| -    bool continueAnimation = false; | 
| -    if (m_horizontalData.m_startTime && m_horizontalData.animateScroll(currentTime)) | 
| -        continueAnimation = true; | 
| -    if (m_verticalData.m_startTime && m_verticalData.animateScroll(currentTime)) | 
| -        continueAnimation = true; | 
| - | 
| -    if (continueAnimation) | 
| -        startNextTimer(); | 
| -    else | 
| -        m_animationActive = false; | 
| - | 
| -    TRACE_EVENT0("webkit", "ScrollAnimatorNone::notifyPositionChanged"); | 
| -    notifyPositionChanged(FloatSize()); | 
| - | 
| -    if (!continueAnimation) | 
| -        animationDidFinish(); | 
| -} | 
| - | 
| -void ScrollAnimatorNone::startNextTimer() | 
| -{ | 
| -    if (scrollableArea()->scheduleAnimation()) | 
| -        m_animationActive = true; | 
| -} | 
| - | 
| -bool ScrollAnimatorNone::animationTimerActive() | 
| -{ | 
| -    return m_animationActive; | 
| -} | 
| - | 
| -void ScrollAnimatorNone::stopAnimationTimerIfNeeded() | 
| -{ | 
| -    if (animationTimerActive()) | 
| -        m_animationActive = false; | 
| -} | 
| - | 
| -} // namespace WebCore | 
|  |