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

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

Issue 682423002: Devtools Animations: Show subtree animations for a given node (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 1 month 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
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"
11 #include "core/animation/AnimationNode.h" 11 #include "core/animation/AnimationNode.h"
12 #include "core/animation/AnimationPlayer.h" 12 #include "core/animation/AnimationPlayer.h"
13 #include "core/animation/ElementAnimation.h" 13 #include "core/animation/ElementAnimation.h"
14 #include "core/animation/KeyframeEffectModel.h" 14 #include "core/animation/KeyframeEffectModel.h"
15 #include "core/animation/StringKeyframe.h" 15 #include "core/animation/StringKeyframe.h"
16 #include "core/css/CSSKeyframeRule.h" 16 #include "core/css/CSSKeyframeRule.h"
17 #include "core/css/CSSKeyframesRule.h" 17 #include "core/css/CSSKeyframesRule.h"
18 #include "core/inspector/InspectorDOMAgent.h" 18 #include "core/inspector/InspectorDOMAgent.h"
19 #include "core/inspector/InspectorNodeIds.h"
19 #include "core/inspector/InspectorStyleSheet.h" 20 #include "core/inspector/InspectorStyleSheet.h"
20 #include "platform/Decimal.h" 21 #include "platform/Decimal.h"
21 22
22 namespace blink { 23 namespace blink {
23 24
24 InspectorAnimationAgent::InspectorAnimationAgent(InspectorDOMAgent* domAgent) 25 InspectorAnimationAgent::InspectorAnimationAgent(InspectorDOMAgent* domAgent)
25 : InspectorBaseAgent<InspectorAnimationAgent>("Animation") 26 : InspectorBaseAgent<InspectorAnimationAgent>("Animation")
26 , m_domAgent(domAgent) 27 , m_domAgent(domAgent)
27 , m_frontend(0) 28 , m_frontend(0)
28 { 29 {
29 } 30 }
30 31
31 void InspectorAnimationAgent::setFrontend(InspectorFrontend* frontend) 32 void InspectorAnimationAgent::setFrontend(InspectorFrontend* frontend)
32 { 33 {
33 m_frontend = frontend->animation(); 34 m_frontend = frontend->animation();
34 } 35 }
35 36
36 void InspectorAnimationAgent::clearFrontend() 37 void InspectorAnimationAgent::clearFrontend()
37 { 38 {
38 m_frontend = nullptr; 39 m_frontend = nullptr;
39 reset(); 40 reset();
40 } 41 }
41 42
42 void InspectorAnimationAgent::reset() 43 void InspectorAnimationAgent::reset()
43 { 44 {
44 m_idToAnimationPlayer.clear(); 45 m_idToAnimationPlayer.clear();
45 } 46 }
46 47
47 static PassRefPtr<TypeBuilder::Animation::AnimationNode> buildObjectForAnimation Node(AnimationNode* animationNode) 48 PassRefPtr<TypeBuilder::Animation::AnimationNode> InspectorAnimationAgent::build ObjectForAnimationNode(AnimationNode* animationNode)
48 { 49 {
49 RefPtr<TypeBuilder::Animation::AnimationNode> animationObject = TypeBuilder: :Animation::AnimationNode::create() 50 RefPtr<TypeBuilder::Animation::AnimationNode> animationObject = TypeBuilder: :Animation::AnimationNode::create()
50 .setStartDelay(animationNode->specifiedTiming().startDelay) 51 .setStartDelay(animationNode->specifiedTiming().startDelay)
51 .setPlaybackRate(animationNode->specifiedTiming().playbackRate) 52 .setPlaybackRate(animationNode->specifiedTiming().playbackRate)
52 .setIterationStart(animationNode->specifiedTiming().iterationStart) 53 .setIterationStart(animationNode->specifiedTiming().iterationStart)
53 .setIterationCount(animationNode->specifiedTiming().iterationCount) 54 .setIterationCount(animationNode->specifiedTiming().iterationCount)
54 .setDuration(animationNode->duration()) 55 .setDuration(animationNode->duration())
55 .setDirection(animationNode->specifiedTiming().direction) 56 .setDirection(animationNode->specifiedTiming().direction)
56 .setFillMode(animationNode->specifiedTiming().fillMode) 57 .setFillMode(animationNode->specifiedTiming().fillMode)
57 .setTimeFraction(animationNode->timeFraction()) 58 .setTimeFraction(animationNode->timeFraction())
58 .setName(animationNode->name()); 59 .setName(animationNode->name())
60 .setBackendNodeId(InspectorNodeIds::idForNode(toAnimation(animationNode) ->target()));
59 return animationObject.release(); 61 return animationObject.release();
60 } 62 }
61 63
62 static String playerId(AnimationPlayer& player) 64 static String playerId(AnimationPlayer& player)
63 { 65 {
64 return String::number(player.sequenceNumber()); 66 return String::number(player.sequenceNumber());
65 } 67 }
66 68
67 static PassRefPtr<TypeBuilder::Animation::AnimationPlayer> buildObjectForAnimati onPlayer(AnimationPlayer& animationPlayer, PassRefPtr<TypeBuilder::Animation::Ke yframesRule> keyframeRule = nullptr) 69 PassRefPtr<TypeBuilder::Animation::AnimationPlayer> InspectorAnimationAgent::bui ldObjectForAnimationPlayer(AnimationPlayer& animationPlayer, PassRefPtr<TypeBuil der::Animation::KeyframesRule> keyframeRule)
68 { 70 {
69 RefPtr<TypeBuilder::Animation::AnimationNode> animationObject = buildObjectF orAnimationNode(animationPlayer.source()); 71 RefPtr<TypeBuilder::Animation::AnimationNode> animationObject = buildObjectF orAnimationNode(animationPlayer.source());
70 if (keyframeRule) 72 if (keyframeRule)
71 animationObject->setKeyframesRule(keyframeRule); 73 animationObject->setKeyframesRule(keyframeRule);
72 74
73 RefPtr<TypeBuilder::Animation::AnimationPlayer> playerObject = TypeBuilder:: Animation::AnimationPlayer::create() 75 RefPtr<TypeBuilder::Animation::AnimationPlayer> playerObject = TypeBuilder:: Animation::AnimationPlayer::create()
74 .setId(playerId(animationPlayer)) 76 .setId(playerId(animationPlayer))
75 .setPausedState(animationPlayer.paused()) 77 .setPausedState(animationPlayer.paused())
76 .setPlayState(animationPlayer.playState()) 78 .setPlayState(animationPlayer.playState())
77 .setPlaybackRate(animationPlayer.playbackRate()) 79 .setPlaybackRate(animationPlayer.playbackRate())
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 if (!keyframe.get()->isStringKeyframe()) 131 if (!keyframe.get()->isStringKeyframe())
130 continue; 132 continue;
131 const StringKeyframe* stringKeyframe = toStringKeyframe(keyframe.get()); 133 const StringKeyframe* stringKeyframe = toStringKeyframe(keyframe.get());
132 keyframes->addItem(buildObjectForStringKeyframe(stringKeyframe)); 134 keyframes->addItem(buildObjectForStringKeyframe(stringKeyframe));
133 } 135 }
134 RefPtr<TypeBuilder::Animation::KeyframesRule> keyframesObject = TypeBuilder: :Animation::KeyframesRule::create() 136 RefPtr<TypeBuilder::Animation::KeyframesRule> keyframesObject = TypeBuilder: :Animation::KeyframesRule::create()
135 .setKeyframes(keyframes); 137 .setKeyframes(keyframes);
136 return keyframesObject.release(); 138 return keyframesObject.release();
137 } 139 }
138 140
139 static PassRefPtr<TypeBuilder::Animation::KeyframesRule> buildObjectForKeyframes Rule(const Element& element, const AnimationPlayer& player) 141 static PassRefPtr<TypeBuilder::Animation::KeyframesRule> buildObjectForKeyframes Rule(const AnimationPlayer& player)
140 { 142 {
141 StyleResolver& styleResolver = element.ownerDocument()->ensureStyleResolver( ); 143 const Element* element = toAnimation(player.source())->target();
142 CSSAnimations& cssAnimations = element.activeAnimations()->cssAnimations(); 144 StyleResolver& styleResolver = element->ownerDocument()->ensureStyleResolver ();
145 CSSAnimations& cssAnimations = element->activeAnimations()->cssAnimations();
143 const AtomicString animationName = cssAnimations.getAnimationNameForInspecto r(player); 146 const AtomicString animationName = cssAnimations.getAnimationNameForInspecto r(player);
144 RefPtr<TypeBuilder::Animation::KeyframesRule> keyframeRule; 147 RefPtr<TypeBuilder::Animation::KeyframesRule> keyframeRule;
145 148
146 if (!animationName.isNull()) { 149 if (!animationName.isNull()) {
147 // CSS Animations 150 // CSS Animations
148 const StyleRuleKeyframes* keyframes = cssAnimations.matchScopedKeyframes Rule(&styleResolver, &element, animationName.impl()); 151 const StyleRuleKeyframes* keyframes = cssAnimations.matchScopedKeyframes Rule(&styleResolver, element, animationName.impl());
149 keyframeRule = buildObjectForStyleRuleKeyframes(keyframes); 152 keyframeRule = buildObjectForStyleRuleKeyframes(keyframes);
150 } else { 153 } else {
151 // Web Animations 154 // Web Animations
152 keyframeRule = buildObjectForAnimationKeyframes(toAnimation(player.sourc e())); 155 keyframeRule = buildObjectForAnimationKeyframes(toAnimation(player.sourc e()));
153 } 156 }
154 157
155 return keyframeRule; 158 return keyframeRule;
156 } 159 }
157 160
158 void InspectorAnimationAgent::getAnimationPlayersForNode(ErrorString* errorStrin g, int nodeId, RefPtr<TypeBuilder::Array<TypeBuilder::Animation::AnimationPlayer > >& animationPlayersArray) 161 PassRefPtr<TypeBuilder::Array<TypeBuilder::Animation::AnimationPlayer> > Inspect orAnimationAgent::buildArrayForAnimationPlayers(Element& element, const WillBeHe apVector<RefPtrWillBeMember<AnimationPlayer> > players)
159 { 162 {
160 animationPlayersArray = TypeBuilder::Array<TypeBuilder::Animation::Animation Player>::create(); 163 RefPtr<TypeBuilder::Array<TypeBuilder::Animation::AnimationPlayer> > animati onPlayersArray = TypeBuilder::Array<TypeBuilder::Animation::AnimationPlayer>::cr eate();
164 for (const auto& it : players) {
165 AnimationPlayer& player = *(it.get());
166 Animation* animation = toAnimation(player.source());
167 if (!element.contains(animation->target()))
168 continue;
169 m_idToAnimationPlayer.set(playerId(player), &player);
170 RefPtr<TypeBuilder::Animation::KeyframesRule> keyframeRule = buildObject ForKeyframesRule(player);
171 animationPlayersArray->addItem(buildObjectForAnimationPlayer(player, key frameRule));
172 }
173 return animationPlayersArray.release();
174 }
175
176 void InspectorAnimationAgent::getAnimationPlayersForNode(ErrorString* errorStrin g, int nodeId, bool includeSubtreeAnimations, RefPtr<TypeBuilder::Array<TypeBuil der::Animation::AnimationPlayer> >& animationPlayersArray)
177 {
161 Element* element = m_domAgent->assertElement(errorString, nodeId); 178 Element* element = m_domAgent->assertElement(errorString, nodeId);
162 if (!element) 179 if (!element)
163 return; 180 return;
164 m_idToAnimationPlayer.clear(); 181 m_idToAnimationPlayer.clear();
165 WillBeHeapVector<RefPtrWillBeMember<AnimationPlayer> > players = ElementAnim ation::getAnimationPlayers(*element); 182 WillBeHeapVector<RefPtrWillBeMember<AnimationPlayer> > players;
166 for (WillBeHeapVector<RefPtrWillBeMember<AnimationPlayer> >::iterator it = p layers.begin(); it != players.end(); ++it) { 183 if (!includeSubtreeAnimations)
167 AnimationPlayer& player = *(it->get()); 184 players = ElementAnimation::getAnimationPlayers(*element);
168 m_idToAnimationPlayer.set(playerId(player), &player); 185 else
169 RefPtr<TypeBuilder::Animation::KeyframesRule> keyframeRule = buildObject ForKeyframesRule(*element, player); 186 players = element->ownerDocument()->timeline().getAnimationPlayers();
170 animationPlayersArray->addItem(buildObjectForAnimationPlayer(player, key frameRule)); 187 animationPlayersArray = buildArrayForAnimationPlayers(*element, players);
171 }
172 } 188 }
173 189
174 void InspectorAnimationAgent::pauseAnimationPlayer(ErrorString* errorString, con st String& id, RefPtr<TypeBuilder::Animation::AnimationPlayer>& animationPlayer) 190 void InspectorAnimationAgent::pauseAnimationPlayer(ErrorString* errorString, con st String& id, RefPtr<TypeBuilder::Animation::AnimationPlayer>& animationPlayer)
175 { 191 {
176 AnimationPlayer* player = assertAnimationPlayer(errorString, id); 192 AnimationPlayer* player = assertAnimationPlayer(errorString, id);
177 if (!player) 193 if (!player)
178 return; 194 return;
179 player->pause(); 195 player->pause();
180 animationPlayer = buildObjectForAnimationPlayer(*player); 196 animationPlayer = buildObjectForAnimationPlayer(*player);
181 } 197 }
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 void InspectorAnimationAgent::trace(Visitor* visitor) 236 void InspectorAnimationAgent::trace(Visitor* visitor)
221 { 237 {
222 #if ENABLE(OILPAN) 238 #if ENABLE(OILPAN)
223 visitor->trace(m_idToAnimationPlayer); 239 visitor->trace(m_idToAnimationPlayer);
224 visitor->trace(m_domAgent); 240 visitor->trace(m_domAgent);
225 #endif 241 #endif
226 InspectorBaseAgent::trace(visitor); 242 InspectorBaseAgent::trace(visitor);
227 } 243 }
228 244
229 } 245 }
OLDNEW
« no previous file with comments | « Source/core/inspector/InspectorAnimationAgent.h ('k') | Source/devtools/front_end/elements/AnimationsSidebarPane.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698