OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 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 | 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 "CCActiveAnimation.h" | 7 #include "CCActiveAnimation.h" |
8 | 8 |
9 #include "CCAnimationCurve.h" | 9 #include "CCAnimationCurve.h" |
10 #include "TraceEvent.h" | 10 #include "TraceEvent.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 "WaitingForNextTick", | 21 "WaitingForNextTick", |
22 "WaitingForTargetAvailability", | 22 "WaitingForTargetAvailability", |
23 "WaitingForStartTime", | 23 "WaitingForStartTime", |
24 "WaitingForDeletion", | 24 "WaitingForDeletion", |
25 "Running", | 25 "Running", |
26 "Paused", | 26 "Paused", |
27 "Finished", | 27 "Finished", |
28 "Aborted" | 28 "Aborted" |
29 }; | 29 }; |
30 | 30 |
31 COMPILE_ASSERT(static_cast<int>(cc::CCActiveAnimation::RunStateEnumSize) == arra
ysize(s_runStateNames), RunState_names_match_enum); | 31 COMPILE_ASSERT(static_cast<int>(cc::ActiveAnimation::RunStateEnumSize) == arrays
ize(s_runStateNames), RunState_names_match_enum); |
32 | 32 |
33 // This should match the TargetProperty enum. | 33 // This should match the TargetProperty enum. |
34 static const char* const s_targetPropertyNames[] = { | 34 static const char* const s_targetPropertyNames[] = { |
35 "Transform", | 35 "Transform", |
36 "Opacity" | 36 "Opacity" |
37 }; | 37 }; |
38 | 38 |
39 COMPILE_ASSERT(static_cast<int>(cc::CCActiveAnimation::TargetPropertyEnumSize) =
= arraysize(s_targetPropertyNames), TargetProperty_names_match_enum); | 39 COMPILE_ASSERT(static_cast<int>(cc::ActiveAnimation::TargetPropertyEnumSize) ==
arraysize(s_targetPropertyNames), TargetProperty_names_match_enum); |
40 | 40 |
41 } // namespace | 41 } // namespace |
42 | 42 |
43 namespace cc { | 43 namespace cc { |
44 | 44 |
45 scoped_ptr<CCActiveAnimation> CCActiveAnimation::create(scoped_ptr<CCAnimationCu
rve> curve, int animationId, int groupId, TargetProperty targetProperty) | 45 scoped_ptr<ActiveAnimation> ActiveAnimation::create(scoped_ptr<AnimationCurve> c
urve, int animationId, int groupId, TargetProperty targetProperty) |
46 { | 46 { |
47 return make_scoped_ptr(new CCActiveAnimation(curve.Pass(), animationId, grou
pId, targetProperty)); | 47 return make_scoped_ptr(new ActiveAnimation(curve.Pass(), animationId, groupI
d, targetProperty)); |
48 } | 48 } |
49 | 49 |
50 CCActiveAnimation::CCActiveAnimation(scoped_ptr<CCAnimationCurve> curve, int ani
mationId, int groupId, TargetProperty targetProperty) | 50 ActiveAnimation::ActiveAnimation(scoped_ptr<AnimationCurve> curve, int animation
Id, int groupId, TargetProperty targetProperty) |
51 : m_curve(curve.Pass()) | 51 : m_curve(curve.Pass()) |
52 , m_id(animationId) | 52 , m_id(animationId) |
53 , m_group(groupId) | 53 , m_group(groupId) |
54 , m_targetProperty(targetProperty) | 54 , m_targetProperty(targetProperty) |
55 , m_runState(WaitingForTargetAvailability) | 55 , m_runState(WaitingForTargetAvailability) |
56 , m_iterations(1) | 56 , m_iterations(1) |
57 , m_startTime(0) | 57 , m_startTime(0) |
58 , m_alternatesDirection(false) | 58 , m_alternatesDirection(false) |
59 , m_timeOffset(0) | 59 , m_timeOffset(0) |
60 , m_needsSynchronizedStartTime(false) | 60 , m_needsSynchronizedStartTime(false) |
61 , m_suspended(false) | 61 , m_suspended(false) |
62 , m_pauseTime(0) | 62 , m_pauseTime(0) |
63 , m_totalPausedTime(0) | 63 , m_totalPausedTime(0) |
64 , m_isControllingInstance(false) | 64 , m_isControllingInstance(false) |
65 { | 65 { |
66 } | 66 } |
67 | 67 |
68 CCActiveAnimation::~CCActiveAnimation() | 68 ActiveAnimation::~ActiveAnimation() |
69 { | 69 { |
70 if (m_runState == Running || m_runState == Paused) | 70 if (m_runState == Running || m_runState == Paused) |
71 setRunState(Aborted, 0); | 71 setRunState(Aborted, 0); |
72 } | 72 } |
73 | 73 |
74 void CCActiveAnimation::setRunState(RunState runState, double monotonicTime) | 74 void ActiveAnimation::setRunState(RunState runState, double monotonicTime) |
75 { | 75 { |
76 if (m_suspended) | 76 if (m_suspended) |
77 return; | 77 return; |
78 | 78 |
79 char nameBuffer[256]; | 79 char nameBuffer[256]; |
80 base::snprintf(nameBuffer, sizeof(nameBuffer), "%s-%d%s", s_targetPropertyNa
mes[m_targetProperty], m_group, m_isControllingInstance ? "(impl)" : ""); | 80 base::snprintf(nameBuffer, sizeof(nameBuffer), "%s-%d%s", s_targetPropertyNa
mes[m_targetProperty], m_group, m_isControllingInstance ? "(impl)" : ""); |
81 | 81 |
82 bool isWaitingToStart = m_runState == WaitingForNextTick | 82 bool isWaitingToStart = m_runState == WaitingForNextTick |
83 || m_runState == WaitingForTargetAvailability | 83 || m_runState == WaitingForTargetAvailability |
84 || m_runState == WaitingForStartTime; | 84 || m_runState == WaitingForStartTime; |
85 | 85 |
86 if (isWaitingToStart && runState == Running) | 86 if (isWaitingToStart && runState == Running) |
87 TRACE_EVENT_ASYNC_BEGIN1("cc", "CCActiveAnimation", this, "Name", TRACE_
STR_COPY(nameBuffer)); | 87 TRACE_EVENT_ASYNC_BEGIN1("cc", "ActiveAnimation", this, "Name", TRACE_ST
R_COPY(nameBuffer)); |
88 | 88 |
89 bool wasFinished = isFinished(); | 89 bool wasFinished = isFinished(); |
90 | 90 |
91 const char* oldRunStateName = s_runStateNames[m_runState]; | 91 const char* oldRunStateName = s_runStateNames[m_runState]; |
92 | 92 |
93 if (runState == Running && m_runState == Paused) | 93 if (runState == Running && m_runState == Paused) |
94 m_totalPausedTime += monotonicTime - m_pauseTime; | 94 m_totalPausedTime += monotonicTime - m_pauseTime; |
95 else if (runState == Paused) | 95 else if (runState == Paused) |
96 m_pauseTime = monotonicTime; | 96 m_pauseTime = monotonicTime; |
97 m_runState = runState; | 97 m_runState = runState; |
98 | 98 |
99 const char* newRunStateName = s_runStateNames[runState]; | 99 const char* newRunStateName = s_runStateNames[runState]; |
100 | 100 |
101 if (!wasFinished && isFinished()) | 101 if (!wasFinished && isFinished()) |
102 TRACE_EVENT_ASYNC_END0("cc", "CCActiveAnimation", this); | 102 TRACE_EVENT_ASYNC_END0("cc", "ActiveAnimation", this); |
103 | 103 |
104 char stateBuffer[256]; | 104 char stateBuffer[256]; |
105 base::snprintf(stateBuffer, sizeof(stateBuffer), "%s->%s", oldRunStateName,
newRunStateName); | 105 base::snprintf(stateBuffer, sizeof(stateBuffer), "%s->%s", oldRunStateName,
newRunStateName); |
106 | 106 |
107 TRACE_EVENT_INSTANT2("cc", "CCLayerAnimationController::setRunState", "Name"
, TRACE_STR_COPY(nameBuffer), "State", TRACE_STR_COPY(stateBuffer)); | 107 TRACE_EVENT_INSTANT2("cc", "LayerAnimationController::setRunState", "Name",
TRACE_STR_COPY(nameBuffer), "State", TRACE_STR_COPY(stateBuffer)); |
108 } | 108 } |
109 | 109 |
110 void CCActiveAnimation::suspend(double monotonicTime) | 110 void ActiveAnimation::suspend(double monotonicTime) |
111 { | 111 { |
112 setRunState(Paused, monotonicTime); | 112 setRunState(Paused, monotonicTime); |
113 m_suspended = true; | 113 m_suspended = true; |
114 } | 114 } |
115 | 115 |
116 void CCActiveAnimation::resume(double monotonicTime) | 116 void ActiveAnimation::resume(double monotonicTime) |
117 { | 117 { |
118 m_suspended = false; | 118 m_suspended = false; |
119 setRunState(Running, monotonicTime); | 119 setRunState(Running, monotonicTime); |
120 } | 120 } |
121 | 121 |
122 bool CCActiveAnimation::isFinishedAt(double monotonicTime) const | 122 bool ActiveAnimation::isFinishedAt(double monotonicTime) const |
123 { | 123 { |
124 if (isFinished()) | 124 if (isFinished()) |
125 return true; | 125 return true; |
126 | 126 |
127 if (m_needsSynchronizedStartTime) | 127 if (m_needsSynchronizedStartTime) |
128 return false; | 128 return false; |
129 | 129 |
130 return m_runState == Running | 130 return m_runState == Running |
131 && m_iterations >= 0 | 131 && m_iterations >= 0 |
132 && m_iterations * m_curve->duration() <= monotonicTime - startTime() - m
_totalPausedTime; | 132 && m_iterations * m_curve->duration() <= monotonicTime - startTime() - m
_totalPausedTime; |
133 } | 133 } |
134 | 134 |
135 double CCActiveAnimation::trimTimeToCurrentIteration(double monotonicTime) const | 135 double ActiveAnimation::trimTimeToCurrentIteration(double monotonicTime) const |
136 { | 136 { |
137 double trimmed = monotonicTime + m_timeOffset; | 137 double trimmed = monotonicTime + m_timeOffset; |
138 | 138 |
139 // If we're paused, time is 'stuck' at the pause time. | 139 // If we're paused, time is 'stuck' at the pause time. |
140 if (m_runState == Paused) | 140 if (m_runState == Paused) |
141 trimmed = m_pauseTime; | 141 trimmed = m_pauseTime; |
142 | 142 |
143 // Returned time should always be relative to the start time and should subt
ract | 143 // Returned time should always be relative to the start time and should subt
ract |
144 // all time spent paused. | 144 // all time spent paused. |
145 trimmed -= m_startTime + m_totalPausedTime; | 145 trimmed -= m_startTime + m_totalPausedTime; |
(...skipping 27 matching lines...) Expand all Loading... |
173 // Calculate x where trimmed = x + n * m_curve->duration() for some positive
integer n. | 173 // Calculate x where trimmed = x + n * m_curve->duration() for some positive
integer n. |
174 trimmed = fmod(trimmed, m_curve->duration()); | 174 trimmed = fmod(trimmed, m_curve->duration()); |
175 | 175 |
176 // If we're alternating and on an odd iteration, reverse the direction. | 176 // If we're alternating and on an odd iteration, reverse the direction. |
177 if (m_alternatesDirection && iteration % 2 == 1) | 177 if (m_alternatesDirection && iteration % 2 == 1) |
178 return m_curve->duration() - trimmed; | 178 return m_curve->duration() - trimmed; |
179 | 179 |
180 return trimmed; | 180 return trimmed; |
181 } | 181 } |
182 | 182 |
183 scoped_ptr<CCActiveAnimation> CCActiveAnimation::clone(InstanceType instanceType
) const | 183 scoped_ptr<ActiveAnimation> ActiveAnimation::clone(InstanceType instanceType) co
nst |
184 { | 184 { |
185 return cloneAndInitialize(instanceType, m_runState, m_startTime); | 185 return cloneAndInitialize(instanceType, m_runState, m_startTime); |
186 } | 186 } |
187 | 187 |
188 scoped_ptr<CCActiveAnimation> CCActiveAnimation::cloneAndInitialize(InstanceType
instanceType, RunState initialRunState, double startTime) const | 188 scoped_ptr<ActiveAnimation> ActiveAnimation::cloneAndInitialize(InstanceType ins
tanceType, RunState initialRunState, double startTime) const |
189 { | 189 { |
190 scoped_ptr<CCActiveAnimation> toReturn(new CCActiveAnimation(m_curve->clone(
), m_id, m_group, m_targetProperty)); | 190 scoped_ptr<ActiveAnimation> toReturn(new ActiveAnimation(m_curve->clone(), m
_id, m_group, m_targetProperty)); |
191 toReturn->m_runState = initialRunState; | 191 toReturn->m_runState = initialRunState; |
192 toReturn->m_iterations = m_iterations; | 192 toReturn->m_iterations = m_iterations; |
193 toReturn->m_startTime = startTime; | 193 toReturn->m_startTime = startTime; |
194 toReturn->m_pauseTime = m_pauseTime; | 194 toReturn->m_pauseTime = m_pauseTime; |
195 toReturn->m_totalPausedTime = m_totalPausedTime; | 195 toReturn->m_totalPausedTime = m_totalPausedTime; |
196 toReturn->m_timeOffset = m_timeOffset; | 196 toReturn->m_timeOffset = m_timeOffset; |
197 toReturn->m_alternatesDirection = m_alternatesDirection; | 197 toReturn->m_alternatesDirection = m_alternatesDirection; |
198 toReturn->m_isControllingInstance = instanceType == ControllingInstance; | 198 toReturn->m_isControllingInstance = instanceType == ControllingInstance; |
199 return toReturn.Pass(); | 199 return toReturn.Pass(); |
200 } | 200 } |
201 | 201 |
202 void CCActiveAnimation::pushPropertiesTo(CCActiveAnimation* other) const | 202 void ActiveAnimation::pushPropertiesTo(ActiveAnimation* other) const |
203 { | 203 { |
204 // Currently, we only push changes due to pausing and resuming animations on
the main thread. | 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) { | 205 if (m_runState == ActiveAnimation::Paused || other->m_runState == ActiveAnim
ation::Paused) { |
206 other->m_runState = m_runState; | 206 other->m_runState = m_runState; |
207 other->m_pauseTime = m_pauseTime; | 207 other->m_pauseTime = m_pauseTime; |
208 other->m_totalPausedTime = m_totalPausedTime; | 208 other->m_totalPausedTime = m_totalPausedTime; |
209 } | 209 } |
210 } | 210 } |
211 | 211 |
212 } // namespace cc | 212 } // namespace cc |
OLD | NEW |