| Index: cc/trees/layer_tree_impl.cc
|
| diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc
|
| index b5f8aed2307ba159c5c091f123706c768324942f..33b8fe494aa2235159a997411c9d4e7d4b0e9b68 100644
|
| --- a/cc/trees/layer_tree_impl.cc
|
| +++ b/cc/trees/layer_tree_impl.cc
|
| @@ -64,7 +64,7 @@ class LayerScrollOffsetDelegateProxy : public LayerImpl::ScrollOffsetDelegate {
|
| }
|
|
|
| void Update() const override {
|
| - layer_tree_impl_->UpdateScrollOffsetDelegate();
|
| + layer_tree_impl_->UpdateScrollOffsetDelegateIfNeeded();
|
| }
|
|
|
| private:
|
| @@ -1070,25 +1070,30 @@ void LayerTreeImpl::SetRootLayerScrollOffsetDelegate(
|
| outer_viewport_scroll_layer_->RefreshFromScrollDelegate();
|
|
|
| if (inner_viewport_scroll_layer_)
|
| - UpdateScrollOffsetDelegate();
|
| + UpdateScrollOffsetDelegateIfNeeded();
|
| }
|
| }
|
|
|
| void LayerTreeImpl::OnRootLayerDelegatedScrollOffsetChanged() {
|
| DCHECK(root_layer_scroll_offset_delegate_);
|
| - if (inner_viewport_scroll_layer_) {
|
| + root_layer_scroll_offset_delegate_->SetBlockUpdates(true);
|
| + if (inner_viewport_scroll_layer_)
|
| inner_viewport_scroll_layer_->RefreshFromScrollDelegate();
|
| - }
|
| - if (outer_viewport_scroll_layer_) {
|
| +
|
| + if (outer_viewport_scroll_layer_)
|
| outer_viewport_scroll_layer_->RefreshFromScrollDelegate();
|
| - }
|
| -}
|
|
|
| -void LayerTreeImpl::UpdateScrollOffsetDelegate() {
|
| - DCHECK(InnerViewportScrollLayer());
|
| - DCHECK(!OuterViewportScrollLayer() || outer_viewport_scroll_delegate_proxy_);
|
| - DCHECK(root_layer_scroll_offset_delegate_);
|
| + root_layer_scroll_offset_delegate_->SetBlockUpdates(false);
|
| + UpdateScrollOffsetDelegateIfNeeded();
|
| +}
|
|
|
| +void LayerTreeImpl::UpdateScrollOffsetDelegateIfNeeded() {
|
| + if (!root_layer_scroll_offset_delegate_)
|
| + return;
|
| + if (!InnerViewportScrollLayer() || !inner_viewport_scroll_delegate_proxy_)
|
| + return;
|
| + if (OuterViewportScrollLayer() && !outer_viewport_scroll_delegate_proxy_)
|
| + return;
|
| gfx::ScrollOffset offset =
|
| inner_viewport_scroll_delegate_proxy_->last_set_scroll_offset();
|
|
|
|
|