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

Side by Side Diff: cc/trees/layer_tree_impl.cc

Issue 800613009: Convert scroll offsets to use SyncedProperty. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix Android WebView tests Created 5 years, 10 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 unified diff | Download patch
« no previous file with comments | « cc/trees/layer_tree_impl.h ('k') | cc/trees/property_tree_builder.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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 "cc/trees/layer_tree_impl.h" 5 #include "cc/trees/layer_tree_impl.h"
6 6
7 #include <limits> 7 #include <limits>
8 #include <set> 8 #include <set>
9 9
10 #include "base/trace_event/trace_event.h" 10 #include "base/trace_event/trace_event.h"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 LayerScrollOffsetDelegate* delegate, 43 LayerScrollOffsetDelegate* delegate,
44 LayerTreeImpl* layer_tree) 44 LayerTreeImpl* layer_tree)
45 : layer_(layer), delegate_(delegate), layer_tree_impl_(layer_tree) {} 45 : layer_(layer), delegate_(delegate), layer_tree_impl_(layer_tree) {}
46 virtual ~LayerScrollOffsetDelegateProxy() {} 46 virtual ~LayerScrollOffsetDelegateProxy() {}
47 47
48 gfx::ScrollOffset last_set_scroll_offset() const { 48 gfx::ScrollOffset last_set_scroll_offset() const {
49 return last_set_scroll_offset_; 49 return last_set_scroll_offset_;
50 } 50 }
51 51
52 // LayerScrollOffsetDelegate implementation. 52 // LayerScrollOffsetDelegate implementation.
53 void SetTotalScrollOffset(const gfx::ScrollOffset& new_offset) override { 53 void SetCurrentScrollOffset(const gfx::ScrollOffset& new_offset) override {
54 last_set_scroll_offset_ = new_offset; 54 last_set_scroll_offset_ = new_offset;
55 } 55 }
56 56
57 gfx::ScrollOffset GetTotalScrollOffset() override { 57 gfx::ScrollOffset GetCurrentScrollOffset() override {
58 return layer_tree_impl_->GetDelegatedScrollOffset(layer_); 58 return layer_tree_impl_->GetDelegatedScrollOffset(layer_);
59 } 59 }
60 60
61 bool IsExternalFlingActive() const override { 61 bool IsExternalFlingActive() const override {
62 return delegate_->IsExternalFlingActive(); 62 return delegate_->IsExternalFlingActive();
63 } 63 }
64 64
65 void Update() const override { 65 void Update() const override {
66 layer_tree_impl_->UpdateScrollOffsetDelegate(); 66 layer_tree_impl_->UpdateScrollOffsetDelegate();
67 } 67 }
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 } 147 }
148 148
149 LayerImpl* LayerTreeImpl::OuterViewportScrollLayer() const { 149 LayerImpl* LayerTreeImpl::OuterViewportScrollLayer() const {
150 return outer_viewport_scroll_layer_; 150 return outer_viewport_scroll_layer_;
151 } 151 }
152 152
153 gfx::ScrollOffset LayerTreeImpl::TotalScrollOffset() const { 153 gfx::ScrollOffset LayerTreeImpl::TotalScrollOffset() const {
154 gfx::ScrollOffset offset; 154 gfx::ScrollOffset offset;
155 155
156 if (inner_viewport_scroll_layer_) 156 if (inner_viewport_scroll_layer_)
157 offset += inner_viewport_scroll_layer_->TotalScrollOffset(); 157 offset += inner_viewport_scroll_layer_->CurrentScrollOffset();
158 158
159 if (outer_viewport_scroll_layer_) 159 if (outer_viewport_scroll_layer_)
160 offset += outer_viewport_scroll_layer_->TotalScrollOffset(); 160 offset += outer_viewport_scroll_layer_->CurrentScrollOffset();
161 161
162 return offset; 162 return offset;
163 } 163 }
164 164
165 gfx::ScrollOffset LayerTreeImpl::TotalMaxScrollOffset() const { 165 gfx::ScrollOffset LayerTreeImpl::TotalMaxScrollOffset() const {
166 gfx::ScrollOffset offset; 166 gfx::ScrollOffset offset;
167 167
168 if (inner_viewport_scroll_layer_) 168 if (inner_viewport_scroll_layer_)
169 offset += inner_viewport_scroll_layer_->MaxScrollOffset(); 169 offset += inner_viewport_scroll_layer_->MaxScrollOffset();
170 170
171 if (outer_viewport_scroll_layer_) 171 if (outer_viewport_scroll_layer_)
172 offset += outer_viewport_scroll_layer_->MaxScrollOffset(); 172 offset += outer_viewport_scroll_layer_->MaxScrollOffset();
173 173
174 return offset; 174 return offset;
175 } 175 }
176 gfx::Vector2dF LayerTreeImpl::TotalScrollDelta() const {
177 DCHECK(inner_viewport_scroll_layer_);
178 gfx::Vector2dF delta = inner_viewport_scroll_layer_->ScrollDelta();
179
180 if (outer_viewport_scroll_layer_)
181 delta += outer_viewport_scroll_layer_->ScrollDelta();
182
183 return delta;
184 }
185 176
186 scoped_ptr<LayerImpl> LayerTreeImpl::DetachLayerTree() { 177 scoped_ptr<LayerImpl> LayerTreeImpl::DetachLayerTree() {
187 // Clear all data structures that have direct references to the layer tree. 178 // Clear all data structures that have direct references to the layer tree.
188 scrolling_layer_id_from_previous_tree_ = 179 scrolling_layer_id_from_previous_tree_ =
189 currently_scrolling_layer_ ? currently_scrolling_layer_->id() : 0; 180 currently_scrolling_layer_ ? currently_scrolling_layer_->id() : 0;
190 if (inner_viewport_scroll_layer_) 181 if (inner_viewport_scroll_layer_)
191 inner_viewport_scroll_layer_->SetScrollOffsetDelegate(NULL); 182 inner_viewport_scroll_layer_->SetScrollOffsetDelegate(NULL);
192 if (outer_viewport_scroll_layer_) 183 if (outer_viewport_scroll_layer_)
193 outer_viewport_scroll_layer_->SetScrollOffsetDelegate(NULL); 184 outer_viewport_scroll_layer_->SetScrollOffsetDelegate(NULL);
194 inner_viewport_scroll_delegate_proxy_ = nullptr; 185 inner_viewport_scroll_delegate_proxy_ = nullptr;
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
461 top_controls_delta_ -= sent_top_controls_delta_; 452 top_controls_delta_ -= sent_top_controls_delta_;
462 sent_top_controls_delta_ = 0.f; 453 sent_top_controls_delta_ = 0.f;
463 454
464 if (!root_layer()) 455 if (!root_layer())
465 return; 456 return;
466 457
467 LayerTreeHostCommon::CallFunctionForSubtree( 458 LayerTreeHostCommon::CallFunctionForSubtree(
468 root_layer(), base::Bind(&ApplySentScrollDeltasFromAbortedCommitTo)); 459 root_layer(), base::Bind(&ApplySentScrollDeltasFromAbortedCommitTo));
469 } 460 }
470 461
471 static void ApplyScrollDeltasSinceBeginMainFrameTo(LayerImpl* layer) {
472 layer->ApplyScrollDeltasSinceBeginMainFrame();
473 }
474
475 void LayerTreeImpl::ApplyScrollDeltasSinceBeginMainFrame() {
476 DCHECK(IsPendingTree());
477 if (!root_layer())
478 return;
479
480 LayerTreeHostCommon::CallFunctionForSubtree(
481 root_layer(), base::Bind(&ApplyScrollDeltasSinceBeginMainFrameTo));
482 }
483
484 void LayerTreeImpl::SetViewportLayersFromIds( 462 void LayerTreeImpl::SetViewportLayersFromIds(
485 int overscroll_elasticity_layer_id, 463 int overscroll_elasticity_layer_id,
486 int page_scale_layer_id, 464 int page_scale_layer_id,
487 int inner_viewport_scroll_layer_id, 465 int inner_viewport_scroll_layer_id,
488 int outer_viewport_scroll_layer_id) { 466 int outer_viewport_scroll_layer_id) {
489 overscroll_elasticity_layer_ = LayerById(overscroll_elasticity_layer_id); 467 overscroll_elasticity_layer_ = LayerById(overscroll_elasticity_layer_id);
490 page_scale_layer_ = LayerById(page_scale_layer_id); 468 page_scale_layer_ = LayerById(page_scale_layer_id);
491 DCHECK(page_scale_layer_); 469 DCHECK(page_scale_layer_);
492 470
493 inner_viewport_scroll_layer_ = 471 inner_viewport_scroll_layer_ =
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after
990 if (outer_viewport_scroll_layer_) { 968 if (outer_viewport_scroll_layer_) {
991 outer_viewport_scroll_delegate_proxy_ = make_scoped_ptr( 969 outer_viewport_scroll_delegate_proxy_ = make_scoped_ptr(
992 new LayerScrollOffsetDelegateProxy(OuterViewportScrollLayer(), 970 new LayerScrollOffsetDelegateProxy(OuterViewportScrollLayer(),
993 root_layer_scroll_offset_delegate_, 971 root_layer_scroll_offset_delegate_,
994 this)); 972 this));
995 outer_viewport_scroll_layer_->SetScrollOffsetDelegate( 973 outer_viewport_scroll_layer_->SetScrollOffsetDelegate(
996 outer_viewport_scroll_delegate_proxy_.get()); 974 outer_viewport_scroll_delegate_proxy_.get());
997 } 975 }
998 976
999 if (inner_viewport_scroll_layer_) 977 if (inner_viewport_scroll_layer_)
978 inner_viewport_scroll_layer_->RefreshFromScrollDelegate();
979 if (outer_viewport_scroll_layer_)
980 outer_viewport_scroll_layer_->RefreshFromScrollDelegate();
981
982 if (inner_viewport_scroll_layer_)
1000 UpdateScrollOffsetDelegate(); 983 UpdateScrollOffsetDelegate();
1001 } 984 }
1002 } 985 }
1003 986
1004 void LayerTreeImpl::OnRootLayerDelegatedScrollOffsetChanged() { 987 void LayerTreeImpl::OnRootLayerDelegatedScrollOffsetChanged() {
1005 DCHECK(root_layer_scroll_offset_delegate_); 988 DCHECK(root_layer_scroll_offset_delegate_);
1006 if (inner_viewport_scroll_layer_) { 989 if (inner_viewport_scroll_layer_) {
1007 inner_viewport_scroll_layer_->DidScroll(); 990 inner_viewport_scroll_layer_->RefreshFromScrollDelegate();
1008 } 991 }
1009 if (outer_viewport_scroll_layer_) { 992 if (outer_viewport_scroll_layer_) {
1010 outer_viewport_scroll_layer_->DidScroll(); 993 outer_viewport_scroll_layer_->RefreshFromScrollDelegate();
1011 } 994 }
1012 } 995 }
1013 996
1014 void LayerTreeImpl::UpdateScrollOffsetDelegate() { 997 void LayerTreeImpl::UpdateScrollOffsetDelegate() {
1015 DCHECK(InnerViewportScrollLayer()); 998 DCHECK(InnerViewportScrollLayer());
1016 DCHECK(!OuterViewportScrollLayer() || outer_viewport_scroll_delegate_proxy_); 999 DCHECK(!OuterViewportScrollLayer() || outer_viewport_scroll_delegate_proxy_);
1017 DCHECK(root_layer_scroll_offset_delegate_); 1000 DCHECK(root_layer_scroll_offset_delegate_);
1018 1001
1019 gfx::ScrollOffset offset = 1002 gfx::ScrollOffset offset =
1020 inner_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); 1003 inner_viewport_scroll_delegate_proxy_->last_set_scroll_offset();
(...skipping 527 matching lines...) Expand 10 before | Expand all | Expand 10 after
1548 scoped_ptr<PendingPageScaleAnimation> pending_animation) { 1531 scoped_ptr<PendingPageScaleAnimation> pending_animation) {
1549 pending_page_scale_animation_ = pending_animation.Pass(); 1532 pending_page_scale_animation_ = pending_animation.Pass();
1550 } 1533 }
1551 1534
1552 scoped_ptr<PendingPageScaleAnimation> 1535 scoped_ptr<PendingPageScaleAnimation>
1553 LayerTreeImpl::TakePendingPageScaleAnimation() { 1536 LayerTreeImpl::TakePendingPageScaleAnimation() {
1554 return pending_page_scale_animation_.Pass(); 1537 return pending_page_scale_animation_.Pass();
1555 } 1538 }
1556 1539
1557 } // namespace cc 1540 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_impl.h ('k') | cc/trees/property_tree_builder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698