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

Side by Side Diff: Source/core/animation/AnimationPlayer.h

Issue 638313002: Web Animations: Overhaul and trace play state in AnimationPlayer (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Don't set compositor pending when paused for testing Created 6 years, 2 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | Source/core/animation/AnimationPlayer.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 // 0 - if this player requires an update on the next frame 67 // 0 - if this player requires an update on the next frame
68 // n - if this player requires an update after 'n' units of time 68 // n - if this player requires an update after 'n' units of time
69 double timeToEffectChange(); 69 double timeToEffectChange();
70 70
71 void cancel(); 71 void cancel();
72 72
73 double currentTime(bool& isNull); 73 double currentTime(bool& isNull);
74 double currentTime(); 74 double currentTime();
75 void setCurrentTime(double newCurrentTime); 75 void setCurrentTime(double newCurrentTime);
76 76
77 double calculateCurrentTime() const; 77 double currentTimeInternal() const;
78 double currentTimeInternal(); 78
79 void setCurrentTimeInternal(double newCurrentTime, TimingUpdateReason = Timi ngUpdateOnDemand); 79 void setCurrentTimeInternal(double newCurrentTime, TimingUpdateReason = Timi ngUpdateOnDemand);
80
81 bool paused() const { return m_paused && !m_isPausedForTesting; } 80 bool paused() const { return m_paused && !m_isPausedForTesting; }
82 String playState(); 81 static const char* playStateString(AnimationPlayState);
83 AnimationPlayState playStateInternal(); 82 String playState() { return playStateString(playStateInternal()); }
83 AnimationPlayState playStateInternal() const;
84 84
85 void pause(); 85 void pause();
86 void play(); 86 void play();
87 void reverse(); 87 void reverse();
88 void finish(ExceptionState&); 88 void finish(ExceptionState&);
89 bool finished() { return !m_idle && limited(currentTimeInternal()); } 89 bool finished() const { return m_playState != Idle && limited(currentTimeInt ernal()); }
90 bool playing() { return !(finished() || m_paused || m_isPausedForTesting || m_idle); } 90 bool playing() const { return !(playStateInternal() == Idle || finished() || m_paused || m_isPausedForTesting); }
91 // FIXME: Resolve whether finished() should just return the flag, and 91 // FIXME: Resolve whether finished() should just return the flag, and
92 // remove this method. 92 // remove this method.
93 bool finishedInternal() const { return m_finished; } 93 bool finishedInternal() const { return m_finished; }
94 94
95 DEFINE_ATTRIBUTE_EVENT_LISTENER(finish); 95 DEFINE_ATTRIBUTE_EVENT_LISTENER(finish);
96 96
97 virtual const AtomicString& interfaceName() const override; 97 virtual const AtomicString& interfaceName() const override;
98 virtual ExecutionContext* executionContext() const override; 98 virtual ExecutionContext* executionContext() const override;
99 virtual bool hasPendingActivity() const override; 99 virtual bool hasPendingActivity() const override;
100 virtual void stop() override; 100 virtual void stop() override;
(...skipping 28 matching lines...) Expand all
129 129
130 void setOutdated(); 130 void setOutdated();
131 bool outdated() { return m_outdated; } 131 bool outdated() { return m_outdated; }
132 132
133 bool canStartAnimationOnCompositor(); 133 bool canStartAnimationOnCompositor();
134 bool maybeStartAnimationOnCompositor(); 134 bool maybeStartAnimationOnCompositor();
135 void cancelAnimationOnCompositor(); 135 void cancelAnimationOnCompositor();
136 bool hasActiveAnimationsOnCompositor(); 136 bool hasActiveAnimationsOnCompositor();
137 void setCompositorPending(bool sourceChanged = false); 137 void setCompositorPending(bool sourceChanged = false);
138 void notifyCompositorStartTime(double timelineTime); 138 void notifyCompositorStartTime(double timelineTime);
139 void notifyStartTime(double timelineTime);
139 140
140 141
141 void preCommit(bool startOnCompositor); 142 void preCommit(bool startOnCompositor);
142 void postCommit(double timelineTime); 143 void postCommit(double timelineTime);
143 144
144 unsigned sequenceNumber() const { return m_sequenceNumber; } 145 unsigned sequenceNumber() const { return m_sequenceNumber; }
145 146
146 static bool hasLowerPriority(AnimationPlayer* player1, AnimationPlayer* play er2) 147 static bool hasLowerPriority(AnimationPlayer* player1, AnimationPlayer* play er2)
147 { 148 {
148 return player1->sequenceNumber() < player2->sequenceNumber(); 149 return player1->sequenceNumber() < player2->sequenceNumber();
149 } 150 }
150 151
151 #if !ENABLE(OILPAN) 152 #if !ENABLE(OILPAN)
152 // Checks if the AnimationStack is the last reference holder to the Player. 153 // Checks if the AnimationStack is the last reference holder to the Player.
153 // This won't be needed when AnimationPlayer is moved to Oilpan. 154 // This won't be needed when AnimationPlayer is moved to Oilpan.
154 bool canFree() const; 155 bool canFree() const;
155 #endif 156 #endif
156 157
157 virtual bool addEventListener(const AtomicString& eventType, PassRefPtr<Even tListener>, bool useCapture = false) override; 158 virtual bool addEventListener(const AtomicString& eventType, PassRefPtr<Even tListener>, bool useCapture = false) override;
158 159
159 virtual void trace(Visitor*) override; 160 virtual void trace(Visitor*) override;
160 161
161 private: 162 private:
162 AnimationPlayer(ExecutionContext*, AnimationTimeline&, AnimationNode*); 163 AnimationPlayer(ExecutionContext*, AnimationTimeline&, AnimationNode*);
164
163 double sourceEnd() const; 165 double sourceEnd() const;
164 bool limited(double currentTime) const; 166 bool limited(double currentTime) const;
167
168 AnimationPlayState calculatePlayState();
169 double calculateCurrentTime() const;
170
171 void unpauseInternal();
172 void uncancel();
165 void setPlaybackRateInternal(double); 173 void setPlaybackRateInternal(double);
166 void updateCurrentTimingState(TimingUpdateReason); 174 void updateCurrentTimingState(TimingUpdateReason);
167 void unpauseInternal();
168 void uncancel();
169 void setFinished(bool);
170 175
176
177 AnimationPlayState m_playState;
171 double m_playbackRate; 178 double m_playbackRate;
172
173 double m_startTime; 179 double m_startTime;
174 double m_holdTime; 180 double m_holdTime;
175 181
176 unsigned m_sequenceNumber; 182 unsigned m_sequenceNumber;
177 183
178 RefPtrWillBeMember<AnimationNode> m_content; 184 RefPtrWillBeMember<AnimationNode> m_content;
179 RawPtrWillBeMember<AnimationTimeline> m_timeline; 185 RawPtrWillBeMember<AnimationTimeline> m_timeline;
180 // Reflects all pausing, including via pauseForTesting(). 186 // Reflects all pausing, including via pauseForTesting().
181 bool m_paused; 187 bool m_paused;
182 bool m_held; 188 bool m_held;
(...skipping 25 matching lines...) Expand all
208 , sourceChanged(false) 214 , sourceChanged(false)
209 , pendingAction(Start) 215 , pendingAction(Start)
210 { } 216 { }
211 double startTime; 217 double startTime;
212 double holdTime; 218 double holdTime;
213 double playbackRate; 219 double playbackRate;
214 bool sourceChanged; 220 bool sourceChanged;
215 CompositorAction pendingAction; 221 CompositorAction pendingAction;
216 }; 222 };
217 223
224 enum CompositorPendingChange {
225 SetCompositorPending,
226 SetCompositorPendingWithSourceChanged,
227 DoNotSetCompositorPending,
228 };
229
230 class PlayStateUpdateScope {
231 STACK_ALLOCATED();
232 public:
233 PlayStateUpdateScope(AnimationPlayer&, TimingUpdateReason, CompositorPen dingChange = SetCompositorPending);
234 ~PlayStateUpdateScope();
235 private:
236 AnimationPlayer& m_player;
237 AnimationPlayState m_initial;
238 CompositorPendingChange m_compositorPendingChange;
239 };
240
218 // This mirrors the known compositor state. It is created when a compositor 241 // This mirrors the known compositor state. It is created when a compositor
219 // animation is started. Updated once the start time is known and each time 242 // animation is started. Updated once the start time is known and each time
220 // modifications are pushed to the compositor. 243 // modifications are pushed to the compositor.
221 OwnPtr<CompositorState> m_compositorState; 244 OwnPtr<CompositorState> m_compositorState;
222 bool m_compositorPending; 245 bool m_compositorPending;
223 bool m_currentTimePending; 246 bool m_currentTimePending;
224 bool m_idle;
225 }; 247 };
226 248
227 } // namespace blink 249 } // namespace blink
228 250
229 #endif 251 #endif
OLDNEW
« no previous file with comments | « no previous file | Source/core/animation/AnimationPlayer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698