| Index: Source/core/svg/animation/SMILTimeContainer.cpp
|
| diff --git a/Source/core/svg/animation/SMILTimeContainer.cpp b/Source/core/svg/animation/SMILTimeContainer.cpp
|
| index 744de372bd45303f6d52db9045fc120825359ca6..c12bfce5438f5aad7e6b4b36cd50b80eec5e043a 100644
|
| --- a/Source/core/svg/animation/SMILTimeContainer.cpp
|
| +++ b/Source/core/svg/animation/SMILTimeContainer.cpp
|
| @@ -54,7 +54,7 @@ SMILTimeContainer::SMILTimeContainer(SVGSVGElement* owner)
|
|
|
| SMILTimeContainer::~SMILTimeContainer()
|
| {
|
| - m_timer.stop();
|
| + cancelAnimationFrame();
|
| ASSERT(!m_timer.isActive());
|
| #ifndef NDEBUG
|
| ASSERT(!m_preventScheduledAnimationsChanges);
|
| @@ -103,7 +103,7 @@ void SMILTimeContainer::notifyIntervalsChanged()
|
| {
|
| // Schedule updateAnimations() to be called asynchronously so multiple intervals
|
| // can change with updateAnimations() only called once at the end.
|
| - startTimer(0);
|
| + scheduleAnimationFrame();
|
| }
|
|
|
| SMILTime SMILTimeContainer::elapsed() const
|
| @@ -140,7 +140,7 @@ void SMILTimeContainer::begin()
|
|
|
| if (m_pauseTime) {
|
| m_pauseTime = now;
|
| - m_timer.stop();
|
| + cancelAnimationFrame();
|
| }
|
| }
|
|
|
| @@ -151,7 +151,7 @@ void SMILTimeContainer::pause()
|
|
|
| if (m_beginTime) {
|
| m_accumulatedActiveTime += m_pauseTime - lastResumeTime();
|
| - m_timer.stop();
|
| + cancelAnimationFrame();
|
| }
|
| m_resumeTime = 0;
|
| }
|
| @@ -162,7 +162,7 @@ void SMILTimeContainer::resume()
|
| m_resumeTime = currentTime();
|
|
|
| m_pauseTime = 0;
|
| - startTimer(0);
|
| + scheduleAnimationFrame();
|
| }
|
|
|
| void SMILTimeContainer::setElapsed(SMILTime time)
|
| @@ -174,7 +174,7 @@ void SMILTimeContainer::setElapsed(SMILTime time)
|
| }
|
|
|
| if (m_beginTime)
|
| - m_timer.stop();
|
| + cancelAnimationFrame();
|
|
|
| double now = currentTime();
|
| m_beginTime = now - time.value();
|
| @@ -203,22 +203,39 @@ void SMILTimeContainer::setElapsed(SMILTime time)
|
| updateAnimations(time, true);
|
| }
|
|
|
| -void SMILTimeContainer::startTimer(SMILTime fireTime, SMILTime minimumDelay)
|
| +bool SMILTimeContainer::isTimelineRunning() const
|
| +{
|
| + return m_beginTime && !isPaused();
|
| +}
|
| +
|
| +void SMILTimeContainer::scheduleAnimationFrame(SMILTime fireTime)
|
| {
|
| - if (!m_beginTime || isPaused())
|
| + if (!isTimelineRunning())
|
| return;
|
|
|
| if (!fireTime.isFinite())
|
| return;
|
|
|
| - SMILTime delay = max(fireTime - elapsed(), minimumDelay);
|
| + SMILTime delay = max(fireTime - elapsed(), SMILTime(animationFrameDelay));
|
| m_timer.startOneShot(delay.value());
|
| }
|
|
|
| +void SMILTimeContainer::scheduleAnimationFrame()
|
| +{
|
| + if (!isTimelineRunning())
|
| + return;
|
| +
|
| + m_timer.startOneShot(0);
|
| +}
|
| +
|
| +void SMILTimeContainer::cancelAnimationFrame()
|
| +{
|
| + m_timer.stop();
|
| +}
|
| +
|
| void SMILTimeContainer::timerFired(Timer<SMILTimeContainer>*)
|
| {
|
| - ASSERT(m_beginTime);
|
| - ASSERT(!m_pauseTime);
|
| + ASSERT(isTimelineRunning());
|
| updateAnimations(elapsed());
|
| }
|
|
|
| @@ -309,7 +326,7 @@ void SMILTimeContainer::updateAnimations(SMILTime elapsed, bool seekToTime)
|
| #ifndef NDEBUG
|
| m_preventScheduledAnimationsChanges = false;
|
| #endif
|
| - startTimer(earliestFireTime, animationFrameDelay);
|
| + scheduleAnimationFrame(earliestFireTime);
|
| return;
|
| }
|
|
|
| @@ -321,7 +338,7 @@ void SMILTimeContainer::updateAnimations(SMILTime elapsed, bool seekToTime)
|
| m_preventScheduledAnimationsChanges = false;
|
| #endif
|
|
|
| - startTimer(earliestFireTime, animationFrameDelay);
|
| + scheduleAnimationFrame(earliestFireTime);
|
|
|
| for (unsigned i = 0; i < animationsToApplySize; ++i) {
|
| if (animationsToApply[i]->inDocument() && animationsToApply[i]->isSVGDiscardElement()) {
|
|
|