Chromium Code Reviews| Index: Source/core/inspector/InspectorAnimationAgent.cpp |
| diff --git a/Source/core/inspector/InspectorAnimationAgent.cpp b/Source/core/inspector/InspectorAnimationAgent.cpp |
| index 99fc461a20b4b78d794c9eb5446dd2b0457b2d81..ae59dc305aefb27869835cd6ccc7d83f4f1ef0b7 100644 |
| --- a/Source/core/inspector/InspectorAnimationAgent.cpp |
| +++ b/Source/core/inspector/InspectorAnimationAgent.cpp |
| @@ -208,7 +208,7 @@ PassRefPtr<TypeBuilder::Animation::AnimationPlayer> InspectorAnimationAgent::bui |
| .setPausedState(player.paused()) |
| .setPlayState(player.playState()) |
| .setPlaybackRate(player.playbackRate()) |
| - .setStartTime(player.startTime()) |
| + .setStartTime(normalizedStartTime(player)) |
| .setCurrentTime(player.currentTime()) |
| .setSource(animationObject.release()) |
| .setType(animationType); |
| @@ -243,7 +243,7 @@ void InspectorAnimationAgent::getAnimationPlayersForNode(ErrorString* errorStrin |
| void InspectorAnimationAgent::getPlaybackRate(ErrorString*, double* playbackRate) |
| { |
| - *playbackRate = m_pageAgent->inspectedFrame()->document()->timeline().playbackRate(); |
| + *playbackRate = referenceTimeline().playbackRate(); |
| } |
| void InspectorAnimationAgent::setPlaybackRate(ErrorString*, double playbackRate) |
| @@ -256,7 +256,13 @@ void InspectorAnimationAgent::setPlaybackRate(ErrorString*, double playbackRate) |
| void InspectorAnimationAgent::setCurrentTime(ErrorString*, double currentTime) |
| { |
| - m_pageAgent->inspectedFrame()->document()->timeline().setCurrentTime(currentTime); |
| + double timeDelta = currentTime - referenceTimeline().currentTime(); |
| + for (Frame* frame = m_pageAgent->inspectedFrame(); frame; frame = frame->tree().traverseNext(m_pageAgent->inspectedFrame())) { |
| + if (frame->isLocalFrame()) { |
| + AnimationTimeline& timeline = toLocalFrame(frame)->document()->timeline(); |
| + timeline.setCurrentTime(timeline.currentTime() + timeDelta); |
| + } |
| + } |
| } |
| void InspectorAnimationAgent::setTiming(ErrorString* errorString, const String& playerId, double duration, double delay) |
| @@ -302,10 +308,10 @@ void InspectorAnimationAgent::didCreateAnimationPlayer(AnimationPlayer* player) |
| // Check threshold |
| double latestStartTime = 0; |
| for (const auto& p : m_idToAnimationPlayer.values()) |
| - latestStartTime = max(latestStartTime, p->startTime()); |
| + latestStartTime = max(latestStartTime, normalizedStartTime(*p)); |
| bool reset = false; |
| - if (player->startTime() - latestStartTime > 1000) { |
| + if (normalizedStartTime(*player) - latestStartTime > 1000) { |
|
dstockwell
2015/04/13 22:50:00
While we're here, extract 1000 out to a named vari
samli
2015/04/14 01:11:27
Yeah, done.
|
| reset = true; |
| m_idToAnimationPlayer.clear(); |
| m_idToAnimationType.clear(); |
| @@ -332,6 +338,16 @@ AnimationPlayer* InspectorAnimationAgent::assertAnimationPlayer(ErrorString* err |
| return player; |
| } |
| +AnimationTimeline& InspectorAnimationAgent::referenceTimeline() |
| +{ |
| + return m_pageAgent->inspectedFrame()->document()->timeline(); |
| +} |
| + |
| +double InspectorAnimationAgent::normalizedStartTime(AnimationPlayer& player) |
| +{ |
| + return player.startTime() + (player.timeline()->zeroTime() - referenceTimeline().zeroTime()) * 1000 * referenceTimeline().playbackRate(); |
|
dstockwell
2015/04/13 22:50:00
I'm not sure this handles playbackRate == 0, Shoul
samli
2015/04/14 01:11:27
Done.
|
| +} |
| + |
| DEFINE_TRACE(InspectorAnimationAgent) |
| { |
| #if ENABLE(OILPAN) |