| 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 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 scoped_refptr<SyncedBrowserControls> top_controls_shown_ratio, | 72 scoped_refptr<SyncedBrowserControls> top_controls_shown_ratio, |
| 73 scoped_refptr<SyncedElasticOverscroll> elastic_overscroll) | 73 scoped_refptr<SyncedElasticOverscroll> elastic_overscroll) |
| 74 : layer_tree_host_impl_(layer_tree_host_impl), | 74 : layer_tree_host_impl_(layer_tree_host_impl), |
| 75 source_frame_number_(-1), | 75 source_frame_number_(-1), |
| 76 is_first_frame_after_commit_tracker_(-1), | 76 is_first_frame_after_commit_tracker_(-1), |
| 77 root_layer_for_testing_(nullptr), | 77 root_layer_for_testing_(nullptr), |
| 78 hud_layer_(nullptr), | 78 hud_layer_(nullptr), |
| 79 background_color_(0), | 79 background_color_(0), |
| 80 has_transparent_background_(false), | 80 has_transparent_background_(false), |
| 81 last_scrolled_scroll_node_index_(ScrollTree::kInvalidNodeId), | 81 last_scrolled_scroll_node_index_(ScrollTree::kInvalidNodeId), |
| 82 overscroll_elasticity_layer_id_(Layer::INVALID_ID), | |
| 83 page_scale_layer_id_(Layer::INVALID_ID), | |
| 84 inner_viewport_container_layer_id_(Layer::INVALID_ID), | |
| 85 outer_viewport_container_layer_id_(Layer::INVALID_ID), | |
| 86 inner_viewport_scroll_layer_id_(Layer::INVALID_ID), | |
| 87 outer_viewport_scroll_layer_id_(Layer::INVALID_ID), | |
| 88 page_scale_factor_(page_scale_factor), | 82 page_scale_factor_(page_scale_factor), |
| 89 min_page_scale_factor_(0), | 83 min_page_scale_factor_(0), |
| 90 max_page_scale_factor_(0), | 84 max_page_scale_factor_(0), |
| 91 device_scale_factor_(1.f), | 85 device_scale_factor_(1.f), |
| 92 painted_device_scale_factor_(1.f), | 86 painted_device_scale_factor_(1.f), |
| 93 content_source_id_(0), | 87 content_source_id_(0), |
| 94 elastic_overscroll_(elastic_overscroll), | 88 elastic_overscroll_(elastic_overscroll), |
| 95 layers_(new OwnedLayerImplList), | 89 layers_(new OwnedLayerImplList), |
| 96 viewport_size_invalid_(false), | 90 viewport_size_invalid_(false), |
| 97 needs_update_draw_properties_(true), | 91 needs_update_draw_properties_(true), |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 152 if (!LayerListIsEmpty()) { | 146 if (!LayerListIsEmpty()) { |
| 153 LayerTreeHostCommon::CallFunctionForEveryLayer( | 147 LayerTreeHostCommon::CallFunctionForEveryLayer( |
| 154 this, [](LayerImpl* layer) { layer->RecreateTileResources(); }); | 148 this, [](LayerImpl* layer) { layer->RecreateTileResources(); }); |
| 155 } | 149 } |
| 156 } | 150 } |
| 157 | 151 |
| 158 bool LayerTreeImpl::IsViewportLayerId(int id) const { | 152 bool LayerTreeImpl::IsViewportLayerId(int id) const { |
| 159 #if DCHECK_IS_ON() | 153 #if DCHECK_IS_ON() |
| 160 // Ensure the LayerImpl viewport layer types correspond to the LayerTreeImpl's | 154 // Ensure the LayerImpl viewport layer types correspond to the LayerTreeImpl's |
| 161 // viewport layers. | 155 // viewport layers. |
| 162 if (id == inner_viewport_container_layer_id_) | 156 if (id == viewport_layer_ids_.inner_viewport_container) |
| 163 DCHECK(LayerById(id)->viewport_layer_type() == INNER_VIEWPORT_CONTAINER); | 157 DCHECK(LayerById(id)->viewport_layer_type() == INNER_VIEWPORT_CONTAINER); |
| 164 if (id == outer_viewport_container_layer_id_) | 158 if (id == viewport_layer_ids_.outer_viewport_container) |
| 165 DCHECK(LayerById(id)->viewport_layer_type() == OUTER_VIEWPORT_CONTAINER); | 159 DCHECK(LayerById(id)->viewport_layer_type() == OUTER_VIEWPORT_CONTAINER); |
| 166 if (id == inner_viewport_scroll_layer_id_) | 160 if (id == viewport_layer_ids_.inner_viewport_scroll) |
| 167 DCHECK(LayerById(id)->viewport_layer_type() == INNER_VIEWPORT_SCROLL); | 161 DCHECK(LayerById(id)->viewport_layer_type() == INNER_VIEWPORT_SCROLL); |
| 168 if (id == outer_viewport_scroll_layer_id_) | 162 if (id == viewport_layer_ids_.outer_viewport_scroll) |
| 169 DCHECK(LayerById(id)->viewport_layer_type() == OUTER_VIEWPORT_SCROLL); | 163 DCHECK(LayerById(id)->viewport_layer_type() == OUTER_VIEWPORT_SCROLL); |
| 170 #endif | 164 #endif |
| 171 if (auto* layer = LayerById(id)) | 165 if (auto* layer = LayerById(id)) |
| 172 return layer->viewport_layer_type() != NOT_VIEWPORT_LAYER; | 166 return layer->viewport_layer_type() != NOT_VIEWPORT_LAYER; |
| 173 return false; | 167 return false; |
| 174 } | 168 } |
| 175 | 169 |
| 176 void LayerTreeImpl::DidUpdateScrollOffset(int layer_id) { | 170 void LayerTreeImpl::DidUpdateScrollOffset(int layer_id) { |
| 177 DidUpdateScrollState(layer_id); | 171 DidUpdateScrollState(layer_id); |
| 178 DCHECK(lifecycle().AllowsPropertyTreeAccess()); | 172 DCHECK(lifecycle().AllowsPropertyTreeAccess()); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 221 return; | 215 return; |
| 222 | 216 |
| 223 int scroll_layer_id, clip_layer_id; | 217 int scroll_layer_id, clip_layer_id; |
| 224 if (IsViewportLayerId(layer_id)) { | 218 if (IsViewportLayerId(layer_id)) { |
| 225 if (!InnerViewportContainerLayer()) | 219 if (!InnerViewportContainerLayer()) |
| 226 return; | 220 return; |
| 227 | 221 |
| 228 // For scrollbar purposes, a change to any of the four viewport layers | 222 // For scrollbar purposes, a change to any of the four viewport layers |
| 229 // should affect the scrollbars tied to the outermost layers, which express | 223 // should affect the scrollbars tied to the outermost layers, which express |
| 230 // the sum of the entire viewport. | 224 // the sum of the entire viewport. |
| 231 scroll_layer_id = outer_viewport_scroll_layer_id_; | 225 scroll_layer_id = viewport_layer_ids_.outer_viewport_scroll; |
| 232 clip_layer_id = InnerViewportContainerLayer()->id(); | 226 clip_layer_id = viewport_layer_ids_.inner_viewport_container; |
| 233 } else { | 227 } else { |
| 234 // If the clip layer id was passed in, then look up the scroll layer, or | 228 // If the clip layer id was passed in, then look up the scroll layer, or |
| 235 // vice versa. | 229 // vice versa. |
| 236 auto i = clip_scroll_map_.find(layer_id); | 230 auto i = clip_scroll_map_.find(layer_id); |
| 237 if (i != clip_scroll_map_.end()) { | 231 if (i != clip_scroll_map_.end()) { |
| 238 scroll_layer_id = i->second; | 232 scroll_layer_id = i->second; |
| 239 clip_layer_id = layer_id; | 233 clip_layer_id = layer_id; |
| 240 } else { | 234 } else { |
| 241 scroll_layer_id = layer_id; | 235 scroll_layer_id = layer_id; |
| 242 clip_layer_id = LayerById(scroll_layer_id)->scroll_clip_layer_id(); | 236 clip_layer_id = LayerById(scroll_layer_id)->scroll_clip_layer_id(); |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 336 return; | 330 return; |
| 337 | 331 |
| 338 for (auto* picture_layer : picture_layers_) | 332 for (auto* picture_layer : picture_layers_) |
| 339 picture_layer->InvalidateRegionForImages(images_to_invalidate); | 333 picture_layer->InvalidateRegionForImages(images_to_invalidate); |
| 340 } | 334 } |
| 341 | 335 |
| 342 bool LayerTreeImpl::IsRootLayer(const LayerImpl* layer) const { | 336 bool LayerTreeImpl::IsRootLayer(const LayerImpl* layer) const { |
| 343 return layer_list_.empty() ? false : layer_list_[0] == layer; | 337 return layer_list_.empty() ? false : layer_list_[0] == layer; |
| 344 } | 338 } |
| 345 | 339 |
| 346 LayerImpl* LayerTreeImpl::InnerViewportScrollLayer() const { | |
| 347 return LayerById(inner_viewport_scroll_layer_id_); | |
| 348 } | |
| 349 | |
| 350 LayerImpl* LayerTreeImpl::OuterViewportScrollLayer() const { | |
| 351 return LayerById(outer_viewport_scroll_layer_id_); | |
| 352 } | |
| 353 | |
| 354 gfx::ScrollOffset LayerTreeImpl::TotalScrollOffset() const { | 340 gfx::ScrollOffset LayerTreeImpl::TotalScrollOffset() const { |
| 355 gfx::ScrollOffset offset; | 341 gfx::ScrollOffset offset; |
| 356 | 342 |
| 357 if (InnerViewportScrollLayer()) | 343 if (InnerViewportScrollLayer()) |
| 358 offset += InnerViewportScrollLayer()->CurrentScrollOffset(); | 344 offset += InnerViewportScrollLayer()->CurrentScrollOffset(); |
| 359 | 345 |
| 360 if (OuterViewportScrollLayer()) | 346 if (OuterViewportScrollLayer()) |
| 361 offset += OuterViewportScrollLayer()->CurrentScrollOffset(); | 347 offset += OuterViewportScrollLayer()->CurrentScrollOffset(); |
| 362 | 348 |
| 363 return offset; | 349 return offset; |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 444 swap_promise_list_.clear(); | 430 swap_promise_list_.clear(); |
| 445 | 431 |
| 446 target_tree->set_browser_controls_shrink_blink_size( | 432 target_tree->set_browser_controls_shrink_blink_size( |
| 447 browser_controls_shrink_blink_size_); | 433 browser_controls_shrink_blink_size_); |
| 448 target_tree->set_top_controls_height(top_controls_height_); | 434 target_tree->set_top_controls_height(top_controls_height_); |
| 449 target_tree->set_bottom_controls_height(bottom_controls_height_); | 435 target_tree->set_bottom_controls_height(bottom_controls_height_); |
| 450 target_tree->PushBrowserControls(nullptr); | 436 target_tree->PushBrowserControls(nullptr); |
| 451 | 437 |
| 452 // The page scale factor update can affect scrolling which requires that | 438 // The page scale factor update can affect scrolling which requires that |
| 453 // these ids are set, so this must be before PushPageScaleFactorAndLimits. | 439 // these ids are set, so this must be before PushPageScaleFactorAndLimits. |
| 454 target_tree->SetViewportLayersFromIds( | 440 target_tree->SetViewportLayersFromIds(viewport_layer_ids_); |
| 455 overscroll_elasticity_layer_id_, page_scale_layer_id_, | |
| 456 inner_viewport_container_layer_id_, outer_viewport_container_layer_id_, | |
| 457 inner_viewport_scroll_layer_id_, outer_viewport_scroll_layer_id_); | |
| 458 | 441 |
| 459 // Active tree already shares the page_scale_factor object with pending | 442 // Active tree already shares the page_scale_factor object with pending |
| 460 // tree so only the limits need to be provided. | 443 // tree so only the limits need to be provided. |
| 461 target_tree->PushPageScaleFactorAndLimits(nullptr, min_page_scale_factor(), | 444 target_tree->PushPageScaleFactorAndLimits(nullptr, min_page_scale_factor(), |
| 462 max_page_scale_factor()); | 445 max_page_scale_factor()); |
| 463 target_tree->SetDeviceScaleFactor(device_scale_factor()); | 446 target_tree->SetDeviceScaleFactor(device_scale_factor()); |
| 464 target_tree->set_painted_device_scale_factor(painted_device_scale_factor()); | 447 target_tree->set_painted_device_scale_factor(painted_device_scale_factor()); |
| 465 target_tree->SetRasterColorSpace(raster_color_space_); | 448 target_tree->SetRasterColorSpace(raster_color_space_); |
| 466 target_tree->elastic_overscroll()->PushPendingToActive(); | 449 target_tree->elastic_overscroll()->PushPendingToActive(); |
| 467 | 450 |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 641 | 624 |
| 642 void LayerTreeImpl::SetFilterMutated(ElementId element_id, | 625 void LayerTreeImpl::SetFilterMutated(ElementId element_id, |
| 643 const FilterOperations& filters) { | 626 const FilterOperations& filters) { |
| 644 DCHECK_EQ( | 627 DCHECK_EQ( |
| 645 1u, property_trees()->element_id_to_effect_node_index.count(element_id)); | 628 1u, property_trees()->element_id_to_effect_node_index.count(element_id)); |
| 646 element_id_to_filter_animations_[element_id] = filters; | 629 element_id_to_filter_animations_[element_id] = filters; |
| 647 if (property_trees()->effect_tree.OnFilterAnimated(element_id, filters)) | 630 if (property_trees()->effect_tree.OnFilterAnimated(element_id, filters)) |
| 648 set_needs_update_draw_properties(); | 631 set_needs_update_draw_properties(); |
| 649 } | 632 } |
| 650 | 633 |
| 651 LayerImpl* LayerTreeImpl::InnerViewportContainerLayer() const { | |
| 652 return LayerById(inner_viewport_container_layer_id_); | |
| 653 } | |
| 654 | |
| 655 LayerImpl* LayerTreeImpl::OuterViewportContainerLayer() const { | |
| 656 return LayerById(outer_viewport_container_layer_id_); | |
| 657 } | |
| 658 | |
| 659 ScrollNode* LayerTreeImpl::CurrentlyScrollingNode() { | 634 ScrollNode* LayerTreeImpl::CurrentlyScrollingNode() { |
| 660 DCHECK(IsActiveTree()); | 635 DCHECK(IsActiveTree()); |
| 661 return property_trees_.scroll_tree.CurrentlyScrollingNode(); | 636 return property_trees_.scroll_tree.CurrentlyScrollingNode(); |
| 662 } | 637 } |
| 663 | 638 |
| 664 const ScrollNode* LayerTreeImpl::CurrentlyScrollingNode() const { | 639 const ScrollNode* LayerTreeImpl::CurrentlyScrollingNode() const { |
| 665 return property_trees_.scroll_tree.CurrentlyScrollingNode(); | 640 return property_trees_.scroll_tree.CurrentlyScrollingNode(); |
| 666 } | 641 } |
| 667 | 642 |
| 668 int LayerTreeImpl::LastScrolledScrollNodeIndex() const { | 643 int LayerTreeImpl::LastScrolledScrollNodeIndex() const { |
| (...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 925 | 900 |
| 926 return true; | 901 return true; |
| 927 } | 902 } |
| 928 | 903 |
| 929 void LayerTreeImpl::DidUpdatePageScale() { | 904 void LayerTreeImpl::DidUpdatePageScale() { |
| 930 if (IsActiveTree()) | 905 if (IsActiveTree()) |
| 931 page_scale_factor()->SetCurrent( | 906 page_scale_factor()->SetCurrent( |
| 932 ClampPageScaleFactorToLimits(current_page_scale_factor())); | 907 ClampPageScaleFactorToLimits(current_page_scale_factor())); |
| 933 | 908 |
| 934 set_needs_update_draw_properties(); | 909 set_needs_update_draw_properties(); |
| 935 DidUpdateScrollState(inner_viewport_scroll_layer_id_); | 910 DidUpdateScrollState(viewport_layer_ids_.inner_viewport_scroll); |
| 936 | 911 |
| 937 if (IsActiveTree() && layer_tree_host_impl_->ViewportMainScrollLayer()) { | 912 if (IsActiveTree() && layer_tree_host_impl_->ViewportMainScrollLayer()) { |
| 938 if (ScrollbarAnimationController* controller = | 913 if (ScrollbarAnimationController* controller = |
| 939 layer_tree_host_impl_->ScrollbarAnimationControllerForElementId( | 914 layer_tree_host_impl_->ScrollbarAnimationControllerForElementId( |
| 940 OuterViewportScrollLayer()->element_id())) | 915 OuterViewportScrollLayer()->element_id())) |
| 941 controller->DidScrollUpdate(); | 916 controller->DidScrollUpdate(); |
| 942 } | 917 } |
| 943 } | 918 } |
| 944 | 919 |
| 945 void LayerTreeImpl::SetDeviceScaleFactor(float device_scale_factor) { | 920 void LayerTreeImpl::SetDeviceScaleFactor(float device_scale_factor) { |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 993 page_scale_factor()->AbortCommit(); | 968 page_scale_factor()->AbortCommit(); |
| 994 top_controls_shown_ratio()->AbortCommit(); | 969 top_controls_shown_ratio()->AbortCommit(); |
| 995 elastic_overscroll()->AbortCommit(); | 970 elastic_overscroll()->AbortCommit(); |
| 996 | 971 |
| 997 if (layer_list_.empty()) | 972 if (layer_list_.empty()) |
| 998 return; | 973 return; |
| 999 | 974 |
| 1000 property_trees()->scroll_tree.ApplySentScrollDeltasFromAbortedCommit(); | 975 property_trees()->scroll_tree.ApplySentScrollDeltasFromAbortedCommit(); |
| 1001 } | 976 } |
| 1002 | 977 |
| 1003 void LayerTreeImpl::SetViewportLayersFromIds( | 978 void LayerTreeImpl::SetViewportLayersFromIds(const ViewportLayerIds& ids) { |
| 1004 int overscroll_elasticity_layer_id, | 979 viewport_layer_ids_ = ids; |
| 1005 int page_scale_layer_id, | |
| 1006 int inner_viewport_container_layer_id, | |
| 1007 int outer_viewport_container_layer_id, | |
| 1008 int inner_viewport_scroll_layer_id, | |
| 1009 int outer_viewport_scroll_layer_id) { | |
| 1010 overscroll_elasticity_layer_id_ = overscroll_elasticity_layer_id; | |
| 1011 page_scale_layer_id_ = page_scale_layer_id; | |
| 1012 inner_viewport_container_layer_id_ = inner_viewport_container_layer_id; | |
| 1013 outer_viewport_container_layer_id_ = outer_viewport_container_layer_id; | |
| 1014 inner_viewport_scroll_layer_id_ = inner_viewport_scroll_layer_id; | |
| 1015 outer_viewport_scroll_layer_id_ = outer_viewport_scroll_layer_id; | |
| 1016 | 980 |
| 1017 if (auto* inner_container = LayerById(inner_viewport_container_layer_id_)) | 981 // Set the viewport layer types. |
| 982 if (auto* inner_container = InnerViewportContainerLayer()) |
| 1018 inner_container->SetViewportLayerType(INNER_VIEWPORT_CONTAINER); | 983 inner_container->SetViewportLayerType(INNER_VIEWPORT_CONTAINER); |
| 1019 if (auto* inner_scroll = LayerById(inner_viewport_scroll_layer_id_)) | 984 if (auto* inner_scroll = InnerViewportScrollLayer()) |
| 1020 inner_scroll->SetViewportLayerType(INNER_VIEWPORT_SCROLL); | 985 inner_scroll->SetViewportLayerType(INNER_VIEWPORT_SCROLL); |
| 1021 if (auto* outer_container = LayerById(outer_viewport_container_layer_id_)) | 986 if (auto* outer_container = OuterViewportContainerLayer()) |
| 1022 outer_container->SetViewportLayerType(OUTER_VIEWPORT_CONTAINER); | 987 outer_container->SetViewportLayerType(OUTER_VIEWPORT_CONTAINER); |
| 1023 if (auto* outer_scroll = LayerById(outer_viewport_scroll_layer_id_)) | 988 if (auto* outer_scroll = OuterViewportScrollLayer()) |
| 1024 outer_scroll->SetViewportLayerType(OUTER_VIEWPORT_SCROLL); | 989 outer_scroll->SetViewportLayerType(OUTER_VIEWPORT_SCROLL); |
| 1025 } | 990 } |
| 1026 | 991 |
| 1027 void LayerTreeImpl::ClearViewportLayers() { | 992 void LayerTreeImpl::ClearViewportLayers() { |
| 1028 SetViewportLayersFromIds(Layer::INVALID_ID, Layer::INVALID_ID, | 993 SetViewportLayersFromIds(ViewportLayerIds()); |
| 1029 Layer::INVALID_ID, Layer::INVALID_ID, | |
| 1030 Layer::INVALID_ID, Layer::INVALID_ID); | |
| 1031 } | 994 } |
| 1032 | 995 |
| 1033 // For unit tests, we use the layer's id as its element id. | 996 // For unit tests, we use the layer's id as its element id. |
| 1034 static void SetElementIdForTesting(LayerImpl* layer) { | 997 static void SetElementIdForTesting(LayerImpl* layer) { |
| 1035 layer->SetElementId(LayerIdToElementIdForTesting(layer->id())); | 998 layer->SetElementId(LayerIdToElementIdForTesting(layer->id())); |
| 1036 } | 999 } |
| 1037 | 1000 |
| 1038 void LayerTreeImpl::SetElementIdsForTesting() { | 1001 void LayerTreeImpl::SetElementIdsForTesting() { |
| 1039 LayerListIterator<LayerImpl> it(root_layer_for_testing_); | 1002 LayerListIterator<LayerImpl> it(root_layer_for_testing_); |
| 1040 for (; it != LayerListIterator<LayerImpl>(nullptr); ++it) { | 1003 for (; it != LayerListIterator<LayerImpl>(nullptr); ++it) { |
| (...skipping 1097 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2138 | 2101 |
| 2139 void LayerTreeImpl::ResetAllChangeTracking() { | 2102 void LayerTreeImpl::ResetAllChangeTracking() { |
| 2140 layers_that_should_push_properties_.clear(); | 2103 layers_that_should_push_properties_.clear(); |
| 2141 // Iterate over all layers, including masks. | 2104 // Iterate over all layers, including masks. |
| 2142 for (auto& layer : *layers_) | 2105 for (auto& layer : *layers_) |
| 2143 layer->ResetChangeTracking(); | 2106 layer->ResetChangeTracking(); |
| 2144 property_trees_.ResetAllChangeTracking(); | 2107 property_trees_.ResetAllChangeTracking(); |
| 2145 } | 2108 } |
| 2146 | 2109 |
| 2147 } // namespace cc | 2110 } // namespace cc |
| OLD | NEW |