Chromium Code Reviews| 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..e4d07cb575db1f28df050f505d3f5c9e2151547b 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); |
| + immediateAnimationFrame(); |
| } |
| 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); |
| + immediateAnimationFrame(); |
| } |
| 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::immediateAnimationFrame() |
|
pdr.
2014/02/04 18:45:57
Nit: can you rename this scheduleAnimationFrame? T
|
| +{ |
| + 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()) { |