Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(649)

Unified Diff: Source/core/inspector/InspectorAnimationAgent.cpp

Issue 1081753002: Devtools Animations: Support multiple frames in the animation timeline (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Test Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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)

Powered by Google App Engine
This is Rietveld 408576698