Index: Source/core/animation/AnimationTimeline.cpp |
diff --git a/Source/core/animation/AnimationTimeline.cpp b/Source/core/animation/AnimationTimeline.cpp |
index 725edd1987b2ccee0a632405c42dbb9b500fd267..6371588bd2a20461c5df51ee8add80be1e4280c7 100644 |
--- a/Source/core/animation/AnimationTimeline.cpp |
+++ b/Source/core/animation/AnimationTimeline.cpp |
@@ -63,6 +63,9 @@ PassRefPtrWillBeRawPtr<AnimationTimeline> AnimationTimeline::create(Document* do |
AnimationTimeline::AnimationTimeline(Document* document, PassOwnPtrWillBeRawPtr<PlatformTiming> timing) |
: m_document(document) |
, m_zeroTime(0) |
+ , m_lastCurrentTime(0) |
+ , m_lastRealTime(0) |
+ , m_playbackRate(1) |
{ |
if (!timing) |
m_timing = adoptPtrWillBeNoop(new AnimationTimelineTiming(this)); |
@@ -167,9 +170,8 @@ void AnimationTimeline::AnimationTimelineTiming::trace(Visitor* visitor) |
double AnimationTimeline::zeroTime() |
{ |
- if (!m_zeroTime && m_document && m_document->loader()) { |
dstockwell
2014/11/12 03:39:42
Don't reformat code.
samli
2014/11/12 20:01:13
Done.
|
+ if (!m_zeroTime && m_document && m_document->loader()) |
m_zeroTime = m_document->loader()->timing()->referenceMonotonicTime(); |
- } |
return m_zeroTime; |
} |
@@ -184,7 +186,7 @@ double AnimationTimeline::currentTimeInternal(bool& isNull) |
isNull = true; |
return std::numeric_limits<double>::quiet_NaN(); |
} |
- double result = m_document->animationClock().currentTime() - zeroTime(); |
+ double result = m_lastCurrentTime + (m_document->animationClock().currentTime() - m_lastRealTime - zeroTime()) * playbackRateForInspector(); |
isNull = std::isnan(result); |
return result; |
} |
@@ -230,6 +232,18 @@ void AnimationTimeline::setOutdatedAnimationPlayer(AnimationPlayer* player) |
m_timing->serviceOnNextFrame(); |
} |
+void AnimationTimeline::setPlaybackRateForInspector(double playbackRate) |
dstockwell
2014/11/12 03:39:42
Add a fixme, needs to invalidate compositor animat
samli
2014/11/12 20:01:13
Done.
|
+{ |
+ m_lastCurrentTime = currentTimeInternal(); |
dstockwell
2014/11/12 03:39:42
I'm not sure you need both lastCurrentTime and las
samli
2014/11/12 20:01:13
(m_document->animationClock().currentTime() + m_de
dstockwell
2014/11/12 22:49:44
Can we just special case playback rate 0, like in
|
+ m_lastRealTime = m_document->animationClock().currentTime() - zeroTime(); |
+ m_playbackRate = playbackRate; |
+} |
+ |
+double AnimationTimeline::playbackRateForInspector() const |
+{ |
+ return m_playbackRate; |
+} |
+ |
#if !ENABLE(OILPAN) |
void AnimationTimeline::detachFromDocument() |
{ |