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

Side by Side Diff: cc/CCActiveAnimation.cpp

Issue 11122003: [cc] Rename all cc/ filenames to Chromium style (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 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 | « cc/CCActiveAnimation.h ('k') | cc/CCAnimationCurve.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "config.h"
6
7 #include "CCActiveAnimation.h"
8
9 #include "CCAnimationCurve.h"
10 #include "TraceEvent.h"
11 #ifdef LOG
12 #undef LOG
13 #endif
14 #include "base/string_util.h"
15 #include <cmath>
16
17 namespace {
18
19 // This should match the RunState enum.
20 static const char* const s_runStateNames[] = {
21 "WaitingForNextTick",
22 "WaitingForTargetAvailability",
23 "WaitingForStartTime",
24 "WaitingForDeletion",
25 "Running",
26 "Paused",
27 "Finished",
28 "Aborted"
29 };
30
31 COMPILE_ASSERT(static_cast<int>(cc::CCActiveAnimation::RunStateEnumSize) == arra ysize(s_runStateNames), RunState_names_match_enum);
32
33 // This should match the TargetProperty enum.
34 static const char* const s_targetPropertyNames[] = {
35 "Transform",
36 "Opacity"
37 };
38
39 COMPILE_ASSERT(static_cast<int>(cc::CCActiveAnimation::TargetPropertyEnumSize) = = arraysize(s_targetPropertyNames), TargetProperty_names_match_enum);
40
41 } // namespace
42
43 namespace cc {
44
45 scoped_ptr<CCActiveAnimation> CCActiveAnimation::create(scoped_ptr<CCAnimationCu rve> curve, int animationId, int groupId, TargetProperty targetProperty)
46 {
47 return make_scoped_ptr(new CCActiveAnimation(curve.Pass(), animationId, grou pId, targetProperty));
48 }
49
50 CCActiveAnimation::CCActiveAnimation(scoped_ptr<CCAnimationCurve> curve, int ani mationId, int groupId, TargetProperty targetProperty)
51 : m_curve(curve.Pass())
52 , m_id(animationId)
53 , m_group(groupId)
54 , m_targetProperty(targetProperty)
55 , m_runState(WaitingForTargetAvailability)
56 , m_iterations(1)
57 , m_startTime(0)
58 , m_alternatesDirection(false)
59 , m_timeOffset(0)
60 , m_needsSynchronizedStartTime(false)
61 , m_suspended(false)
62 , m_pauseTime(0)
63 , m_totalPausedTime(0)
64 , m_isControllingInstance(false)
65 {
66 }
67
68 CCActiveAnimation::~CCActiveAnimation()
69 {
70 if (m_runState == Running || m_runState == Paused)
71 setRunState(Aborted, 0);
72 }
73
74 void CCActiveAnimation::setRunState(RunState runState, double monotonicTime)
75 {
76 if (m_suspended)
77 return;
78
79 char nameBuffer[256];
80 base::snprintf(nameBuffer, sizeof(nameBuffer), "%s-%d%s", s_targetPropertyNa mes[m_targetProperty], m_group, m_isControllingInstance ? "(impl)" : "");
81
82 bool isWaitingToStart = m_runState == WaitingForNextTick
83 || m_runState == WaitingForTargetAvailability
84 || m_runState == WaitingForStartTime;
85
86 if (isWaitingToStart && runState == Running)
87 TRACE_EVENT_ASYNC_BEGIN1("cc", "CCActiveAnimation", this, "Name", TRACE_ STR_COPY(nameBuffer));
88
89 bool wasFinished = isFinished();
90
91 const char* oldRunStateName = s_runStateNames[m_runState];
92
93 if (runState == Running && m_runState == Paused)
94 m_totalPausedTime += monotonicTime - m_pauseTime;
95 else if (runState == Paused)
96 m_pauseTime = monotonicTime;
97 m_runState = runState;
98
99 const char* newRunStateName = s_runStateNames[runState];
100
101 if (!wasFinished && isFinished())
102 TRACE_EVENT_ASYNC_END0("cc", "CCActiveAnimation", this);
103
104 char stateBuffer[256];
105 base::snprintf(stateBuffer, sizeof(stateBuffer), "%s->%s", oldRunStateName, newRunStateName);
106
107 TRACE_EVENT_INSTANT2("cc", "CCLayerAnimationController::setRunState", "Name" , TRACE_STR_COPY(nameBuffer), "State", TRACE_STR_COPY(stateBuffer));
108 }
109
110 void CCActiveAnimation::suspend(double monotonicTime)
111 {
112 setRunState(Paused, monotonicTime);
113 m_suspended = true;
114 }
115
116 void CCActiveAnimation::resume(double monotonicTime)
117 {
118 m_suspended = false;
119 setRunState(Running, monotonicTime);
120 }
121
122 bool CCActiveAnimation::isFinishedAt(double monotonicTime) const
123 {
124 if (isFinished())
125 return true;
126
127 if (m_needsSynchronizedStartTime)
128 return false;
129
130 return m_runState == Running
131 && m_iterations >= 0
132 && m_iterations * m_curve->duration() <= monotonicTime - startTime() - m _totalPausedTime;
133 }
134
135 double CCActiveAnimation::trimTimeToCurrentIteration(double monotonicTime) const
136 {
137 double trimmed = monotonicTime + m_timeOffset;
138
139 // If we're paused, time is 'stuck' at the pause time.
140 if (m_runState == Paused)
141 trimmed = m_pauseTime;
142
143 // Returned time should always be relative to the start time and should subt ract
144 // all time spent paused.
145 trimmed -= m_startTime + m_totalPausedTime;
146
147 // Zero is always the start of the animation.
148 if (trimmed <= 0)
149 return 0;
150
151 // Always return zero if we have no iterations.
152 if (!m_iterations)
153 return 0;
154
155 // Don't attempt to trim if we have no duration.
156 if (m_curve->duration() <= 0)
157 return 0;
158
159 // If less than an iteration duration, just return trimmed.
160 if (trimmed < m_curve->duration())
161 return trimmed;
162
163 // If greater than or equal to the total duration, return iteration duration .
164 if (m_iterations >= 0 && trimmed >= m_curve->duration() * m_iterations) {
165 if (m_alternatesDirection && !(m_iterations % 2))
166 return 0;
167 return m_curve->duration();
168 }
169
170 // We need to know the current iteration if we're alternating.
171 int iteration = static_cast<int>(trimmed / m_curve->duration());
172
173 // Calculate x where trimmed = x + n * m_curve->duration() for some positive integer n.
174 trimmed = fmod(trimmed, m_curve->duration());
175
176 // If we're alternating and on an odd iteration, reverse the direction.
177 if (m_alternatesDirection && iteration % 2 == 1)
178 return m_curve->duration() - trimmed;
179
180 return trimmed;
181 }
182
183 scoped_ptr<CCActiveAnimation> CCActiveAnimation::clone(InstanceType instanceType ) const
184 {
185 return cloneAndInitialize(instanceType, m_runState, m_startTime);
186 }
187
188 scoped_ptr<CCActiveAnimation> CCActiveAnimation::cloneAndInitialize(InstanceType instanceType, RunState initialRunState, double startTime) const
189 {
190 scoped_ptr<CCActiveAnimation> toReturn(new CCActiveAnimation(m_curve->clone( ), m_id, m_group, m_targetProperty));
191 toReturn->m_runState = initialRunState;
192 toReturn->m_iterations = m_iterations;
193 toReturn->m_startTime = startTime;
194 toReturn->m_pauseTime = m_pauseTime;
195 toReturn->m_totalPausedTime = m_totalPausedTime;
196 toReturn->m_timeOffset = m_timeOffset;
197 toReturn->m_alternatesDirection = m_alternatesDirection;
198 toReturn->m_isControllingInstance = instanceType == ControllingInstance;
199 return toReturn.Pass();
200 }
201
202 void CCActiveAnimation::pushPropertiesTo(CCActiveAnimation* other) const
203 {
204 // Currently, we only push changes due to pausing and resuming animations on the main thread.
205 if (m_runState == CCActiveAnimation::Paused || other->m_runState == CCActive Animation::Paused) {
206 other->m_runState = m_runState;
207 other->m_pauseTime = m_pauseTime;
208 other->m_totalPausedTime = m_totalPausedTime;
209 }
210 }
211
212 } // namespace cc
OLDNEW
« no previous file with comments | « cc/CCActiveAnimation.h ('k') | cc/CCAnimationCurve.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698