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

Side by Side Diff: third_party/WebKit/Source/platform/scroll/ScrollAnimatorCompositorCoordinator.cpp

Issue 1780573005: Takeover MT initiated animations from the compositor (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2661
Patch Set: Created 4 years, 9 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
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 "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 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 bool ScrollAnimatorCompositorCoordinator::hasAnimationThatRequiresService() cons t 58 bool ScrollAnimatorCompositorCoordinator::hasAnimationThatRequiresService() cons t
59 { 59 {
60 switch (m_runState) { 60 switch (m_runState) {
61 case RunState::Idle: 61 case RunState::Idle:
62 case RunState::RunningOnCompositor: 62 case RunState::RunningOnCompositor:
63 return false; 63 return false;
64 case RunState::PostAnimationCleanup: 64 case RunState::PostAnimationCleanup:
65 case RunState::WaitingToSendToCompositor: 65 case RunState::WaitingToSendToCompositor:
66 case RunState::RunningOnMainThread: 66 case RunState::RunningOnMainThread:
67 case RunState::RunningOnCompositorButNeedsUpdate: 67 case RunState::RunningOnCompositorButNeedsUpdate:
68 case RunState::RunningOnCompositorButNeedsTakeover:
68 case RunState::WaitingToCancelOnCompositor: 69 case RunState::WaitingToCancelOnCompositor:
69 return true; 70 return true;
70 } 71 }
71 ASSERT_NOT_REACHED(); 72 ASSERT_NOT_REACHED();
72 return false; 73 return false;
73 } 74 }
74 75
75 bool ScrollAnimatorCompositorCoordinator::addAnimation( 76 bool ScrollAnimatorCompositorCoordinator::addAnimation(
76 PassOwnPtr<CompositorAnimation> animation) 77 PassOwnPtr<CompositorAnimation> animation)
77 { 78 {
(...skipping 30 matching lines...) Expand all
108 } 109 }
109 } 110 }
110 111
111 void ScrollAnimatorCompositorCoordinator::cancelAnimation() 112 void ScrollAnimatorCompositorCoordinator::cancelAnimation()
112 { 113 {
113 switch (m_runState) { 114 switch (m_runState) {
114 case RunState::Idle: 115 case RunState::Idle:
115 case RunState::WaitingToCancelOnCompositor: 116 case RunState::WaitingToCancelOnCompositor:
116 case RunState::PostAnimationCleanup: 117 case RunState::PostAnimationCleanup:
117 break; 118 break;
119 case RunState::RunningOnCompositorButNeedsTakeover:
118 case RunState::WaitingToSendToCompositor: 120 case RunState::WaitingToSendToCompositor:
119 if (m_compositorAnimationId) { 121 if (m_compositorAnimationId) {
120 // We still have a previous animation running on the compositor. 122 // We still have a previous animation running on the compositor.
121 m_runState = RunState::WaitingToCancelOnCompositor; 123 m_runState = RunState::WaitingToCancelOnCompositor;
122 } else { 124 } else {
123 resetAnimationState(); 125 resetAnimationState();
124 } 126 }
125 break; 127 break;
126 case RunState::RunningOnMainThread: 128 case RunState::RunningOnMainThread:
127 m_runState = RunState::PostAnimationCleanup; 129 m_runState = RunState::PostAnimationCleanup;
128 break; 130 break;
129 case RunState::RunningOnCompositorButNeedsUpdate: 131 case RunState::RunningOnCompositorButNeedsUpdate:
130 case RunState::RunningOnCompositor: 132 case RunState::RunningOnCompositor:
131 m_runState = RunState::WaitingToCancelOnCompositor; 133 m_runState = RunState::WaitingToCancelOnCompositor;
132 134
133 // Get serviced the next time compositor updates are allowed. 135 // Get serviced the next time compositor updates are allowed.
134 scrollableArea()->registerForAnimation(); 136 scrollableArea()->registerForAnimation();
135 } 137 }
136 } 138 }
137 139
140 void ScrollAnimatorCompositorCoordinator::takeoverCompositorAnimation()
141 {
142 switch (m_runState) {
143 case RunState::Idle:
144 case RunState::WaitingToCancelOnCompositor:
145 case RunState::PostAnimationCleanup:
146 case RunState::RunningOnCompositorButNeedsTakeover:
147 case RunState::WaitingToSendToCompositor:
148 case RunState::RunningOnMainThread:
149 break;
150 case RunState::RunningOnCompositorButNeedsUpdate:
151 case RunState::RunningOnCompositor:
152 // We call abortAnimation that makes changes to the animation running on
153 // the compositor. Thus, this function should only be called when in
154 // CompositingClean state.
155 abortAnimation();
156
157 m_runState = RunState::RunningOnCompositorButNeedsTakeover;
158
159 // Get serviced the next time compositor updates are allowed.
160 scrollableArea()->registerForAnimation();
161 }
162 }
163
138 void ScrollAnimatorCompositorCoordinator::compositorAnimationFinished( 164 void ScrollAnimatorCompositorCoordinator::compositorAnimationFinished(
139 int groupId) 165 int groupId)
140 { 166 {
141 if (m_compositorAnimationGroupId != groupId) 167 if (m_compositorAnimationGroupId != groupId)
142 return; 168 return;
143 169
144 m_compositorAnimationId = 0; 170 m_compositorAnimationId = 0;
145 m_compositorAnimationGroupId = 0; 171 m_compositorAnimationGroupId = 0;
146 172
147 switch (m_runState) { 173 switch (m_runState) {
148 case RunState::Idle: 174 case RunState::Idle:
149 case RunState::PostAnimationCleanup: 175 case RunState::PostAnimationCleanup:
150 case RunState::RunningOnMainThread: 176 case RunState::RunningOnMainThread:
151 ASSERT_NOT_REACHED(); 177 ASSERT_NOT_REACHED();
152 break; 178 break;
153 case RunState::WaitingToSendToCompositor: 179 case RunState::WaitingToSendToCompositor:
154 break; 180 break;
155 case RunState::RunningOnCompositor: 181 case RunState::RunningOnCompositor:
156 case RunState::RunningOnCompositorButNeedsUpdate: 182 case RunState::RunningOnCompositorButNeedsUpdate:
183 case RunState::RunningOnCompositorButNeedsTakeover:
157 case RunState::WaitingToCancelOnCompositor: 184 case RunState::WaitingToCancelOnCompositor:
158 m_runState = RunState::PostAnimationCleanup; 185 m_runState = RunState::PostAnimationCleanup;
159 // Get serviced the next time compositor updates are allowed. 186 // Get serviced the next time compositor updates are allowed.
160 if (scrollableArea()) 187 if (scrollableArea())
161 scrollableArea()->registerForAnimation(); 188 scrollableArea()->registerForAnimation();
162 else 189 else
163 resetAnimationState(); 190 resetAnimationState();
164 } 191 }
165 } 192 }
166 193
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 // animation. 240 // animation.
214 notifyCompositorAnimationFinished(group); 241 notifyCompositorAnimationFinished(group);
215 } 242 }
216 243
217 CompositorAnimationPlayer* ScrollAnimatorCompositorCoordinator::compositorPlayer () const 244 CompositorAnimationPlayer* ScrollAnimatorCompositorCoordinator::compositorPlayer () const
218 { 245 {
219 return m_compositorPlayer.get(); 246 return m_compositorPlayer.get();
220 } 247 }
221 248
222 } // namespace blink 249 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698