OLD | NEW |
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 "platform/scroll/ScrollAnimatorCompositorCoordinator.h" | 5 #include "platform/scroll/ScrollAnimatorCompositorCoordinator.h" |
6 | 6 |
7 #include "cc/animation/scroll_offset_animation_curve.h" | 7 #include "cc/animation/scroll_offset_animation_curve.h" |
8 #include "platform/RuntimeEnabledFeatures.h" | 8 #include "platform/RuntimeEnabledFeatures.h" |
9 #include "platform/animation/CompositorAnimationPlayer.h" | 9 #include "platform/animation/CompositorAnimationPlayer.h" |
10 #include "platform/animation/CompositorAnimationTimeline.h" | 10 #include "platform/animation/CompositorAnimationTimeline.h" |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 bool ScrollAnimatorCompositorCoordinator::hasAnimationThatRequiresService() cons
t | 53 bool ScrollAnimatorCompositorCoordinator::hasAnimationThatRequiresService() cons
t |
54 { | 54 { |
55 switch (m_runState) { | 55 switch (m_runState) { |
56 case RunState::Idle: | 56 case RunState::Idle: |
57 case RunState::RunningOnCompositor: | 57 case RunState::RunningOnCompositor: |
58 return false; | 58 return false; |
59 case RunState::PostAnimationCleanup: | 59 case RunState::PostAnimationCleanup: |
60 case RunState::WaitingToSendToCompositor: | 60 case RunState::WaitingToSendToCompositor: |
61 case RunState::RunningOnMainThread: | 61 case RunState::RunningOnMainThread: |
62 case RunState::RunningOnCompositorButNeedsUpdate: | 62 case RunState::RunningOnCompositorButNeedsUpdate: |
| 63 case RunState::RunningOnCompositorButNeedsTakeover: |
63 case RunState::WaitingToCancelOnCompositor: | 64 case RunState::WaitingToCancelOnCompositor: |
64 return true; | 65 return true; |
65 } | 66 } |
66 ASSERT_NOT_REACHED(); | 67 ASSERT_NOT_REACHED(); |
67 return false; | 68 return false; |
68 } | 69 } |
69 | 70 |
70 bool ScrollAnimatorCompositorCoordinator::addAnimation( | 71 bool ScrollAnimatorCompositorCoordinator::addAnimation( |
71 PassOwnPtr<CompositorAnimation> animation) | 72 PassOwnPtr<CompositorAnimation> animation) |
72 { | 73 { |
(...skipping 16 matching lines...) Expand all Loading... |
89 m_compositorPlayer->abortAnimation(m_compositorAnimationId); | 90 m_compositorPlayer->abortAnimation(m_compositorAnimationId); |
90 } | 91 } |
91 | 92 |
92 void ScrollAnimatorCompositorCoordinator::cancelAnimation() | 93 void ScrollAnimatorCompositorCoordinator::cancelAnimation() |
93 { | 94 { |
94 switch (m_runState) { | 95 switch (m_runState) { |
95 case RunState::Idle: | 96 case RunState::Idle: |
96 case RunState::WaitingToCancelOnCompositor: | 97 case RunState::WaitingToCancelOnCompositor: |
97 case RunState::PostAnimationCleanup: | 98 case RunState::PostAnimationCleanup: |
98 break; | 99 break; |
| 100 case RunState::RunningOnCompositorButNeedsTakeover: |
99 case RunState::WaitingToSendToCompositor: | 101 case RunState::WaitingToSendToCompositor: |
100 if (m_compositorAnimationId) { | 102 if (m_compositorAnimationId) { |
101 // We still have a previous animation running on the compositor. | 103 // We still have a previous animation running on the compositor. |
102 m_runState = RunState::WaitingToCancelOnCompositor; | 104 m_runState = RunState::WaitingToCancelOnCompositor; |
103 } else { | 105 } else { |
104 resetAnimationState(); | 106 resetAnimationState(); |
105 } | 107 } |
106 break; | 108 break; |
107 case RunState::RunningOnMainThread: | 109 case RunState::RunningOnMainThread: |
108 m_runState = RunState::PostAnimationCleanup; | 110 m_runState = RunState::PostAnimationCleanup; |
109 break; | 111 break; |
110 case RunState::RunningOnCompositorButNeedsUpdate: | 112 case RunState::RunningOnCompositorButNeedsUpdate: |
111 case RunState::RunningOnCompositor: | 113 case RunState::RunningOnCompositor: |
112 m_runState = RunState::WaitingToCancelOnCompositor; | 114 m_runState = RunState::WaitingToCancelOnCompositor; |
113 | 115 |
114 // Get serviced the next time compositor updates are allowed. | 116 // Get serviced the next time compositor updates are allowed. |
115 scrollableArea()->registerForAnimation(); | 117 scrollableArea()->registerForAnimation(); |
116 } | 118 } |
117 } | 119 } |
118 | 120 |
| 121 void ScrollAnimatorCompositorCoordinator::takeoverCompositorAnimation() |
| 122 { |
| 123 switch (m_runState) { |
| 124 case RunState::Idle: |
| 125 case RunState::WaitingToCancelOnCompositor: |
| 126 case RunState::PostAnimationCleanup: |
| 127 case RunState::RunningOnCompositorButNeedsTakeover: |
| 128 case RunState::WaitingToSendToCompositor: |
| 129 case RunState::RunningOnMainThread: |
| 130 break; |
| 131 case RunState::RunningOnCompositorButNeedsUpdate: |
| 132 case RunState::RunningOnCompositor: |
| 133 // We call abortAnimation that makes changes to the animation running on |
| 134 // the compositor. Thus, this function should only be called when in |
| 135 // CompositingClean state. |
| 136 abortAnimation(); |
| 137 |
| 138 m_runState = RunState::RunningOnCompositorButNeedsTakeover; |
| 139 |
| 140 // Get serviced the next time compositor updates are allowed. |
| 141 scrollableArea()->registerForAnimation(); |
| 142 } |
| 143 } |
| 144 |
119 void ScrollAnimatorCompositorCoordinator::compositorAnimationFinished( | 145 void ScrollAnimatorCompositorCoordinator::compositorAnimationFinished( |
120 int groupId) | 146 int groupId) |
121 { | 147 { |
122 if (m_compositorAnimationGroupId != groupId) | 148 if (m_compositorAnimationGroupId != groupId) |
123 return; | 149 return; |
124 | 150 |
125 m_compositorAnimationId = 0; | 151 m_compositorAnimationId = 0; |
126 m_compositorAnimationGroupId = 0; | 152 m_compositorAnimationGroupId = 0; |
127 | 153 |
128 switch (m_runState) { | 154 switch (m_runState) { |
129 case RunState::Idle: | 155 case RunState::Idle: |
130 case RunState::PostAnimationCleanup: | 156 case RunState::PostAnimationCleanup: |
131 case RunState::RunningOnMainThread: | 157 case RunState::RunningOnMainThread: |
132 ASSERT_NOT_REACHED(); | 158 ASSERT_NOT_REACHED(); |
133 break; | 159 break; |
134 case RunState::WaitingToSendToCompositor: | 160 case RunState::WaitingToSendToCompositor: |
135 break; | 161 break; |
136 case RunState::RunningOnCompositor: | 162 case RunState::RunningOnCompositor: |
137 case RunState::RunningOnCompositorButNeedsUpdate: | 163 case RunState::RunningOnCompositorButNeedsUpdate: |
| 164 case RunState::RunningOnCompositorButNeedsTakeover: |
138 case RunState::WaitingToCancelOnCompositor: | 165 case RunState::WaitingToCancelOnCompositor: |
139 m_runState = RunState::PostAnimationCleanup; | 166 m_runState = RunState::PostAnimationCleanup; |
140 // Get serviced the next time compositor updates are allowed. | 167 // Get serviced the next time compositor updates are allowed. |
141 if (scrollableArea()) | 168 if (scrollableArea()) |
142 scrollableArea()->registerForAnimation(); | 169 scrollableArea()->registerForAnimation(); |
143 else | 170 else |
144 resetAnimationState(); | 171 resetAnimationState(); |
145 } | 172 } |
146 } | 173 } |
147 | 174 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 // animation. | 221 // animation. |
195 notifyCompositorAnimationFinished(group); | 222 notifyCompositorAnimationFinished(group); |
196 } | 223 } |
197 | 224 |
198 CompositorAnimationPlayer* ScrollAnimatorCompositorCoordinator::compositorPlayer
() const | 225 CompositorAnimationPlayer* ScrollAnimatorCompositorCoordinator::compositorPlayer
() const |
199 { | 226 { |
200 return m_compositorPlayer.get(); | 227 return m_compositorPlayer.get(); |
201 } | 228 } |
202 | 229 |
203 } // namespace blink | 230 } // namespace blink |
OLD | NEW |