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 "platform/RuntimeEnabledFeatures.h" | 7 #include "platform/RuntimeEnabledFeatures.h" |
| 8 #include "platform/animation/CompositorAnimationPlayer.h" |
| 9 #include "platform/animation/CompositorAnimationTimeline.h" |
| 10 #include "platform/graphics/CompositorFactory.h" |
8 #include "platform/graphics/GraphicsLayer.h" | 11 #include "platform/graphics/GraphicsLayer.h" |
9 #include "platform/scroll/ScrollableArea.h" | 12 #include "platform/scroll/ScrollableArea.h" |
10 #include "public/platform/Platform.h" | 13 #include "public/platform/Platform.h" |
11 #include "public/platform/WebCompositorAnimationPlayer.h" | |
12 #include "public/platform/WebCompositorAnimationTimeline.h" | |
13 #include "public/platform/WebCompositorSupport.h" | 14 #include "public/platform/WebCompositorSupport.h" |
14 | 15 |
15 namespace blink { | 16 namespace blink { |
16 | 17 |
17 ScrollAnimatorCompositorCoordinator::ScrollAnimatorCompositorCoordinator() | 18 ScrollAnimatorCompositorCoordinator::ScrollAnimatorCompositorCoordinator() |
18 : m_compositorAnimationAttachedToLayerId(0) | 19 : m_compositorAnimationAttachedToLayerId(0) |
19 , m_runState(RunState::Idle) | 20 , m_runState(RunState::Idle) |
20 , m_compositorAnimationId(0) | 21 , m_compositorAnimationId(0) |
21 , m_compositorAnimationGroupId(0) | 22 , m_compositorAnimationGroupId(0) |
22 { | 23 { |
23 if (RuntimeEnabledFeatures::compositorAnimationTimelinesEnabled()) { | 24 if (RuntimeEnabledFeatures::compositorAnimationTimelinesEnabled()) { |
24 ASSERT(Platform::current()->compositorSupport()); | 25 ASSERT(Platform::current()->compositorSupport()); |
25 m_compositorPlayer = adoptPtr(Platform::current()->compositorSupport()->
createAnimationPlayer()); | 26 m_compositorPlayer = adoptPtr(CompositorFactory::current().createAnimati
onPlayer()); |
26 ASSERT(m_compositorPlayer); | 27 ASSERT(m_compositorPlayer); |
27 m_compositorPlayer->setAnimationDelegate(this); | 28 m_compositorPlayer->setAnimationDelegate(this); |
28 } | 29 } |
29 } | 30 } |
30 | 31 |
31 ScrollAnimatorCompositorCoordinator::~ScrollAnimatorCompositorCoordinator() | 32 ScrollAnimatorCompositorCoordinator::~ScrollAnimatorCompositorCoordinator() |
32 { | 33 { |
33 if (m_compositorPlayer) { | 34 if (m_compositorPlayer) { |
34 m_compositorPlayer->setAnimationDelegate(nullptr); | 35 m_compositorPlayer->setAnimationDelegate(nullptr); |
35 m_compositorPlayer.clear(); | 36 m_compositorPlayer.clear(); |
(...skipping 18 matching lines...) Expand all Loading... |
54 case RunState::RunningOnMainThread: | 55 case RunState::RunningOnMainThread: |
55 case RunState::RunningOnCompositorButNeedsUpdate: | 56 case RunState::RunningOnCompositorButNeedsUpdate: |
56 case RunState::WaitingToCancelOnCompositor: | 57 case RunState::WaitingToCancelOnCompositor: |
57 return true; | 58 return true; |
58 } | 59 } |
59 ASSERT_NOT_REACHED(); | 60 ASSERT_NOT_REACHED(); |
60 return false; | 61 return false; |
61 } | 62 } |
62 | 63 |
63 bool ScrollAnimatorCompositorCoordinator::addAnimation( | 64 bool ScrollAnimatorCompositorCoordinator::addAnimation( |
64 PassOwnPtr<WebCompositorAnimation> animation) | 65 PassOwnPtr<CompositorAnimation> animation) |
65 { | 66 { |
66 if (m_compositorPlayer) { | 67 if (m_compositorPlayer) { |
67 if (m_compositorPlayer->isLayerAttached()) { | 68 if (m_compositorPlayer->isLayerAttached()) { |
68 m_compositorPlayer->addAnimation(animation.leakPtr()); | 69 m_compositorPlayer->addAnimation(animation.leakPtr()); |
69 return true; | 70 return true; |
70 } | 71 } |
71 } else { | 72 } else { |
72 return scrollableArea()->layerForScrolling()->addAnimation(animation); | 73 return scrollableArea()->layerForScrolling()->addAnimation(animation); |
73 } | 74 } |
74 return false; | 75 return false; |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 case RunState::RunningOnCompositorButNeedsUpdate: | 145 case RunState::RunningOnCompositorButNeedsUpdate: |
145 case RunState::WaitingToCancelOnCompositor: | 146 case RunState::WaitingToCancelOnCompositor: |
146 m_runState = RunState::PostAnimationCleanup; | 147 m_runState = RunState::PostAnimationCleanup; |
147 | 148 |
148 // Get serviced the next time compositor updates are allowed. | 149 // Get serviced the next time compositor updates are allowed. |
149 scrollableArea()->registerForAnimation(); | 150 scrollableArea()->registerForAnimation(); |
150 } | 151 } |
151 } | 152 } |
152 | 153 |
153 void ScrollAnimatorCompositorCoordinator::reattachCompositorPlayerIfNeeded( | 154 void ScrollAnimatorCompositorCoordinator::reattachCompositorPlayerIfNeeded( |
154 WebCompositorAnimationTimeline* timeline) | 155 CompositorAnimationTimeline* timeline) |
155 { | 156 { |
156 int compositorAnimationAttachedToLayerId = 0; | 157 int compositorAnimationAttachedToLayerId = 0; |
157 if (scrollableArea()->layerForScrolling()) | 158 if (scrollableArea()->layerForScrolling()) |
158 compositorAnimationAttachedToLayerId = scrollableArea()->layerForScrolli
ng()->platformLayer()->id(); | 159 compositorAnimationAttachedToLayerId = scrollableArea()->layerForScrolli
ng()->platformLayer()->id(); |
159 | 160 |
160 if (compositorAnimationAttachedToLayerId != m_compositorAnimationAttachedToL
ayerId) { | 161 if (compositorAnimationAttachedToLayerId != m_compositorAnimationAttachedToL
ayerId) { |
161 if (m_compositorPlayer && timeline) { | 162 if (m_compositorPlayer && timeline) { |
162 // Detach from old layer (if any). | 163 // Detach from old layer (if any). |
163 if (m_compositorAnimationAttachedToLayerId) { | 164 if (m_compositorAnimationAttachedToLayerId) { |
164 if (m_compositorPlayer->isLayerAttached()) | 165 if (m_compositorPlayer->isLayerAttached()) |
(...skipping 24 matching lines...) Expand all Loading... |
189 } | 190 } |
190 | 191 |
191 void ScrollAnimatorCompositorCoordinator::notifyAnimationAborted( | 192 void ScrollAnimatorCompositorCoordinator::notifyAnimationAborted( |
192 double monotonicTime, int group) | 193 double monotonicTime, int group) |
193 { | 194 { |
194 // An animation aborted by the compositor is treated as a finished | 195 // An animation aborted by the compositor is treated as a finished |
195 // animation. | 196 // animation. |
196 notifyCompositorAnimationFinished(group); | 197 notifyCompositorAnimationFinished(group); |
197 } | 198 } |
198 | 199 |
199 WebCompositorAnimationPlayer* ScrollAnimatorCompositorCoordinator::compositorPla
yer() const | 200 CompositorAnimationPlayer* ScrollAnimatorCompositorCoordinator::compositorPlayer
() const |
200 { | 201 { |
201 return m_compositorPlayer.get(); | 202 return m_compositorPlayer.get(); |
202 } | 203 } |
203 | 204 |
204 } // namespace blink | 205 } // namespace blink |
OLD | NEW |