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

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: 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
« no previous file with comments | « Source/core/inspector/InspectorAnimationAgent.h ('k') | Source/core/inspector/InspectorInstrumentation.idl » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/inspector/InspectorAnimationAgent.cpp
diff --git a/Source/core/inspector/InspectorAnimationAgent.cpp b/Source/core/inspector/InspectorAnimationAgent.cpp
index 99fc461a20b4b78d794c9eb5446dd2b0457b2d81..48b129fc963ebabeab581a8946228f53d291e660 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,11 @@ 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) {
+ const double threshold = 1000;
+ if (normalizedStartTime(*player) - latestStartTime > threshold) {
reset = true;
m_idToAnimationPlayer.clear();
m_idToAnimationType.clear();
@@ -322,6 +329,14 @@ void InspectorAnimationAgent::didCancelAnimationPlayer(AnimationPlayer* player)
frontend()->animationPlayerCanceled(playerId);
}
+void InspectorAnimationAgent::didClearDocumentOfWindowObject(LocalFrame* frame)
+{
+ if (!m_state->getBoolean(AnimationAgentState::animationAgentEnabled))
+ return;
+ ASSERT(frame->document());
+ frame->document()->timeline().setPlaybackRate(referenceTimeline().playbackRate());
+}
+
AnimationPlayer* InspectorAnimationAgent::assertAnimationPlayer(ErrorString* errorString, const String& id)
{
AnimationPlayer* player = m_idToAnimationPlayer.get(id);
@@ -332,6 +347,18 @@ AnimationPlayer* InspectorAnimationAgent::assertAnimationPlayer(ErrorString* err
return player;
}
+AnimationTimeline& InspectorAnimationAgent::referenceTimeline()
+{
+ return m_pageAgent->inspectedFrame()->document()->timeline();
+}
+
+double InspectorAnimationAgent::normalizedStartTime(AnimationPlayer& player)
+{
+ if (referenceTimeline().playbackRate() == 0)
+ return player.startTime() + referenceTimeline().currentTime() - player.timeline()->currentTime();
+ return player.startTime() + (player.timeline()->zeroTime() - referenceTimeline().zeroTime()) * 1000 * referenceTimeline().playbackRate();
+}
+
DEFINE_TRACE(InspectorAnimationAgent)
{
#if ENABLE(OILPAN)
« no previous file with comments | « Source/core/inspector/InspectorAnimationAgent.h ('k') | Source/core/inspector/InspectorInstrumentation.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698