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

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

Issue 2006103004: Send takeover msg from MT to CC using the animation path. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: jbroman nits Created 4 years, 6 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/CompositorAnimationHost.h" 9 #include "platform/animation/CompositorAnimationHost.h"
10 #include "platform/animation/CompositorAnimationPlayer.h" 10 #include "platform/animation/CompositorAnimationPlayer.h"
11 #include "platform/animation/CompositorAnimationTimeline.h" 11 #include "platform/animation/CompositorAnimationTimeline.h"
12 #include "platform/graphics/CompositorFactory.h" 12 #include "platform/graphics/CompositorFactory.h"
13 #include "platform/graphics/GraphicsLayer.h" 13 #include "platform/graphics/GraphicsLayer.h"
14 #include "platform/scroll/ScrollableArea.h" 14 #include "platform/scroll/ScrollableArea.h"
15 #include "public/platform/Platform.h" 15 #include "public/platform/Platform.h"
16 #include "public/platform/WebCompositorSupport.h" 16 #include "public/platform/WebCompositorSupport.h"
17 17
18 namespace blink { 18 namespace blink {
19 19
20 ScrollAnimatorCompositorCoordinator::ScrollAnimatorCompositorCoordinator() 20 ScrollAnimatorCompositorCoordinator::ScrollAnimatorCompositorCoordinator()
21 : m_compositorAnimationAttachedToLayerId(0) 21 : m_compositorAnimationAttachedToLayerId(0)
22 , m_runState(RunState::Idle) 22 , m_runState(RunState::Idle)
23 , m_compositorAnimationId(0) 23 , m_compositorAnimationId(0)
24 , m_compositorAnimationGroupId(0) 24 , m_compositorAnimationGroupId(0)
25 , m_implOnlyAnimationTakeover(false)
25 { 26 {
26 ThreadState::current()->registerPreFinalizer(this); 27 ThreadState::current()->registerPreFinalizer(this);
27 m_compositorPlayer = adoptPtr(CompositorFactory::current().createAnimationPl ayer()); 28 m_compositorPlayer = adoptPtr(CompositorFactory::current().createAnimationPl ayer());
28 ASSERT(m_compositorPlayer); 29 ASSERT(m_compositorPlayer);
29 m_compositorPlayer->setAnimationDelegate(this); 30 m_compositorPlayer->setAnimationDelegate(this);
30 } 31 }
31 32
32 ScrollAnimatorCompositorCoordinator::~ScrollAnimatorCompositorCoordinator() 33 ScrollAnimatorCompositorCoordinator::~ScrollAnimatorCompositorCoordinator()
33 { 34 {
34 } 35 }
35 36
36 void ScrollAnimatorCompositorCoordinator::dispose() 37 void ScrollAnimatorCompositorCoordinator::dispose()
37 { 38 {
38 m_compositorPlayer->setAnimationDelegate(nullptr); 39 m_compositorPlayer->setAnimationDelegate(nullptr);
39 m_compositorPlayer.clear(); 40 m_compositorPlayer.clear();
40 } 41 }
41 42
42 void ScrollAnimatorCompositorCoordinator::resetAnimationState() 43 void ScrollAnimatorCompositorCoordinator::resetAnimationState()
43 { 44 {
44 m_runState = RunState::Idle; 45 m_runState = RunState::Idle;
45 m_compositorAnimationId = 0; 46 m_compositorAnimationId = 0;
46 m_compositorAnimationGroupId = 0; 47 m_compositorAnimationGroupId = 0;
47 } 48 }
48 49
49 bool ScrollAnimatorCompositorCoordinator::hasAnimationThatRequiresService() cons t 50 bool ScrollAnimatorCompositorCoordinator::hasAnimationThatRequiresService() cons t
50 { 51 {
51 if (!m_implOnlyAnimationAdjustment.isZero()) 52 if (hasImplOnlyAnimationUpdate())
52 return true; 53 return true;
53 54
54 switch (m_runState) { 55 switch (m_runState) {
55 case RunState::Idle: 56 case RunState::Idle:
56 case RunState::RunningOnCompositor: 57 case RunState::RunningOnCompositor:
57 return false; 58 return false;
58 case RunState::WaitingToCancelOnCompositorButNewScroll: 59 case RunState::WaitingToCancelOnCompositorButNewScroll:
59 case RunState::PostAnimationCleanup: 60 case RunState::PostAnimationCleanup:
60 case RunState::WaitingToSendToCompositor: 61 case RunState::WaitingToSendToCompositor:
61 case RunState::RunningOnMainThread: 62 case RunState::RunningOnMainThread:
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 case RunState::WaitingToCancelOnCompositorButNewScroll: 113 case RunState::WaitingToCancelOnCompositorButNewScroll:
113 case RunState::RunningOnCompositorButNeedsUpdate: 114 case RunState::RunningOnCompositorButNeedsUpdate:
114 case RunState::RunningOnCompositor: 115 case RunState::RunningOnCompositor:
115 m_runState = RunState::WaitingToCancelOnCompositor; 116 m_runState = RunState::WaitingToCancelOnCompositor;
116 117
117 // Get serviced the next time compositor updates are allowed. 118 // Get serviced the next time compositor updates are allowed.
118 getScrollableArea()->registerForAnimation(); 119 getScrollableArea()->registerForAnimation();
119 } 120 }
120 } 121 }
121 122
122 void ScrollAnimatorCompositorCoordinator::takeoverCompositorAnimation() 123 void ScrollAnimatorCompositorCoordinator::takeOverCompositorAnimation()
123 { 124 {
124 switch (m_runState) { 125 switch (m_runState) {
125 case RunState::Idle: 126 case RunState::Idle:
127 takeOverImplOnlyScrollOffsetAnimation();
128 break;
126 case RunState::WaitingToCancelOnCompositor: 129 case RunState::WaitingToCancelOnCompositor:
127 case RunState::WaitingToCancelOnCompositorButNewScroll: 130 case RunState::WaitingToCancelOnCompositorButNewScroll:
128 case RunState::PostAnimationCleanup: 131 case RunState::PostAnimationCleanup:
129 case RunState::RunningOnCompositorButNeedsTakeover: 132 case RunState::RunningOnCompositorButNeedsTakeover:
130 case RunState::WaitingToSendToCompositor: 133 case RunState::WaitingToSendToCompositor:
131 case RunState::RunningOnMainThread: 134 case RunState::RunningOnMainThread:
132 break; 135 break;
133 case RunState::RunningOnCompositorButNeedsUpdate: 136 case RunState::RunningOnCompositorButNeedsUpdate:
134 case RunState::RunningOnCompositor: 137 case RunState::RunningOnCompositor:
135 // We call abortAnimation that makes changes to the animation running on 138 // We call abortAnimation that makes changes to the animation running on
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 offset.moveBy(getScrollableArea()->scrollOrigin()); 238 offset.moveBy(getScrollableArea()->scrollOrigin());
236 return offset; 239 return offset;
237 } 240 }
238 241
239 FloatPoint ScrollAnimatorCompositorCoordinator::blinkOffsetFromCompositorOffset( FloatPoint offset) 242 FloatPoint ScrollAnimatorCompositorCoordinator::blinkOffsetFromCompositorOffset( FloatPoint offset)
240 { 243 {
241 offset.moveBy(-getScrollableArea()->scrollOrigin()); 244 offset.moveBy(-getScrollableArea()->scrollOrigin());
242 return offset; 245 return offset;
243 } 246 }
244 247
248 bool ScrollAnimatorCompositorCoordinator::hasImplOnlyAnimationUpdate() const
249 {
250 return !m_implOnlyAnimationAdjustment.isZero() || m_implOnlyAnimationTakeove r;
251 }
252
245 void ScrollAnimatorCompositorCoordinator::updateCompositorAnimations() 253 void ScrollAnimatorCompositorCoordinator::updateCompositorAnimations()
246 { 254 {
247 if (!getScrollableArea()->scrollAnimatorEnabled() || m_implOnlyAnimationAdju stment.isZero()) 255 if (!getScrollableArea()->scrollAnimatorEnabled() || !hasImplOnlyAnimationUp date())
248 return; 256 return;
249 257
250 GraphicsLayer* layer = getScrollableArea()->layerForScrolling(); 258 GraphicsLayer* layer = getScrollableArea()->layerForScrolling();
251 CompositorAnimationTimeline* timeline = getScrollableArea()->compositorAnima tionTimeline(); 259 CompositorAnimationTimeline* timeline = getScrollableArea()->compositorAnima tionTimeline();
252 if (layer && timeline && !timeline->compositorAnimationHost().isNull()) { 260 if (layer && timeline && !timeline->compositorAnimationHost().isNull()) {
253 CompositorAnimationHost host = timeline->compositorAnimationHost(); 261 CompositorAnimationHost host = timeline->compositorAnimationHost();
254 host.updateImplOnlyScrollOffsetAnimation( 262 int elementId = layer->platformLayer()->id();
255 gfx::Vector2dF(m_implOnlyAnimationAdjustment.width(), m_implOnlyAnim ationAdjustment.height()), 263 if (!m_implOnlyAnimationAdjustment.isZero()) {
256 layer->platformLayer()->id()); 264 host.adjustImplOnlyScrollOffsetAnimation(
265 elementId,
266 gfx::Vector2dF(m_implOnlyAnimationAdjustment.width(), m_implOnly AnimationAdjustment.height()));
267 }
268 if (m_implOnlyAnimationTakeover)
269 host.takeOverImplOnlyScrollOffsetAnimation(elementId);
257 } 270 }
258 m_implOnlyAnimationAdjustment = FloatSize(); 271 m_implOnlyAnimationAdjustment = FloatSize();
272 m_implOnlyAnimationTakeover = false;
259 } 273 }
260 274
261 void ScrollAnimatorCompositorCoordinator::updateImplOnlyScrollOffsetAnimation( 275 void ScrollAnimatorCompositorCoordinator::adjustImplOnlyScrollOffsetAnimation(
262 const FloatSize& adjustment) 276 const FloatSize& adjustment)
263 { 277 {
264 if (!getScrollableArea()->scrollAnimatorEnabled()) 278 if (!getScrollableArea()->scrollAnimatorEnabled())
265 return; 279 return;
266 280
267 m_implOnlyAnimationAdjustment.expand(adjustment.width(), adjustment.height() ); 281 m_implOnlyAnimationAdjustment.expand(adjustment.width(), adjustment.height() );
268 282
269 getScrollableArea()->registerForAnimation(); 283 getScrollableArea()->registerForAnimation();
270 } 284 }
271 285
286 void ScrollAnimatorCompositorCoordinator::takeOverImplOnlyScrollOffsetAnimation( )
287 {
288 if (!getScrollableArea()->scrollAnimatorEnabled())
289 return;
290
291 m_implOnlyAnimationTakeover = true;
292
293 getScrollableArea()->registerForAnimation();
294 }
295
272 String ScrollAnimatorCompositorCoordinator::runStateAsText() const 296 String ScrollAnimatorCompositorCoordinator::runStateAsText() const
273 { 297 {
274 switch (m_runState) { 298 switch (m_runState) {
275 case RunState::Idle: 299 case RunState::Idle:
276 return String("Idle"); 300 return String("Idle");
277 case RunState::WaitingToSendToCompositor: 301 case RunState::WaitingToSendToCompositor:
278 return String("WaitingToSendToCompositor"); 302 return String("WaitingToSendToCompositor");
279 case RunState::RunningOnCompositor: 303 case RunState::RunningOnCompositor:
280 return String("RunningOnCompositor"); 304 return String("RunningOnCompositor");
281 case RunState::RunningOnMainThread: 305 case RunState::RunningOnMainThread:
282 return String("RunningOnMainThread"); 306 return String("RunningOnMainThread");
283 case RunState::RunningOnCompositorButNeedsUpdate: 307 case RunState::RunningOnCompositorButNeedsUpdate:
284 return String("RunningOnCompositorButNeedsUpdate"); 308 return String("RunningOnCompositorButNeedsUpdate");
285 case RunState::WaitingToCancelOnCompositor: 309 case RunState::WaitingToCancelOnCompositor:
286 return String("WaitingToCancelOnCompositor"); 310 return String("WaitingToCancelOnCompositor");
287 case RunState::PostAnimationCleanup: 311 case RunState::PostAnimationCleanup:
288 return String("PostAnimationCleanup"); 312 return String("PostAnimationCleanup");
289 case RunState::RunningOnCompositorButNeedsTakeover: 313 case RunState::RunningOnCompositorButNeedsTakeover:
290 return String("RunningOnCompositorButNeedsTakeover"); 314 return String("RunningOnCompositorButNeedsTakeover");
291 case RunState::WaitingToCancelOnCompositorButNewScroll: 315 case RunState::WaitingToCancelOnCompositorButNewScroll:
292 return String("WaitingToCancelOnCompositorButNewScroll"); 316 return String("WaitingToCancelOnCompositorButNewScroll");
293 } 317 }
294 ASSERT_NOT_REACHED(); 318 ASSERT_NOT_REACHED();
295 return String(); 319 return String();
296 } 320 }
297 321
298 } // namespace blink 322 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698