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

Unified Diff: cc/layer_tree_host_impl.cc

Issue 12408028: cc: Delay start of scrollbar animation setNeedsRedraw. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase to 187970 and update test Created 7 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 side-by-side diff with in-line comments
Download patch
Index: cc/layer_tree_host_impl.cc
diff --git a/cc/layer_tree_host_impl.cc b/cc/layer_tree_host_impl.cc
index 3c13252533264361d6f3f2234f17bf91f0a72c40..bd3440fb61348ce9daf8579e46170262a0551dab 100644
--- a/cc/layer_tree_host_impl.cc
+++ b/cc/layer_tree_host_impl.cc
@@ -1560,6 +1560,7 @@ void LayerTreeHostImpl::ScrollEnd() {
if (top_controls_manager_)
top_controls_manager_->ScrollEnd();
ClearCurrentlyScrollingLayer();
+ StartScrollbarAnimation(base::TimeTicks::Now());
}
void LayerTreeHostImpl::PinchGestureBegin() {
@@ -1605,12 +1606,6 @@ void LayerTreeHostImpl::PinchGestureUpdate(float magnify_delta,
void LayerTreeHostImpl::PinchGestureEnd() {
pinch_gesture_active_ = false;
- if (RootScrollLayer() &&
- RootScrollLayer()->scrollbar_animation_controller()) {
- RootScrollLayer()->scrollbar_animation_controller()->
- didPinchGestureEnd(base::TimeTicks::Now());
- }
-
client_->SetNeedsCommitOnImplThread();
}
@@ -1830,13 +1825,40 @@ void LayerTreeHostImpl::AnimateScrollbarsRecursive(LayerImpl* layer,
ScrollbarAnimationController* scrollbar_controller =
layer->scrollbar_animation_controller();
- if (scrollbar_controller && scrollbar_controller->animate(time))
+ if (scrollbar_controller && scrollbar_controller->animate(time)) {
+ TRACE_EVENT_INSTANT0(
+ "cc", "LayerTreeHostImpl::setNeedsRedraw due to AnimateScrollbars");
client_->SetNeedsRedrawOnImplThread();
+ }
for (size_t i = 0; i < layer->children().size(); ++i)
AnimateScrollbarsRecursive(layer->children()[i], time);
}
+void LayerTreeHostImpl::StartScrollbarAnimation(base::TimeTicks time) {
+ TRACE_EVENT0("cc", "LayerTreeHostImpl::startScrollbarAnimation");
+ StartScrollbarAnimationRecursive(RootLayer(), time);
+}
+
+void LayerTreeHostImpl::StartScrollbarAnimationRecursive(LayerImpl* layer,
+ base::TimeTicks time) {
+ if (!layer)
+ return;
+
+ ScrollbarAnimationController* scrollbar_controller =
+ layer->scrollbar_animation_controller();
+ if (scrollbar_controller && layer != CurrentlyScrollingLayer()) {
+ double delay = scrollbar_controller->secondsBeforeStart(time);
+ if (delay > 0)
+ client_->RequestScrollbarAnimationOnImplThread(delay);
+ else if (delay == 0 && scrollbar_controller->animate(time))
+ client_->SetNeedsRedrawOnImplThread();
+ }
+
+ for (size_t i = 0; i < layer->children().size(); ++i)
+ StartScrollbarAnimationRecursive(layer->children()[i], time);
+}
+
void LayerTreeHostImpl::SetTreePriority(TreePriority priority) {
if (!tile_manager_)
return;

Powered by Google App Engine
This is Rietveld 408576698