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

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

Issue 2867793002: Add a cache of LayerImpl's viewport layer type (Closed)
Patch Set: Rebase from space Created 3 years, 7 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/layer_tree_impl_unittest.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 <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 } 132 }
133 133
134 void LayerTreeImpl::RecreateTileResources() { 134 void LayerTreeImpl::RecreateTileResources() {
135 if (!LayerListIsEmpty()) { 135 if (!LayerListIsEmpty()) {
136 LayerTreeHostCommon::CallFunctionForEveryLayer( 136 LayerTreeHostCommon::CallFunctionForEveryLayer(
137 this, [](LayerImpl* layer) { layer->RecreateTileResources(); }); 137 this, [](LayerImpl* layer) { layer->RecreateTileResources(); });
138 } 138 }
139 } 139 }
140 140
141 bool LayerTreeImpl::IsViewportLayerId(int id) const { 141 bool LayerTreeImpl::IsViewportLayerId(int id) const {
142 if (id == inner_viewport_scroll_layer_id_ || 142 #if DCHECK_IS_ON()
143 id == outer_viewport_scroll_layer_id_) 143 // Ensure the LayerImpl viewport layer types correspond to the LayerTreeImpl's
144 return true; 144 // viewport layers.
145 if (id == inner_viewport_scroll_layer_id_)
146 DCHECK(LayerById(id)->viewport_layer_type() == INNER_VIEWPORT_SCROLL);
147 if (id == outer_viewport_scroll_layer_id_)
148 DCHECK(LayerById(id)->viewport_layer_type() == OUTER_VIEWPORT_SCROLL);
145 if (InnerViewportContainerLayer() && 149 if (InnerViewportContainerLayer() &&
146 id == InnerViewportContainerLayer()->id()) 150 id == InnerViewportContainerLayer()->id())
147 return true; 151 DCHECK(InnerViewportContainerLayer()->viewport_layer_type() ==
152 INNER_VIEWPORT_CONTAINER);
148 if (OuterViewportContainerLayer() && 153 if (OuterViewportContainerLayer() &&
149 id == OuterViewportContainerLayer()->id()) 154 id == OuterViewportContainerLayer()->id())
150 return true; 155 DCHECK(OuterViewportContainerLayer()->viewport_layer_type() ==
151 156 OUTER_VIEWPORT_CONTAINER);
157 #endif
158 if (auto* layer = LayerById(id))
159 return layer->viewport_layer_type() != NOT_VIEWPORT_LAYER;
152 return false; 160 return false;
153 } 161 }
154 162
155 void LayerTreeImpl::DidUpdateScrollOffset(int layer_id) { 163 void LayerTreeImpl::DidUpdateScrollOffset(int layer_id) {
156 DidUpdateScrollState(layer_id); 164 DidUpdateScrollState(layer_id);
157 TransformTree& transform_tree = property_trees()->transform_tree; 165 TransformTree& transform_tree = property_trees()->transform_tree;
158 ScrollTree& scroll_tree = property_trees()->scroll_tree; 166 ScrollTree& scroll_tree = property_trees()->scroll_tree;
159 int transform_id = TransformTree::kInvalidNodeId; 167 int transform_id = TransformTree::kInvalidNodeId;
160 168
161 // If pending tree topology changed and we still want to notify the pending 169 // If pending tree topology changed and we still want to notify the pending
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 411
404 target_tree->PassSwapPromises(std::move(swap_promise_list_)); 412 target_tree->PassSwapPromises(std::move(swap_promise_list_));
405 swap_promise_list_.clear(); 413 swap_promise_list_.clear();
406 414
407 target_tree->set_browser_controls_shrink_blink_size( 415 target_tree->set_browser_controls_shrink_blink_size(
408 browser_controls_shrink_blink_size_); 416 browser_controls_shrink_blink_size_);
409 target_tree->set_top_controls_height(top_controls_height_); 417 target_tree->set_top_controls_height(top_controls_height_);
410 target_tree->set_bottom_controls_height(bottom_controls_height_); 418 target_tree->set_bottom_controls_height(bottom_controls_height_);
411 target_tree->PushBrowserControls(nullptr); 419 target_tree->PushBrowserControls(nullptr);
412 420
421 // The page scale factor update can affect scrolling which requires that
422 // these ids are set, so this must be before PushPageScaleFactorAndLimits.
423 target_tree->SetViewportLayersFromIds(
424 overscroll_elasticity_layer_id_, page_scale_layer_id_,
425 inner_viewport_scroll_layer_id_, outer_viewport_scroll_layer_id_);
426
413 // Active tree already shares the page_scale_factor object with pending 427 // Active tree already shares the page_scale_factor object with pending
414 // tree so only the limits need to be provided. 428 // tree so only the limits need to be provided.
415 target_tree->PushPageScaleFactorAndLimits(nullptr, min_page_scale_factor(), 429 target_tree->PushPageScaleFactorAndLimits(nullptr, min_page_scale_factor(),
416 max_page_scale_factor()); 430 max_page_scale_factor());
417 target_tree->SetDeviceScaleFactor(device_scale_factor()); 431 target_tree->SetDeviceScaleFactor(device_scale_factor());
418 target_tree->set_painted_device_scale_factor(painted_device_scale_factor()); 432 target_tree->set_painted_device_scale_factor(painted_device_scale_factor());
419 target_tree->SetRasterColorSpace(raster_color_space_); 433 target_tree->SetRasterColorSpace(raster_color_space_);
420 target_tree->elastic_overscroll()->PushPendingToActive(); 434 target_tree->elastic_overscroll()->PushPendingToActive();
421 435
422 target_tree->set_content_source_id(content_source_id()); 436 target_tree->set_content_source_id(content_source_id());
423 437
424 target_tree->set_local_surface_id(local_surface_id()); 438 target_tree->set_local_surface_id(local_surface_id());
425 439
426 target_tree->pending_page_scale_animation_ = 440 target_tree->pending_page_scale_animation_ =
427 std::move(pending_page_scale_animation_); 441 std::move(pending_page_scale_animation_);
428 442
429 target_tree->SetViewportLayersFromIds(
430 overscroll_elasticity_layer_id_, page_scale_layer_id_,
431 inner_viewport_scroll_layer_id_, outer_viewport_scroll_layer_id_);
432
433 target_tree->RegisterSelection(selection_); 443 target_tree->RegisterSelection(selection_);
434 444
435 // This should match the property synchronization in 445 // This should match the property synchronization in
436 // LayerTreeHost::finishCommitOnImplThread(). 446 // LayerTreeHost::finishCommitOnImplThread().
437 target_tree->set_source_frame_number(source_frame_number()); 447 target_tree->set_source_frame_number(source_frame_number());
438 target_tree->set_background_color(background_color()); 448 target_tree->set_background_color(background_color());
439 target_tree->set_has_transparent_background(has_transparent_background()); 449 target_tree->set_has_transparent_background(has_transparent_background());
440 target_tree->set_have_scroll_event_handlers(have_scroll_event_handlers()); 450 target_tree->set_have_scroll_event_handlers(have_scroll_event_handlers());
441 target_tree->set_event_listener_properties( 451 target_tree->set_event_listener_properties(
442 EventListenerClass::kTouchStartOrMove, 452 EventListenerClass::kTouchStartOrMove,
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after
967 977
968 void LayerTreeImpl::SetViewportLayersFromIds( 978 void LayerTreeImpl::SetViewportLayersFromIds(
969 int overscroll_elasticity_layer_id, 979 int overscroll_elasticity_layer_id,
970 int page_scale_layer_id, 980 int page_scale_layer_id,
971 int inner_viewport_scroll_layer_id, 981 int inner_viewport_scroll_layer_id,
972 int outer_viewport_scroll_layer_id) { 982 int outer_viewport_scroll_layer_id) {
973 overscroll_elasticity_layer_id_ = overscroll_elasticity_layer_id; 983 overscroll_elasticity_layer_id_ = overscroll_elasticity_layer_id;
974 page_scale_layer_id_ = page_scale_layer_id; 984 page_scale_layer_id_ = page_scale_layer_id;
975 inner_viewport_scroll_layer_id_ = inner_viewport_scroll_layer_id; 985 inner_viewport_scroll_layer_id_ = inner_viewport_scroll_layer_id;
976 outer_viewport_scroll_layer_id_ = outer_viewport_scroll_layer_id; 986 outer_viewport_scroll_layer_id_ = outer_viewport_scroll_layer_id;
987
988 UpdateViewportLayerTypes();
977 } 989 }
978 990
979 void LayerTreeImpl::ClearViewportLayers() { 991 void LayerTreeImpl::ClearViewportLayers() {
980 overscroll_elasticity_layer_id_ = Layer::INVALID_ID; 992 SetViewportLayersFromIds(Layer::INVALID_ID, Layer::INVALID_ID,
981 page_scale_layer_id_ = Layer::INVALID_ID; 993 Layer::INVALID_ID, Layer::INVALID_ID);
982 inner_viewport_scroll_layer_id_ = Layer::INVALID_ID; 994 }
983 outer_viewport_scroll_layer_id_ = Layer::INVALID_ID; 995
996 void LayerTreeImpl::UpdateViewportLayerTypes() {
997 if (auto* inner_scroll = LayerById(inner_viewport_scroll_layer_id_)) {
998 inner_scroll->SetViewportLayerType(INNER_VIEWPORT_SCROLL);
999 if (auto* inner_container = inner_scroll->scroll_clip_layer())
1000 inner_container->SetViewportLayerType(INNER_VIEWPORT_CONTAINER);
1001 }
1002 if (auto* outer_scroll = LayerById(outer_viewport_scroll_layer_id_)) {
1003 outer_scroll->SetViewportLayerType(OUTER_VIEWPORT_SCROLL);
1004 if (auto* outer_container = outer_scroll->scroll_clip_layer())
1005 outer_container->SetViewportLayerType(OUTER_VIEWPORT_CONTAINER);
1006 }
984 } 1007 }
985 1008
986 // For unit tests, we use the layer's id as its element id. 1009 // For unit tests, we use the layer's id as its element id.
987 static void SetElementIdForTesting(LayerImpl* layer) { 1010 static void SetElementIdForTesting(LayerImpl* layer) {
988 layer->SetElementId(LayerIdToElementIdForTesting(layer->id())); 1011 layer->SetElementId(LayerIdToElementIdForTesting(layer->id()));
989 } 1012 }
990 1013
991 void LayerTreeImpl::SetElementIdsForTesting() { 1014 void LayerTreeImpl::SetElementIdsForTesting() {
992 LayerListIterator<LayerImpl> it(root_layer_for_testing_); 1015 LayerListIterator<LayerImpl> it(root_layer_for_testing_);
993 for (; it != LayerListIterator<LayerImpl>(nullptr); ++it) { 1016 for (; it != LayerListIterator<LayerImpl>(nullptr); ++it) {
(...skipping 1089 matching lines...) Expand 10 before | Expand all | Expand 10 after
2083 2106
2084 void LayerTreeImpl::ResetAllChangeTracking() { 2107 void LayerTreeImpl::ResetAllChangeTracking() {
2085 layers_that_should_push_properties_.clear(); 2108 layers_that_should_push_properties_.clear();
2086 // Iterate over all layers, including masks. 2109 // Iterate over all layers, including masks.
2087 for (auto& layer : *layers_) 2110 for (auto& layer : *layers_)
2088 layer->ResetChangeTracking(); 2111 layer->ResetChangeTracking();
2089 property_trees_.ResetAllChangeTracking(); 2112 property_trees_.ResetAllChangeTracking();
2090 } 2113 }
2091 2114
2092 } // namespace cc 2115 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_impl.h ('k') | cc/trees/layer_tree_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698