Index: cc/layer_tree_host_impl.cc |
diff --git a/cc/layer_tree_host_impl.cc b/cc/layer_tree_host_impl.cc |
index 089107401780114519a3e78a55b6554cc190772a..d6acf0633a13686dc1fca7da05d44101fa14361a 100644 |
--- a/cc/layer_tree_host_impl.cc |
+++ b/cc/layer_tree_host_impl.cc |
@@ -1387,7 +1387,7 @@ InputHandlerClient::ScrollStatus LayerTreeHostImpl::ScrollBegin( |
} |
if (potentially_scrolling_layer_impl) { |
- active_tree_->set_currently_scrolling_layer( |
+ active_tree_->SetCurrentlyScrollingLayer( |
potentially_scrolling_layer_impl); |
should_bubble_scrolls_ = (type != NonBubblingGesture); |
wheel_scrolling_ = (type == Wheel); |
@@ -1528,7 +1528,7 @@ bool LayerTreeHostImpl::ScrollBy(gfx::Point viewport_point, |
did_scroll = true; |
did_lock_scrolling_layer_ = true; |
if (!should_bubble_scrolls_) { |
- active_tree_->set_currently_scrolling_layer(layer_impl); |
+ active_tree_->SetCurrentlyScrollingLayer(layer_impl); |
break; |
} |
@@ -1568,6 +1568,7 @@ void LayerTreeHostImpl::ScrollEnd() { |
if (top_controls_manager_) |
top_controls_manager_->ScrollEnd(); |
ClearCurrentlyScrollingLayer(); |
+ StartScrollbarAnimation(base::TimeTicks::Now()); |
} |
void LayerTreeHostImpl::PinchGestureBegin() { |
@@ -1600,11 +1601,6 @@ void LayerTreeHostImpl::PinchGestureUpdate(float magnify_delta, |
RootScrollLayer()->ScrollBy(move); |
- if (RootScrollLayer()->scrollbar_animation_controller()) { |
- RootScrollLayer()->scrollbar_animation_controller()-> |
- didPinchGestureUpdate(base::TimeTicks::Now()); |
- } |
- |
client_->SetNeedsCommitOnImplThread(); |
client_->SetNeedsRedrawOnImplThread(); |
client_->RenewTreePriority(); |
@@ -1612,13 +1608,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(); |
} |
@@ -1847,13 +1836,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 && scrollbar_controller->isAnimating()) { |
+ base::TimeDelta delay = scrollbar_controller->delayBeforeStart(time); |
+ if (delay > base::TimeDelta()) |
+ client_->RequestScrollbarAnimationOnImplThread(delay); |
+ else if (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; |