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

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

Issue 23983047: Pinch/Zoom Infrastructure & Plumbing CL (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Backup 2013.10.29 Created 7 years, 1 month 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 | Annotate | Revision Log
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 "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "cc/animation/keyframed_animation_curve.h" 8 #include "cc/animation/keyframed_animation_curve.h"
9 #include "cc/animation/scrollbar_animation_controller.h" 9 #include "cc/animation/scrollbar_animation_controller.h"
10 #include "cc/debug/traced_value.h" 10 #include "cc/debug/traced_value.h"
11 #include "cc/layers/heads_up_display_layer_impl.h" 11 #include "cc/layers/heads_up_display_layer_impl.h"
12 #include "cc/layers/layer.h" 12 #include "cc/layers/layer.h"
13 #include "cc/layers/render_surface_impl.h" 13 #include "cc/layers/render_surface_impl.h"
14 #include "cc/layers/scrollbar_layer_impl_base.h" 14 #include "cc/layers/scrollbar_layer_impl_base.h"
15 #include "cc/trees/layer_tree_host_common.h" 15 #include "cc/trees/layer_tree_host_common.h"
16 #include "cc/trees/layer_tree_host_impl.h" 16 #include "cc/trees/layer_tree_host_impl.h"
17 #include "ui/gfx/size_conversions.h" 17 #include "ui/gfx/size_conversions.h"
18 #include "ui/gfx/vector2d_conversions.h" 18 #include "ui/gfx/vector2d_conversions.h"
19 19
20 namespace cc { 20 namespace cc {
21 21
22 LayerTreeImpl::LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl) 22 LayerTreeImpl::LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl)
23 : layer_tree_host_impl_(layer_tree_host_impl), 23 : layer_tree_host_impl_(layer_tree_host_impl),
24 source_frame_number_(-1), 24 source_frame_number_(-1),
25 hud_layer_(0), 25 hud_layer_(0),
26 root_scroll_layer_(NULL),
27 currently_scrolling_layer_(NULL), 26 currently_scrolling_layer_(NULL),
28 root_layer_scroll_offset_delegate_(NULL), 27 root_layer_scroll_offset_delegate_(NULL),
29 background_color_(0), 28 background_color_(0),
30 has_transparent_background_(false), 29 has_transparent_background_(false),
31 page_scale_layer_(NULL), 30 page_scale_layer_(NULL),
32 inner_viewport_scroll_layer_(NULL), 31 inner_viewport_scroll_layer_(NULL),
33 outer_viewport_scroll_layer_(NULL), 32 outer_viewport_scroll_layer_(NULL),
34 page_scale_factor_(1), 33 page_scale_factor_(1),
35 page_scale_delta_(1), 34 page_scale_delta_(1),
36 sent_page_scale_delta_(1), 35 sent_page_scale_delta_(1),
37 min_page_scale_factor_(0), 36 min_page_scale_factor_(0),
38 max_page_scale_factor_(0), 37 max_page_scale_factor_(0),
39 scrolling_layer_id_from_previous_tree_(0), 38 scrolling_layer_id_from_previous_tree_(0),
40 contents_textures_purged_(false), 39 contents_textures_purged_(false),
41 viewport_size_invalid_(false), 40 viewport_size_invalid_(false),
42 needs_update_draw_properties_(true), 41 needs_update_draw_properties_(true),
43 needs_full_tree_sync_(true), 42 needs_full_tree_sync_(true),
44 next_activation_forces_redraw_(false) { 43 next_activation_forces_redraw_(false) {
45 } 44 }
46 45
47 LayerTreeImpl::~LayerTreeImpl() { 46 LayerTreeImpl::~LayerTreeImpl() {
48 // Need to explicitly clear the tree prior to destroying this so that 47 // Need to explicitly clear the tree prior to destroying this so that
49 // the LayerTreeImpl pointer is still valid in the LayerImpl dtor. 48 // the LayerTreeImpl pointer is still valid in the LayerImpl dtor.
50 root_layer_.reset(); 49 root_layer_.reset();
51 } 50 }
52 51
53 static LayerImpl* FindRootScrollLayerRecursive(LayerImpl* layer) { 52 void LayerTreeImpl::SetRootLayer(scoped_ptr<LayerImpl> layer) {
54 if (!layer) 53 if (inner_viewport_scroll_layer_)
55 return NULL; 54 inner_viewport_scroll_layer_->SetScrollOffsetDelegate(NULL);
55 if (outer_viewport_scroll_layer_)
56 outer_viewport_scroll_layer_->SetScrollOffsetDelegate(NULL);
56 57
57 if (layer->scrollable())
58 return layer;
59
60 for (size_t i = 0; i < layer->children().size(); ++i) {
61 LayerImpl* found = FindRootScrollLayerRecursive(layer->children()[i]);
62 if (found)
63 return found;
64 }
65
66 return NULL;
67 }
68
69 void LayerTreeImpl::SetRootLayer(scoped_ptr<LayerImpl> layer) {
70 if (root_scroll_layer_)
71 root_scroll_layer_->SetScrollOffsetDelegate(NULL);
72 root_layer_ = layer.Pass(); 58 root_layer_ = layer.Pass();
73 currently_scrolling_layer_ = NULL; 59 currently_scrolling_layer_ = NULL;
74 root_scroll_layer_ = NULL; 60 inner_viewport_scroll_layer_ = NULL;
61 outer_viewport_scroll_layer_ = NULL;
62 page_scale_layer_ = NULL;
75 63
76 layer_tree_host_impl_->OnCanDrawStateChangedForTree(); 64 layer_tree_host_impl_->OnCanDrawStateChangedForTree();
77 } 65 }
78 66
79 void LayerTreeImpl::FindRootScrollLayer() { 67 LayerImpl* LayerTreeImpl::InnerViewportScrollLayer() const {
80 root_scroll_layer_ = FindRootScrollLayerRecursive(root_layer_.get()); 68 return inner_viewport_scroll_layer_;
69 }
81 70
82 if (root_scroll_layer_) { 71 LayerImpl* LayerTreeImpl::OuterViewportScrollLayer() const {
83 UpdateMaxScrollOffset(); 72 return outer_viewport_scroll_layer_;
84 root_scroll_layer_->SetScrollOffsetDelegate( 73 }
85 root_layer_scroll_offset_delegate_);
86 }
87 74
88 if (scrolling_layer_id_from_previous_tree_) { 75 gfx::Vector2dF LayerTreeImpl::TotalScrollOffset() const {
89 currently_scrolling_layer_ = LayerTreeHostCommon::FindLayerInSubtree( 76 gfx::Vector2dF offset;
90 root_layer_.get(),
91 scrolling_layer_id_from_previous_tree_);
92 }
93 77
94 scrolling_layer_id_from_previous_tree_ = 0; 78 if (inner_viewport_scroll_layer_)
79 offset += inner_viewport_scroll_layer_->TotalScrollOffset();
80
81 if (outer_viewport_scroll_layer_)
82 offset += outer_viewport_scroll_layer_->TotalScrollOffset();
83
84 return offset;
85 }
86
87 gfx::Vector2dF LayerTreeImpl::TotalMaxScrollOffset() const {
88 gfx::Vector2dF offset;
89
90 if (inner_viewport_scroll_layer_)
91 offset += inner_viewport_scroll_layer_->MaxScrollOffset();
92
93 if (outer_viewport_scroll_layer_)
94 offset += outer_viewport_scroll_layer_->MaxScrollOffset();
95
96 return offset;
97 }
98 gfx::Vector2dF LayerTreeImpl::TotalScrollDelta() const {
99 DCHECK(inner_viewport_scroll_layer_);
100 gfx::Vector2dF delta = inner_viewport_scroll_layer_->ScrollDelta();
101
102 if (outer_viewport_scroll_layer_)
103 delta += outer_viewport_scroll_layer_->ScrollDelta();
104
105 return delta;
95 } 106 }
96 107
97 scoped_ptr<LayerImpl> LayerTreeImpl::DetachLayerTree() { 108 scoped_ptr<LayerImpl> LayerTreeImpl::DetachLayerTree() {
98 // Clear all data structures that have direct references to the layer tree. 109 // Clear all data structures that have direct references to the layer tree.
99 scrolling_layer_id_from_previous_tree_ = 110 scrolling_layer_id_from_previous_tree_ =
100 currently_scrolling_layer_ ? currently_scrolling_layer_->id() : 0; 111 currently_scrolling_layer_ ? currently_scrolling_layer_->id() : 0;
101 if (root_scroll_layer_) 112 if (inner_viewport_scroll_layer_)
102 root_scroll_layer_->SetScrollOffsetDelegate(NULL); 113 inner_viewport_scroll_layer_->SetScrollOffsetDelegate(NULL);
103 root_scroll_layer_ = NULL; 114 if (outer_viewport_scroll_layer_)
115 outer_viewport_scroll_layer_->SetScrollOffsetDelegate(NULL);
116 inner_viewport_scroll_layer_ = NULL;
117 outer_viewport_scroll_layer_ = NULL;
118 page_scale_layer_ = NULL;
104 currently_scrolling_layer_ = NULL; 119 currently_scrolling_layer_ = NULL;
105 120
106 render_surface_layer_list_.clear(); 121 render_surface_layer_list_.clear();
107 set_needs_update_draw_properties(); 122 set_needs_update_draw_properties();
108 return root_layer_.Pass(); 123 return root_layer_.Pass();
109 } 124 }
110 125
111 void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) { 126 void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) {
112 // The request queue should have been processed and does not require a push. 127 // The request queue should have been processed and does not require a push.
113 DCHECK_EQ(ui_resource_request_queue_.size(), 0u); 128 DCHECK_EQ(ui_resource_request_queue_.size(), 0u);
114 129
115 if (next_activation_forces_redraw_) { 130 if (next_activation_forces_redraw_) {
116 layer_tree_host_impl_->SetFullRootLayerDamage(); 131 layer_tree_host_impl_->SetFullRootLayerDamage();
117 next_activation_forces_redraw_ = false; 132 next_activation_forces_redraw_ = false;
118 } 133 }
119 134
120 target_tree->SetLatencyInfo(latency_info_); 135 target_tree->SetLatencyInfo(latency_info_);
121 latency_info_.Clear(); 136 latency_info_.Clear();
122 target_tree->SetPageScaleFactorAndLimits( 137 target_tree->SetPageScaleFactorAndLimits(
123 page_scale_factor(), min_page_scale_factor(), max_page_scale_factor()); 138 page_scale_factor(), min_page_scale_factor(), max_page_scale_factor());
124 target_tree->SetPageScaleDelta( 139 target_tree->SetPageScaleDelta(
125 target_tree->page_scale_delta() / target_tree->sent_page_scale_delta()); 140 target_tree->page_scale_delta() / target_tree->sent_page_scale_delta());
126 target_tree->set_sent_page_scale_delta(1); 141 target_tree->set_sent_page_scale_delta(1);
127 142
128 if (settings().use_pinch_virtual_viewport) { 143 if (page_scale_layer_ && inner_viewport_scroll_layer_) {
129 target_tree->SetViewportLayersFromIds( 144 target_tree->SetViewportLayersFromIds(
130 page_scale_layer_->id(), 145 page_scale_layer_->id(),
131 inner_viewport_scroll_layer_->id(), 146 inner_viewport_scroll_layer_->id(),
132 outer_viewport_scroll_layer_ ? outer_viewport_scroll_layer_->id() 147 outer_viewport_scroll_layer_ ? outer_viewport_scroll_layer_->id()
133 : Layer::INVALID_ID); 148 : Layer::INVALID_ID);
149 } else {
150 target_tree->ClearViewportLayers();
134 } 151 }
135 // This should match the property synchronization in 152 // This should match the property synchronization in
136 // LayerTreeHost::finishCommitOnImplThread(). 153 // LayerTreeHost::finishCommitOnImplThread().
137 target_tree->set_source_frame_number(source_frame_number()); 154 target_tree->set_source_frame_number(source_frame_number());
138 target_tree->set_background_color(background_color()); 155 target_tree->set_background_color(background_color());
139 target_tree->set_has_transparent_background(has_transparent_background()); 156 target_tree->set_has_transparent_background(has_transparent_background());
140 157
141 if (ContentsTexturesPurged()) 158 if (ContentsTexturesPurged())
142 target_tree->SetContentsTexturesPurged(); 159 target_tree->SetContentsTexturesPurged();
143 else 160 else
144 target_tree->ResetContentsTexturesPurged(); 161 target_tree->ResetContentsTexturesPurged();
145 162
146 if (ViewportSizeInvalid()) 163 if (ViewportSizeInvalid())
147 target_tree->SetViewportSizeInvalid(); 164 target_tree->SetViewportSizeInvalid();
148 else 165 else
149 target_tree->ResetViewportSizeInvalid(); 166 target_tree->ResetViewportSizeInvalid();
150 167
151 if (hud_layer()) 168 if (hud_layer())
152 target_tree->set_hud_layer(static_cast<HeadsUpDisplayLayerImpl*>( 169 target_tree->set_hud_layer(static_cast<HeadsUpDisplayLayerImpl*>(
153 LayerTreeHostCommon::FindLayerInSubtree( 170 LayerTreeHostCommon::FindLayerInSubtree(
154 target_tree->root_layer(), hud_layer()->id()))); 171 target_tree->root_layer(), hud_layer()->id())));
155 else 172 else
156 target_tree->set_hud_layer(NULL); 173 target_tree->set_hud_layer(NULL);
157 } 174 }
158 175
159 LayerImpl* LayerTreeImpl::RootScrollLayer() const {
160 return root_scroll_layer_;
161 }
162
163 LayerImpl* LayerTreeImpl::RootContainerLayer() const { 176 LayerImpl* LayerTreeImpl::RootContainerLayer() const {
164 return root_scroll_layer_ ? root_scroll_layer_->parent() : NULL; 177 return inner_viewport_scroll_layer_ ? inner_viewport_scroll_layer_->parent()
178 : NULL;
165 } 179 }
166 180
167 LayerImpl* LayerTreeImpl::CurrentlyScrollingLayer() const { 181 LayerImpl* LayerTreeImpl::CurrentlyScrollingLayer() const {
168 DCHECK(IsActiveTree()); 182 DCHECK(IsActiveTree());
169 return currently_scrolling_layer_; 183 return currently_scrolling_layer_;
170 } 184 }
171 185
172 void LayerTreeImpl::SetCurrentlyScrollingLayer(LayerImpl* layer) { 186 void LayerTreeImpl::SetCurrentlyScrollingLayer(LayerImpl* layer) {
173 if (currently_scrolling_layer_ == layer) 187 if (currently_scrolling_layer_ == layer)
174 return; 188 return;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 231
218 if (IsActiveTree()) { 232 if (IsActiveTree()) {
219 LayerTreeImpl* pending_tree = layer_tree_host_impl_->pending_tree(); 233 LayerTreeImpl* pending_tree = layer_tree_host_impl_->pending_tree();
220 if (pending_tree) { 234 if (pending_tree) {
221 DCHECK_EQ(1, pending_tree->sent_page_scale_delta()); 235 DCHECK_EQ(1, pending_tree->sent_page_scale_delta());
222 pending_tree->SetPageScaleDelta( 236 pending_tree->SetPageScaleDelta(
223 page_scale_delta_ / sent_page_scale_delta_); 237 page_scale_delta_ / sent_page_scale_delta_);
224 } 238 }
225 } 239 }
226 240
227 UpdateMaxScrollOffset();
228 set_needs_update_draw_properties(); 241 set_needs_update_draw_properties();
229 242
230 if (root_layer_scroll_offset_delegate_) { 243 if (root_layer_scroll_offset_delegate_) {
231 root_layer_scroll_offset_delegate_->SetTotalPageScaleFactor( 244 root_layer_scroll_offset_delegate_->SetTotalPageScaleFactor(
232 total_page_scale_factor()); 245 total_page_scale_factor());
233 } 246 }
234 } 247 }
235 248
236 gfx::SizeF LayerTreeImpl::ScrollableViewportSize() const { 249 gfx::SizeF LayerTreeImpl::ScrollableViewportSize() const {
237 return gfx::ScaleSize(layer_tree_host_impl_->UnscaledScrollableViewportSize(), 250 if (page_scale_layer_)
238 1.0f / total_page_scale_factor()); 251 return layer_tree_host_impl_->UnscaledScrollableViewportSize();
239 } 252 else
240 253 return gfx::ScaleSize(
241 void LayerTreeImpl::UpdateMaxScrollOffset() { 254 layer_tree_host_impl_->UnscaledScrollableViewportSize(),
242 LayerImpl* root_scroll = RootScrollLayer(); 255 1.0f / total_page_scale_factor());
243 if (!root_scroll || !root_scroll->children().size())
244 return;
245
246 gfx::Vector2dF max_scroll = gfx::Rect(ScrollableSize()).bottom_right() -
247 gfx::RectF(ScrollableViewportSize()).bottom_right();
248
249 // The viewport may be larger than the contents in some cases, such as
250 // having a vertical scrollbar but no horizontal overflow.
251 max_scroll.SetToMax(gfx::Vector2dF());
252
253 root_scroll_layer_->SetMaxScrollOffset(gfx::ToFlooredVector2d(max_scroll));
254 } 256 }
255 257
256 static void ApplySentScrollDeltasFromAbortedCommitTo(LayerImpl* layer) { 258 static void ApplySentScrollDeltasFromAbortedCommitTo(LayerImpl* layer) {
257 layer->ApplySentScrollDeltasFromAbortedCommit(); 259 layer->ApplySentScrollDeltasFromAbortedCommit();
258 } 260 }
259 261
260 void LayerTreeImpl::ApplySentScrollAndScaleDeltasFromAbortedCommit() { 262 void LayerTreeImpl::ApplySentScrollAndScaleDeltasFromAbortedCommit() {
261 DCHECK(IsActiveTree()); 263 DCHECK(IsActiveTree());
262 264
263 page_scale_factor_ *= sent_page_scale_delta_; 265 page_scale_factor_ *= sent_page_scale_delta_;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 DCHECK(outer_viewport_scroll_layer_ || 302 DCHECK(outer_viewport_scroll_layer_ ||
301 outer_viewport_scroll_layer_id == Layer::INVALID_ID); 303 outer_viewport_scroll_layer_id == Layer::INVALID_ID);
302 } 304 }
303 305
304 void LayerTreeImpl::ClearViewportLayers() { 306 void LayerTreeImpl::ClearViewportLayers() {
305 page_scale_layer_ = NULL; 307 page_scale_layer_ = NULL;
306 inner_viewport_scroll_layer_ = NULL; 308 inner_viewport_scroll_layer_ = NULL;
307 outer_viewport_scroll_layer_ = NULL; 309 outer_viewport_scroll_layer_ = NULL;
308 } 310 }
309 311
310 // TODO(wjmaclean) This needs to go away, and be replaced with a single core
311 // of login that works for both scrollbar layer types. This is already planned
312 // as part of the larger pinch-zoom re-factoring viewport.
313 void LayerTreeImpl::UpdateSolidColorScrollbars() {
314 LayerImpl* root_scroll = RootScrollLayer();
315 DCHECK(root_scroll);
316 DCHECK(IsActiveTree());
317
318 gfx::RectF scrollable_viewport(
319 gfx::PointAtOffsetFromOrigin(root_scroll->TotalScrollOffset()),
320 ScrollableViewportSize());
321 float vertical_adjust = 0.0f;
322 if (RootContainerLayer())
323 vertical_adjust =
324 layer_tree_host_impl_->UnscaledScrollableViewportSize().height() -
325 RootContainerLayer()->bounds().height();
326 if (ScrollbarLayerImplBase* horiz =
327 root_scroll->horizontal_scrollbar_layer()) {
328 horiz->SetVerticalAdjust(vertical_adjust);
329 horiz->SetVisibleToTotalLengthRatio(
330 scrollable_viewport.width() / ScrollableSize().width());
331 }
332 if (ScrollbarLayerImplBase* vertical =
333 root_scroll->vertical_scrollbar_layer()) {
334 vertical->SetVerticalAdjust(vertical_adjust);
335 vertical->SetVisibleToTotalLengthRatio(
336 scrollable_viewport.height() / ScrollableSize().height());
337 }
338 }
339
340 void LayerTreeImpl::UpdateDrawProperties() { 312 void LayerTreeImpl::UpdateDrawProperties() {
341 if (IsActiveTree() && RootScrollLayer() && RootContainerLayer()) 313 if (IsActiveTree() && RootContainerLayer())
342 UpdateRootScrollLayerSizeDelta(); 314 UpdateRootScrollLayerSizeDelta();
343 315
344 if (IsActiveTree() &&
345 RootContainerLayer()
346 && !RootContainerLayer()->masks_to_bounds()) {
347 UpdateSolidColorScrollbars();
348 }
349
350 needs_update_draw_properties_ = false; 316 needs_update_draw_properties_ = false;
351 render_surface_layer_list_.clear(); 317 render_surface_layer_list_.clear();
352 318
353 // For max_texture_size. 319 // For max_texture_size.
354 if (!layer_tree_host_impl_->renderer()) 320 if (!layer_tree_host_impl_->renderer())
355 return; 321 return;
356 322
357 if (!root_layer()) 323 if (!root_layer())
358 return; 324 return;
359 325
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
418 "CalcDrawProperties should not set_needs_update_draw_properties()"; 384 "CalcDrawProperties should not set_needs_update_draw_properties()";
419 } 385 }
420 386
421 const LayerImplList& LayerTreeImpl::RenderSurfaceLayerList() const { 387 const LayerImplList& LayerTreeImpl::RenderSurfaceLayerList() const {
422 // If this assert triggers, then the list is dirty. 388 // If this assert triggers, then the list is dirty.
423 DCHECK(!needs_update_draw_properties_); 389 DCHECK(!needs_update_draw_properties_);
424 return render_surface_layer_list_; 390 return render_surface_layer_list_;
425 } 391 }
426 392
427 gfx::Size LayerTreeImpl::ScrollableSize() const { 393 gfx::Size LayerTreeImpl::ScrollableSize() const {
428 if (!root_scroll_layer_ || root_scroll_layer_->children().empty()) 394 LayerImpl* root_scroll_layer = OuterViewportScrollLayer() ?
395 OuterViewportScrollLayer() : InnerViewportScrollLayer();
396 if (!root_scroll_layer || root_scroll_layer->children().empty())
429 return gfx::Size(); 397 return gfx::Size();
430 return root_scroll_layer_->children()[0]->bounds(); 398 return root_scroll_layer->children()[0]->bounds();
431 } 399 }
432 400
433 LayerImpl* LayerTreeImpl::LayerById(int id) { 401 LayerImpl* LayerTreeImpl::LayerById(int id) {
434 LayerIdMap::iterator iter = layer_id_map_.find(id); 402 LayerIdMap::iterator iter = layer_id_map_.find(id);
435 return iter != layer_id_map_.end() ? iter->second : NULL; 403 return iter != layer_id_map_.end() ? iter->second : NULL;
436 } 404 }
437 405
438 void LayerTreeImpl::RegisterLayer(LayerImpl* layer) { 406 void LayerTreeImpl::RegisterLayer(LayerImpl* layer) {
439 DCHECK(!LayerById(layer->id())); 407 DCHECK(!LayerById(layer->id()));
440 layer_id_map_[layer->id()] = layer; 408 layer_id_map_[layer->id()] = layer;
(...skipping 15 matching lines...) Expand all
456 static void DidBecomeActiveRecursive(LayerImpl* layer) { 424 static void DidBecomeActiveRecursive(LayerImpl* layer) {
457 layer->DidBecomeActive(); 425 layer->DidBecomeActive();
458 for (size_t i = 0; i < layer->children().size(); ++i) 426 for (size_t i = 0; i < layer->children().size(); ++i)
459 DidBecomeActiveRecursive(layer->children()[i]); 427 DidBecomeActiveRecursive(layer->children()[i]);
460 } 428 }
461 429
462 void LayerTreeImpl::DidBecomeActive() { 430 void LayerTreeImpl::DidBecomeActive() {
463 if (!root_layer()) 431 if (!root_layer())
464 return; 432 return;
465 433
434 if (scrolling_layer_id_from_previous_tree_) {
435 currently_scrolling_layer_ = LayerTreeHostCommon::FindLayerInSubtree(
436 root_layer_.get(),
437 scrolling_layer_id_from_previous_tree_);
438 }
439
466 DidBecomeActiveRecursive(root_layer()); 440 DidBecomeActiveRecursive(root_layer());
467 FindRootScrollLayer();
468 } 441 }
469 442
470 bool LayerTreeImpl::ContentsTexturesPurged() const { 443 bool LayerTreeImpl::ContentsTexturesPurged() const {
471 return contents_textures_purged_; 444 return contents_textures_purged_;
472 } 445 }
473 446
474 void LayerTreeImpl::SetContentsTexturesPurged() { 447 void LayerTreeImpl::SetContentsTexturesPurged() {
475 if (contents_textures_purged_) 448 if (contents_textures_purged_)
476 return; 449 return;
477 contents_textures_purged_ = true; 450 contents_textures_purged_ = true;
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
646 return state.PassAs<base::Value>(); 619 return state.PassAs<base::Value>();
647 } 620 }
648 621
649 void LayerTreeImpl::SetRootLayerScrollOffsetDelegate( 622 void LayerTreeImpl::SetRootLayerScrollOffsetDelegate(
650 LayerScrollOffsetDelegate* root_layer_scroll_offset_delegate) { 623 LayerScrollOffsetDelegate* root_layer_scroll_offset_delegate) {
651 if (root_layer_scroll_offset_delegate_ == root_layer_scroll_offset_delegate) 624 if (root_layer_scroll_offset_delegate_ == root_layer_scroll_offset_delegate)
652 return; 625 return;
653 626
654 root_layer_scroll_offset_delegate_ = root_layer_scroll_offset_delegate; 627 root_layer_scroll_offset_delegate_ = root_layer_scroll_offset_delegate;
655 628
656 if (root_scroll_layer_) { 629 if (root_layer_scroll_offset_delegate_) {
657 root_scroll_layer_->SetScrollOffsetDelegate( 630 root_layer_scroll_offset_delegate_->SetTotalScrollOffset(TotalScrollOffset() );
631 root_layer_scroll_offset_delegate_->SetMaxScrollOffset(
632 TotalMaxScrollOffset());
633 }
634
635 if (inner_viewport_scroll_layer_) {
636 inner_viewport_scroll_layer_->SetScrollOffsetDelegate(
658 root_layer_scroll_offset_delegate_); 637 root_layer_scroll_offset_delegate_);
659 } 638 }
660 639
640 if (outer_viewport_scroll_layer_) {
641 outer_viewport_scroll_layer_->SetScrollOffsetDelegate(
642 root_layer_scroll_offset_delegate_);
643 }
644
661 if (root_layer_scroll_offset_delegate_) { 645 if (root_layer_scroll_offset_delegate_) {
662 root_layer_scroll_offset_delegate_->SetScrollableSize(ScrollableSize()); 646 root_layer_scroll_offset_delegate_->SetScrollableSize(ScrollableSize());
663 root_layer_scroll_offset_delegate_->SetTotalPageScaleFactor( 647 root_layer_scroll_offset_delegate_->SetTotalPageScaleFactor(
664 total_page_scale_factor()); 648 total_page_scale_factor());
665 } 649 }
666 } 650 }
667 651
652 // TODO(wjmaclean) Rename this function, as we no longer have a
653 // "RootScrollLayer".
668 void LayerTreeImpl::UpdateRootScrollLayerSizeDelta() { 654 void LayerTreeImpl::UpdateRootScrollLayerSizeDelta() {
669 LayerImpl* root_scroll = RootScrollLayer(); 655 // TODO(wjmaclean) verify this is really the right thing to do in cases where
656 // the pinch virtual viewport is active.
657 LayerImpl* root_scroll = InnerViewportScrollLayer();
670 LayerImpl* root_container = RootContainerLayer(); 658 LayerImpl* root_container = RootContainerLayer();
671 DCHECK(root_scroll); 659 DCHECK(root_scroll);
672 DCHECK(root_container); 660 DCHECK(root_container);
673 DCHECK(IsActiveTree()); 661 DCHECK(IsActiveTree());
674 662
675 gfx::Vector2dF scrollable_viewport_size = 663 gfx::Vector2dF scrollable_viewport_size =
676 gfx::RectF(ScrollableViewportSize()).bottom_right() - gfx::PointF(); 664 gfx::RectF(ScrollableViewportSize()).bottom_right() - gfx::PointF();
677 665
678 gfx::Vector2dF original_viewport_size = 666 gfx::Vector2dF original_viewport_size =
679 gfx::RectF(root_container->bounds()).bottom_right() - 667 gfx::RectF(root_container->bounds()).bottom_right() -
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
761 const std::vector<LayerImpl*> LayerTreeImpl::LayersWithCopyOutputRequest() 749 const std::vector<LayerImpl*> LayerTreeImpl::LayersWithCopyOutputRequest()
762 const { 750 const {
763 // Only the active tree needs to know about layers with copy requests, as 751 // Only the active tree needs to know about layers with copy requests, as
764 // they are aborted if not serviced during draw. 752 // they are aborted if not serviced during draw.
765 DCHECK(IsActiveTree()); 753 DCHECK(IsActiveTree());
766 754
767 return layers_with_copy_output_request_; 755 return layers_with_copy_output_request_;
768 } 756 }
769 757
770 } // namespace cc 758 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698