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

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

Issue 1534813004: Run smooth scroll animations on the compositor when possible (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nit Created 5 years 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 "config.h" 5 #include "config.h"
6 #include "platform/scroll/ScrollAnimatorCompositorCoordinator.h" 6 #include "platform/scroll/ScrollAnimatorCompositorCoordinator.h"
7 7
8 #include "platform/RuntimeEnabledFeatures.h" 8 #include "platform/RuntimeEnabledFeatures.h"
9 #include "platform/graphics/GraphicsLayer.h" 9 #include "platform/graphics/GraphicsLayer.h"
10 #include "platform/scroll/ScrollableArea.h" 10 #include "platform/scroll/ScrollableArea.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 } 45 }
46 46
47 bool ScrollAnimatorCompositorCoordinator::hasAnimationThatRequiresService() cons t 47 bool ScrollAnimatorCompositorCoordinator::hasAnimationThatRequiresService() cons t
48 { 48 {
49 switch (m_runState) { 49 switch (m_runState) {
50 case RunState::Idle: 50 case RunState::Idle:
51 case RunState::RunningOnCompositor: 51 case RunState::RunningOnCompositor:
52 return false; 52 return false;
53 case RunState::WaitingToSendToCompositor: 53 case RunState::WaitingToSendToCompositor:
54 case RunState::RunningOnMainThread: 54 case RunState::RunningOnMainThread:
55 case RunState::RunningOnCompositorButNeedsUpdate:
55 case RunState::WaitingToCancelOnCompositor: 56 case RunState::WaitingToCancelOnCompositor:
56 return true; 57 return true;
57 } 58 }
58 ASSERT_NOT_REACHED(); 59 ASSERT_NOT_REACHED();
59 return false; 60 return false;
60 } 61 }
61 62
62 bool ScrollAnimatorCompositorCoordinator::addAnimation( 63 bool ScrollAnimatorCompositorCoordinator::addAnimation(
63 PassOwnPtr<WebCompositorAnimation> animation) 64 PassOwnPtr<WebCompositorAnimation> animation)
64 { 65 {
(...skipping 12 matching lines...) Expand all
77 { 78 {
78 if (m_compositorPlayer) { 79 if (m_compositorPlayer) {
79 if (m_compositorPlayer->isLayerAttached()) 80 if (m_compositorPlayer->isLayerAttached())
80 m_compositorPlayer->removeAnimation(m_compositorAnimationId); 81 m_compositorPlayer->removeAnimation(m_compositorAnimationId);
81 } else { 82 } else {
82 if (GraphicsLayer* layer = scrollableArea()->layerForScrolling()) 83 if (GraphicsLayer* layer = scrollableArea()->layerForScrolling())
83 layer->removeAnimation(m_compositorAnimationId); 84 layer->removeAnimation(m_compositorAnimationId);
84 } 85 }
85 } 86 }
86 87
88 void ScrollAnimatorCompositorCoordinator::abortAnimation()
89 {
90 if (m_compositorPlayer) {
91 if (m_compositorPlayer->isLayerAttached())
92 m_compositorPlayer->abortAnimation(m_compositorAnimationId);
93 } else {
94 if (GraphicsLayer* layer = scrollableArea()->layerForScrolling())
95 layer->abortAnimation(m_compositorAnimationId);
96 }
97 }
98
87 void ScrollAnimatorCompositorCoordinator::cancelAnimation() 99 void ScrollAnimatorCompositorCoordinator::cancelAnimation()
88 { 100 {
89 switch (m_runState) { 101 switch (m_runState) {
90 case RunState::Idle: 102 case RunState::Idle:
91 case RunState::WaitingToCancelOnCompositor: 103 case RunState::WaitingToCancelOnCompositor:
92 break; 104 break;
93 case RunState::WaitingToSendToCompositor: 105 case RunState::WaitingToSendToCompositor:
94 if (m_compositorAnimationId) { 106 if (m_compositorAnimationId) {
95 // We still have a previous animation running on the compositor. 107 // We still have a previous animation running on the compositor.
96 m_runState = RunState::WaitingToCancelOnCompositor; 108 m_runState = RunState::WaitingToCancelOnCompositor;
97 } else { 109 } else {
98 resetAnimationState(); 110 resetAnimationState();
99 } 111 }
100 break; 112 break;
101 case RunState::RunningOnMainThread: 113 case RunState::RunningOnMainThread:
102 resetAnimationState(); 114 resetAnimationState();
103 break; 115 break;
116 case RunState::RunningOnCompositorButNeedsUpdate:
104 case RunState::RunningOnCompositor: 117 case RunState::RunningOnCompositor:
105 m_runState = RunState::WaitingToCancelOnCompositor; 118 m_runState = RunState::WaitingToCancelOnCompositor;
106 119
107 // Get serviced the next time compositor updates are allowed. 120 // Get serviced the next time compositor updates are allowed.
108 scrollableArea()->registerForAnimation(); 121 scrollableArea()->registerForAnimation();
109 } 122 }
110 } 123 }
111 124
112 void ScrollAnimatorCompositorCoordinator::compositorAnimationFinished( 125 void ScrollAnimatorCompositorCoordinator::compositorAnimationFinished(
113 int groupId) 126 int groupId)
114 { 127 {
115 if (m_compositorAnimationGroupId != groupId) 128 if (m_compositorAnimationGroupId != groupId)
116 return; 129 return;
117 130
118 m_compositorAnimationId = 0; 131 m_compositorAnimationId = 0;
119 m_compositorAnimationGroupId = 0; 132 m_compositorAnimationGroupId = 0;
120 133
121 switch (m_runState) { 134 switch (m_runState) {
122 case RunState::Idle: 135 case RunState::Idle:
123 case RunState::RunningOnMainThread: 136 case RunState::RunningOnMainThread:
124 ASSERT_NOT_REACHED(); 137 ASSERT_NOT_REACHED();
125 break; 138 break;
126 case RunState::WaitingToSendToCompositor: 139 case RunState::WaitingToSendToCompositor:
127 break; 140 break;
128 case RunState::RunningOnCompositor: 141 case RunState::RunningOnCompositor:
142 case RunState::RunningOnCompositorButNeedsUpdate:
129 case RunState::WaitingToCancelOnCompositor: 143 case RunState::WaitingToCancelOnCompositor:
130 resetAnimationState(); 144 resetAnimationState();
131 } 145 }
132 } 146 }
133 147
134 void ScrollAnimatorCompositorCoordinator::reattachCompositorPlayerIfNeeded( 148 void ScrollAnimatorCompositorCoordinator::reattachCompositorPlayerIfNeeded(
135 WebCompositorAnimationTimeline* timeline) 149 WebCompositorAnimationTimeline* timeline)
136 { 150 {
137 int compositorAnimationAttachedToLayerId = 0; 151 int compositorAnimationAttachedToLayerId = 0;
138 if (scrollableArea()->layerForScrolling()) 152 if (scrollableArea()->layerForScrolling())
(...skipping 29 matching lines...) Expand all
168 { 182 {
169 notifyCompositorAnimationFinished(group); 183 notifyCompositorAnimationFinished(group);
170 } 184 }
171 185
172 WebCompositorAnimationPlayer* ScrollAnimatorCompositorCoordinator::compositorPla yer() const 186 WebCompositorAnimationPlayer* ScrollAnimatorCompositorCoordinator::compositorPla yer() const
173 { 187 {
174 return m_compositorPlayer.get(); 188 return m_compositorPlayer.get();
175 } 189 }
176 190
177 } // namespace blink 191 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698