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

Side by Side Diff: third_party/WebKit/Source/core/inspector/InspectorAnimationAgent.cpp

Issue 1471193008: Devtools Animations: Maintain playback rate on navigation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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 unified diff | Download patch
« no previous file with comments | « third_party/WebKit/Source/core/inspector/InspectorAnimationAgent.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 6
7 #include "core/inspector/InspectorAnimationAgent.h" 7 #include "core/inspector/InspectorAnimationAgent.h"
8 8
9 #include "core/animation/Animation.h" 9 #include "core/animation/Animation.h"
10 #include "core/animation/AnimationEffect.h" 10 #include "core/animation/AnimationEffect.h"
(...skipping 16 matching lines...) Expand all
27 #include "core/inspector/InspectorCSSAgent.h" 27 #include "core/inspector/InspectorCSSAgent.h"
28 #include "core/inspector/InspectorDOMAgent.h" 28 #include "core/inspector/InspectorDOMAgent.h"
29 #include "core/inspector/InspectorState.h" 29 #include "core/inspector/InspectorState.h"
30 #include "core/inspector/InspectorStyleSheet.h" 30 #include "core/inspector/InspectorStyleSheet.h"
31 #include "platform/Decimal.h" 31 #include "platform/Decimal.h"
32 #include "platform/animation/TimingFunction.h" 32 #include "platform/animation/TimingFunction.h"
33 #include "wtf/text/Base64.h" 33 #include "wtf/text/Base64.h"
34 34
35 namespace AnimationAgentState { 35 namespace AnimationAgentState {
36 static const char animationAgentEnabled[] = "animationAgentEnabled"; 36 static const char animationAgentEnabled[] = "animationAgentEnabled";
37 static const char animationAgentPlaybackRate[] = "animationAgentPlaybackRate";
37 } 38 }
38 39
39 namespace blink { 40 namespace blink {
40 41
41 InspectorAnimationAgent::InspectorAnimationAgent(InspectedFrames* inspectedFrame s, InspectorDOMAgent* domAgent, InspectorCSSAgent* cssAgent, InjectedScriptManag er* injectedScriptManager) 42 InspectorAnimationAgent::InspectorAnimationAgent(InspectedFrames* inspectedFrame s, InspectorDOMAgent* domAgent, InspectorCSSAgent* cssAgent, InjectedScriptManag er* injectedScriptManager)
42 : InspectorBaseAgent<InspectorAnimationAgent, InspectorFrontend::Animation>( "Animation") 43 : InspectorBaseAgent<InspectorAnimationAgent, InspectorFrontend::Animation>( "Animation")
43 , m_inspectedFrames(inspectedFrames) 44 , m_inspectedFrames(inspectedFrames)
44 , m_domAgent(domAgent) 45 , m_domAgent(domAgent)
45 , m_cssAgent(cssAgent) 46 , m_cssAgent(cssAgent)
46 , m_injectedScriptManager(injectedScriptManager) 47 , m_injectedScriptManager(injectedScriptManager)
47 , m_isCloning(false) 48 , m_isCloning(false)
48 { 49 {
49 } 50 }
50 51
51 void InspectorAnimationAgent::restore() 52 void InspectorAnimationAgent::restore()
52 { 53 {
53 if (m_state->getBoolean(AnimationAgentState::animationAgentEnabled)) { 54 if (m_state->getBoolean(AnimationAgentState::animationAgentEnabled)) {
pfeldman 2015/11/27 03:53:30 You should restore the playback rate here, not in
54 ErrorString error; 55 ErrorString error;
55 enable(&error); 56 enable(&error);
56 } 57 }
57 } 58 }
58 59
59 void InspectorAnimationAgent::enable(ErrorString*) 60 void InspectorAnimationAgent::enable(ErrorString*)
60 { 61 {
61 m_state->setBoolean(AnimationAgentState::animationAgentEnabled, true); 62 m_state->setBoolean(AnimationAgentState::animationAgentEnabled, true);
62 m_instrumentingAgents->setInspectorAnimationAgent(this); 63 m_instrumentingAgents->setInspectorAnimationAgent(this);
64 double playbackRate = m_state->getDouble(AnimationAgentState::animationAgent PlaybackRate);
pfeldman 2015/11/27 03:53:30 State should be clean on enable, this code belongs
samli 2015/11/27 04:10:55 Oh, didn't realise restore() is called during the
65 if (playbackRate != 1 && playbackRate != 0)
pfeldman 2015/11/27 03:53:30 why don't you restore 1 and 0?
samli 2015/11/27 04:10:55 No need to restore 1, already 1. If its not in the
66 setPlaybackRate(nullptr, playbackRate);
63 } 67 }
64 68
65 void InspectorAnimationAgent::disable(ErrorString*) 69 void InspectorAnimationAgent::disable(ErrorString*)
66 { 70 {
67 setPlaybackRate(nullptr, 1); 71 for (LocalFrame* frame : *m_inspectedFrames)
72 frame->document()->timeline().setPlaybackRate(1);
68 m_state->setBoolean(AnimationAgentState::animationAgentEnabled, false); 73 m_state->setBoolean(AnimationAgentState::animationAgentEnabled, false);
pfeldman 2015/11/27 03:53:30 You need to clear the rate here as well.
samli 2015/11/27 04:10:55 Done.
69 m_instrumentingAgents->setInspectorAnimationAgent(nullptr); 74 m_instrumentingAgents->setInspectorAnimationAgent(nullptr);
70 m_idToAnimation.clear(); 75 m_idToAnimation.clear();
71 m_idToAnimationType.clear(); 76 m_idToAnimationType.clear();
72 m_idToAnimationClone.clear(); 77 m_idToAnimationClone.clear();
73 } 78 }
74 79
80 void InspectorAnimationAgent::clearFrontend()
81 {
82 setPlaybackRate(nullptr, 1);
pfeldman 2015/11/27 03:53:30 Nothing should happen upon front-end disconnect -
samli 2015/11/27 04:10:55 Done.
83 }
84
75 void InspectorAnimationAgent::didCommitLoadForLocalFrame(LocalFrame* frame) 85 void InspectorAnimationAgent::didCommitLoadForLocalFrame(LocalFrame* frame)
76 { 86 {
77 if (frame == m_inspectedFrames->root()) { 87 if (frame == m_inspectedFrames->root()) {
78 m_idToAnimation.clear(); 88 m_idToAnimation.clear();
79 m_idToAnimationType.clear(); 89 m_idToAnimationType.clear();
80 m_idToAnimationClone.clear(); 90 m_idToAnimationClone.clear();
81 } 91 }
92 double playbackRate = m_state->getDouble(AnimationAgentState::animationAgent PlaybackRate);
93 if (playbackRate != 1 && playbackRate != 0)
94 setPlaybackRate(nullptr, playbackRate);
82 } 95 }
83 96
84 static PassRefPtr<TypeBuilder::Animation::AnimationEffect> buildObjectForAnimati onEffect(KeyframeEffect* effect, bool isTransition) 97 static PassRefPtr<TypeBuilder::Animation::AnimationEffect> buildObjectForAnimati onEffect(KeyframeEffect* effect, bool isTransition)
85 { 98 {
86 ComputedTimingProperties computedTiming; 99 ComputedTimingProperties computedTiming;
87 effect->computedTiming(computedTiming); 100 effect->computedTiming(computedTiming);
88 double delay = computedTiming.delay(); 101 double delay = computedTiming.delay();
89 double duration = computedTiming.duration().getAsUnrestrictedDouble(); 102 double duration = computedTiming.duration().getAsUnrestrictedDouble();
90 String easing = effect->specifiedTiming().timingFunction->toString(); 103 String easing = effect->specifiedTiming().timingFunction->toString();
91 104
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 203
191 void InspectorAnimationAgent::getPlaybackRate(ErrorString*, double* playbackRate ) 204 void InspectorAnimationAgent::getPlaybackRate(ErrorString*, double* playbackRate )
192 { 205 {
193 *playbackRate = referenceTimeline().playbackRate(); 206 *playbackRate = referenceTimeline().playbackRate();
194 } 207 }
195 208
196 void InspectorAnimationAgent::setPlaybackRate(ErrorString*, double playbackRate) 209 void InspectorAnimationAgent::setPlaybackRate(ErrorString*, double playbackRate)
197 { 210 {
198 for (LocalFrame* frame : *m_inspectedFrames) 211 for (LocalFrame* frame : *m_inspectedFrames)
199 frame->document()->timeline().setPlaybackRate(playbackRate); 212 frame->document()->timeline().setPlaybackRate(playbackRate);
213 m_state->setDouble(AnimationAgentState::animationAgentPlaybackRate, playback Rate);
200 } 214 }
201 215
202 void InspectorAnimationAgent::getCurrentTime(ErrorString* errorString, const Str ing& id, double* currentTime) 216 void InspectorAnimationAgent::getCurrentTime(ErrorString* errorString, const Str ing& id, double* currentTime)
203 { 217 {
204 Animation* animation = assertAnimation(errorString, id); 218 Animation* animation = assertAnimation(errorString, id);
205 if (!animation) 219 if (!animation)
206 return; 220 return;
207 if (m_idToAnimationClone.get(id)) 221 if (m_idToAnimationClone.get(id))
208 animation = m_idToAnimationClone.get(id); 222 animation = m_idToAnimationClone.get(id);
209 223
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 visitor->trace(m_cssAgent); 498 visitor->trace(m_cssAgent);
485 visitor->trace(m_injectedScriptManager); 499 visitor->trace(m_injectedScriptManager);
486 visitor->trace(m_idToAnimation); 500 visitor->trace(m_idToAnimation);
487 visitor->trace(m_idToAnimationType); 501 visitor->trace(m_idToAnimationType);
488 visitor->trace(m_idToAnimationClone); 502 visitor->trace(m_idToAnimationClone);
489 #endif 503 #endif
490 InspectorBaseAgent::trace(visitor); 504 InspectorBaseAgent::trace(visitor);
491 } 505 }
492 506
493 } 507 }
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/inspector/InspectorAnimationAgent.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698