OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |