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

Unified Diff: cc/trees/layer_tree_impl.cc

Issue 1038173002: Refactor delegated scrolling in LayerImpl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: format Created 5 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/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();

Powered by Google App Engine
This is Rietveld 408576698