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

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

Issue 1770443002: Takeover MT initiated animations from the compositor (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nitsnits 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 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698