OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 #ifndef ScrollAnimatorCompositorCoordinator_h | 5 #ifndef ScrollAnimatorCompositorCoordinator_h |
6 #define ScrollAnimatorCompositorCoordinator_h | 6 #define ScrollAnimatorCompositorCoordinator_h |
7 | 7 |
8 #include "base/gtest_prod_util.h" | 8 #include "base/gtest_prod_util.h" |
9 #include "cc/animation/animation_curve.h" | 9 #include "cc/animation/animation_curve.h" |
10 #include "platform/PlatformExport.h" | 10 #include "platform/PlatformExport.h" |
(...skipping 18 matching lines...) Expand all Loading... |
29 public: | 29 public: |
30 virtual ~ScrollAnimatorCompositorCoordinator(); | 30 virtual ~ScrollAnimatorCompositorCoordinator(); |
31 | 31 |
32 bool hasAnimationThatRequiresService() const; | 32 bool hasAnimationThatRequiresService() const; |
33 void dispose(); | 33 void dispose(); |
34 | 34 |
35 virtual bool hasRunningAnimation() const { return false; } | 35 virtual bool hasRunningAnimation() const { return false; } |
36 | 36 |
37 virtual void resetAnimationState(); | 37 virtual void resetAnimationState(); |
38 virtual void cancelAnimation(); | 38 virtual void cancelAnimation(); |
| 39 // Aborts the currently running scroll offset animation on the compositor |
| 40 // and continues it on the main thread. This should only be called when in |
| 41 // DocumentLifecycle::LifecycleState::CompositingClean state. |
| 42 virtual void takeoverCompositorAnimation(); |
39 | 43 |
40 virtual ScrollableArea* scrollableArea() const = 0; | 44 virtual ScrollableArea* scrollableArea() const = 0; |
41 virtual void tickAnimation(double monotonicTime) = 0; | 45 virtual void tickAnimation(double monotonicTime) = 0; |
42 virtual void updateCompositorAnimations() = 0; | 46 virtual void updateCompositorAnimations() = 0; |
43 virtual void notifyCompositorAnimationFinished(int groupId) = 0; | 47 virtual void notifyCompositorAnimationFinished(int groupId) = 0; |
44 virtual void notifyCompositorAnimationAborted(int groupId) = 0; | 48 virtual void notifyCompositorAnimationAborted(int groupId) = 0; |
45 virtual void layerForCompositedScrollingDidChange(CompositorAnimationTimelin
e*) = 0; | 49 virtual void layerForCompositedScrollingDidChange(CompositorAnimationTimelin
e*) = 0; |
46 | 50 |
47 DEFINE_INLINE_VIRTUAL_TRACE() { } | 51 DEFINE_INLINE_VIRTUAL_TRACE() { } |
48 | 52 |
49 protected: | 53 protected: |
50 explicit ScrollAnimatorCompositorCoordinator(); | 54 explicit ScrollAnimatorCompositorCoordinator(); |
51 | 55 |
52 bool addAnimation(PassOwnPtr<CompositorAnimation>); | 56 bool addAnimation(PassOwnPtr<CompositorAnimation>); |
53 void removeAnimation(); | 57 void removeAnimation(); |
54 void abortAnimation(); | 58 virtual void abortAnimation(); |
55 | 59 |
56 void compositorAnimationFinished(int groupId); | 60 void compositorAnimationFinished(int groupId); |
57 // Returns true if the compositor player was attached to a new layer. | 61 // Returns true if the compositor player was attached to a new layer. |
58 bool reattachCompositorPlayerIfNeeded(CompositorAnimationTimeline*); | 62 bool reattachCompositorPlayerIfNeeded(CompositorAnimationTimeline*); |
59 | 63 |
60 // WebCompositorAnimationDelegate implementation. | 64 // WebCompositorAnimationDelegate implementation. |
61 void notifyAnimationStarted(double monotonicTime, int group) override; | 65 void notifyAnimationStarted(double monotonicTime, int group) override; |
62 void notifyAnimationFinished(double monotonicTime, int group) override; | 66 void notifyAnimationFinished(double monotonicTime, int group) override; |
63 void notifyAnimationAborted(double monotonicTime, int group) override; | 67 void notifyAnimationAborted(double monotonicTime, int group) override; |
64 void notifyAnimationTakeover( | 68 void notifyAnimationTakeover( |
65 double monotonicTime, | 69 double monotonicTime, |
66 double animationStartTime, | 70 double animationStartTime, |
67 scoped_ptr<cc::AnimationCurve>) override { }; | 71 scoped_ptr<cc::AnimationCurve>) override { }; |
68 | 72 |
69 // CompositorAnimationPlayerClient implementation. | 73 // CompositorAnimationPlayerClient implementation. |
70 CompositorAnimationPlayer* compositorPlayer() const override; | 74 CompositorAnimationPlayer* compositorPlayer() const override; |
71 | 75 |
72 friend class Internals; | 76 friend class Internals; |
73 FRIEND_TEST_ALL_PREFIXES(ScrollAnimatorTest, MainThreadStates); | 77 FRIEND_TEST_ALL_PREFIXES(ScrollAnimatorTest, MainThreadStates); |
| 78 FRIEND_TEST_ALL_PREFIXES(ScrollAnimatorTest, AnimatedScrollTakeover); |
74 | 79 |
75 enum class RunState { | 80 enum class RunState { |
76 // No animation. | 81 // No animation. |
77 Idle, | 82 Idle, |
78 | 83 |
79 // Waiting to send an animation to the compositor. There might also | 84 // Waiting to send an animation to the compositor. There might also |
80 // already be another animation running on the compositor that will need | 85 // already be another animation running on the compositor that will need |
81 // to be canceled first. | 86 // to be canceled first. |
82 WaitingToSendToCompositor, | 87 WaitingToSendToCompositor, |
83 | 88 |
84 // Running an animation on the compositor. | 89 // Running an animation on the compositor. |
85 RunningOnCompositor, | 90 RunningOnCompositor, |
86 | 91 |
87 // Running an animation on the compositor but needs update. | 92 // Running an animation on the compositor but needs update. |
88 RunningOnCompositorButNeedsUpdate, | 93 RunningOnCompositorButNeedsUpdate, |
89 | 94 |
90 // Running an animation on the main thread. | 95 // Running an animation on the main thread. |
91 RunningOnMainThread, | 96 RunningOnMainThread, |
92 | 97 |
93 // Waiting to cancel the animation currently running on the compositor. | 98 // Waiting to cancel the animation currently running on the compositor. |
94 // There is no pending animation to replace the canceled animation. | 99 // There is no pending animation to replace the canceled animation. |
95 WaitingToCancelOnCompositor, | 100 WaitingToCancelOnCompositor, |
96 | 101 |
97 // Finished an animation that was running on the main thread or the | 102 // Finished an animation that was running on the main thread or the |
98 // compositor thread. When in this state, post animation cleanup can | 103 // compositor thread. When in this state, post animation cleanup can |
99 // be performed. | 104 // be performed. |
100 PostAnimationCleanup | 105 PostAnimationCleanup, |
| 106 |
| 107 // Running an animation on the compositor but need to continue it |
| 108 // on the main thread. This could happen if a main thread scrolling |
| 109 // reason is added while animating the scroll offset. |
| 110 RunningOnCompositorButNeedsTakeover, |
101 }; | 111 }; |
102 | 112 |
103 OwnPtr<CompositorAnimationPlayer> m_compositorPlayer; | 113 OwnPtr<CompositorAnimationPlayer> m_compositorPlayer; |
104 int m_compositorAnimationAttachedToLayerId; | 114 int m_compositorAnimationAttachedToLayerId; |
105 RunState m_runState; | 115 RunState m_runState; |
106 int m_compositorAnimationId; | 116 int m_compositorAnimationId; |
107 int m_compositorAnimationGroupId; | 117 int m_compositorAnimationGroupId; |
108 }; | 118 }; |
109 | 119 |
110 } // namespace blink | 120 } // namespace blink |
111 | 121 |
112 #endif // ScrollAnimatorCompositorCoordinator_h | 122 #endif // ScrollAnimatorCompositorCoordinator_h |
OLD | NEW |