| 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 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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), | 82 overscroll_elasticity_layer_id_(Layer::INVALID_ID), |
| 83 page_scale_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), |
| 84 inner_viewport_scroll_layer_id_(Layer::INVALID_ID), | 86 inner_viewport_scroll_layer_id_(Layer::INVALID_ID), |
| 85 outer_viewport_scroll_layer_id_(Layer::INVALID_ID), | 87 outer_viewport_scroll_layer_id_(Layer::INVALID_ID), |
| 86 page_scale_factor_(page_scale_factor), | 88 page_scale_factor_(page_scale_factor), |
| 87 min_page_scale_factor_(0), | 89 min_page_scale_factor_(0), |
| 88 max_page_scale_factor_(0), | 90 max_page_scale_factor_(0), |
| 89 device_scale_factor_(1.f), | 91 device_scale_factor_(1.f), |
| 90 painted_device_scale_factor_(1.f), | 92 painted_device_scale_factor_(1.f), |
| 91 content_source_id_(0), | 93 content_source_id_(0), |
| 92 elastic_overscroll_(elastic_overscroll), | 94 elastic_overscroll_(elastic_overscroll), |
| 93 layers_(new OwnedLayerImplList), | 95 layers_(new OwnedLayerImplList), |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 150 if (!LayerListIsEmpty()) { | 152 if (!LayerListIsEmpty()) { |
| 151 LayerTreeHostCommon::CallFunctionForEveryLayer( | 153 LayerTreeHostCommon::CallFunctionForEveryLayer( |
| 152 this, [](LayerImpl* layer) { layer->RecreateTileResources(); }); | 154 this, [](LayerImpl* layer) { layer->RecreateTileResources(); }); |
| 153 } | 155 } |
| 154 } | 156 } |
| 155 | 157 |
| 156 bool LayerTreeImpl::IsViewportLayerId(int id) const { | 158 bool LayerTreeImpl::IsViewportLayerId(int id) const { |
| 157 #if DCHECK_IS_ON() | 159 #if DCHECK_IS_ON() |
| 158 // Ensure the LayerImpl viewport layer types correspond to the LayerTreeImpl's | 160 // Ensure the LayerImpl viewport layer types correspond to the LayerTreeImpl's |
| 159 // viewport layers. | 161 // viewport layers. |
| 162 if (id == inner_viewport_container_layer_id_) |
| 163 DCHECK(LayerById(id)->viewport_layer_type() == INNER_VIEWPORT_CONTAINER); |
| 164 if (id == outer_viewport_container_layer_id_) |
| 165 DCHECK(LayerById(id)->viewport_layer_type() == OUTER_VIEWPORT_CONTAINER); |
| 160 if (id == inner_viewport_scroll_layer_id_) | 166 if (id == inner_viewport_scroll_layer_id_) |
| 161 DCHECK(LayerById(id)->viewport_layer_type() == INNER_VIEWPORT_SCROLL); | 167 DCHECK(LayerById(id)->viewport_layer_type() == INNER_VIEWPORT_SCROLL); |
| 162 if (id == outer_viewport_scroll_layer_id_) | 168 if (id == outer_viewport_scroll_layer_id_) |
| 163 DCHECK(LayerById(id)->viewport_layer_type() == OUTER_VIEWPORT_SCROLL); | 169 DCHECK(LayerById(id)->viewport_layer_type() == OUTER_VIEWPORT_SCROLL); |
| 164 if (InnerViewportContainerLayer() && | |
| 165 id == InnerViewportContainerLayer()->id()) | |
| 166 DCHECK(InnerViewportContainerLayer()->viewport_layer_type() == | |
| 167 INNER_VIEWPORT_CONTAINER); | |
| 168 if (OuterViewportContainerLayer() && | |
| 169 id == OuterViewportContainerLayer()->id()) | |
| 170 DCHECK(OuterViewportContainerLayer()->viewport_layer_type() == | |
| 171 OUTER_VIEWPORT_CONTAINER); | |
| 172 #endif | 170 #endif |
| 173 if (auto* layer = LayerById(id)) | 171 if (auto* layer = LayerById(id)) |
| 174 return layer->viewport_layer_type() != NOT_VIEWPORT_LAYER; | 172 return layer->viewport_layer_type() != NOT_VIEWPORT_LAYER; |
| 175 return false; | 173 return false; |
| 176 } | 174 } |
| 177 | 175 |
| 178 void LayerTreeImpl::DidUpdateScrollOffset(int layer_id) { | 176 void LayerTreeImpl::DidUpdateScrollOffset(int layer_id) { |
| 179 DidUpdateScrollState(layer_id); | 177 DidUpdateScrollState(layer_id); |
| 180 DCHECK(lifecycle().AllowsPropertyTreeAccess()); | 178 DCHECK(lifecycle().AllowsPropertyTreeAccess()); |
| 181 TransformTree& transform_tree = property_trees()->transform_tree; | 179 TransformTree& transform_tree = property_trees()->transform_tree; |
| (...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 448 target_tree->set_browser_controls_shrink_blink_size( | 446 target_tree->set_browser_controls_shrink_blink_size( |
| 449 browser_controls_shrink_blink_size_); | 447 browser_controls_shrink_blink_size_); |
| 450 target_tree->set_top_controls_height(top_controls_height_); | 448 target_tree->set_top_controls_height(top_controls_height_); |
| 451 target_tree->set_bottom_controls_height(bottom_controls_height_); | 449 target_tree->set_bottom_controls_height(bottom_controls_height_); |
| 452 target_tree->PushBrowserControls(nullptr); | 450 target_tree->PushBrowserControls(nullptr); |
| 453 | 451 |
| 454 // The page scale factor update can affect scrolling which requires that | 452 // The page scale factor update can affect scrolling which requires that |
| 455 // these ids are set, so this must be before PushPageScaleFactorAndLimits. | 453 // these ids are set, so this must be before PushPageScaleFactorAndLimits. |
| 456 target_tree->SetViewportLayersFromIds( | 454 target_tree->SetViewportLayersFromIds( |
| 457 overscroll_elasticity_layer_id_, page_scale_layer_id_, | 455 overscroll_elasticity_layer_id_, page_scale_layer_id_, |
| 456 inner_viewport_container_layer_id_, outer_viewport_container_layer_id_, |
| 458 inner_viewport_scroll_layer_id_, outer_viewport_scroll_layer_id_); | 457 inner_viewport_scroll_layer_id_, outer_viewport_scroll_layer_id_); |
| 459 | 458 |
| 460 // Active tree already shares the page_scale_factor object with pending | 459 // Active tree already shares the page_scale_factor object with pending |
| 461 // tree so only the limits need to be provided. | 460 // tree so only the limits need to be provided. |
| 462 target_tree->PushPageScaleFactorAndLimits(nullptr, min_page_scale_factor(), | 461 target_tree->PushPageScaleFactorAndLimits(nullptr, min_page_scale_factor(), |
| 463 max_page_scale_factor()); | 462 max_page_scale_factor()); |
| 464 target_tree->SetDeviceScaleFactor(device_scale_factor()); | 463 target_tree->SetDeviceScaleFactor(device_scale_factor()); |
| 465 target_tree->set_painted_device_scale_factor(painted_device_scale_factor()); | 464 target_tree->set_painted_device_scale_factor(painted_device_scale_factor()); |
| 466 target_tree->SetRasterColorSpace(raster_color_space_); | 465 target_tree->SetRasterColorSpace(raster_color_space_); |
| 467 target_tree->elastic_overscroll()->PushPendingToActive(); | 466 target_tree->elastic_overscroll()->PushPendingToActive(); |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 643 void LayerTreeImpl::SetFilterMutated(ElementId element_id, | 642 void LayerTreeImpl::SetFilterMutated(ElementId element_id, |
| 644 const FilterOperations& filters) { | 643 const FilterOperations& filters) { |
| 645 DCHECK_EQ( | 644 DCHECK_EQ( |
| 646 1u, property_trees()->element_id_to_effect_node_index.count(element_id)); | 645 1u, property_trees()->element_id_to_effect_node_index.count(element_id)); |
| 647 element_id_to_filter_animations_[element_id] = filters; | 646 element_id_to_filter_animations_[element_id] = filters; |
| 648 if (property_trees()->effect_tree.OnFilterAnimated(element_id, filters)) | 647 if (property_trees()->effect_tree.OnFilterAnimated(element_id, filters)) |
| 649 set_needs_update_draw_properties(); | 648 set_needs_update_draw_properties(); |
| 650 } | 649 } |
| 651 | 650 |
| 652 LayerImpl* LayerTreeImpl::InnerViewportContainerLayer() const { | 651 LayerImpl* LayerTreeImpl::InnerViewportContainerLayer() const { |
| 653 return InnerViewportScrollLayer() | 652 return LayerById(inner_viewport_container_layer_id_); |
| 654 ? InnerViewportScrollLayer()->scroll_clip_layer() | |
| 655 : NULL; | |
| 656 } | 653 } |
| 657 | 654 |
| 658 LayerImpl* LayerTreeImpl::OuterViewportContainerLayer() const { | 655 LayerImpl* LayerTreeImpl::OuterViewportContainerLayer() const { |
| 659 return OuterViewportScrollLayer() | 656 return LayerById(outer_viewport_container_layer_id_); |
| 660 ? OuterViewportScrollLayer()->scroll_clip_layer() | |
| 661 : NULL; | |
| 662 } | 657 } |
| 663 | 658 |
| 664 ScrollNode* LayerTreeImpl::CurrentlyScrollingNode() { | 659 ScrollNode* LayerTreeImpl::CurrentlyScrollingNode() { |
| 665 DCHECK(IsActiveTree()); | 660 DCHECK(IsActiveTree()); |
| 666 return property_trees_.scroll_tree.CurrentlyScrollingNode(); | 661 return property_trees_.scroll_tree.CurrentlyScrollingNode(); |
| 667 } | 662 } |
| 668 | 663 |
| 669 const ScrollNode* LayerTreeImpl::CurrentlyScrollingNode() const { | 664 const ScrollNode* LayerTreeImpl::CurrentlyScrollingNode() const { |
| 670 return property_trees_.scroll_tree.CurrentlyScrollingNode(); | 665 return property_trees_.scroll_tree.CurrentlyScrollingNode(); |
| 671 } | 666 } |
| (...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1001 | 996 |
| 1002 if (layer_list_.empty()) | 997 if (layer_list_.empty()) |
| 1003 return; | 998 return; |
| 1004 | 999 |
| 1005 property_trees()->scroll_tree.ApplySentScrollDeltasFromAbortedCommit(); | 1000 property_trees()->scroll_tree.ApplySentScrollDeltasFromAbortedCommit(); |
| 1006 } | 1001 } |
| 1007 | 1002 |
| 1008 void LayerTreeImpl::SetViewportLayersFromIds( | 1003 void LayerTreeImpl::SetViewportLayersFromIds( |
| 1009 int overscroll_elasticity_layer_id, | 1004 int overscroll_elasticity_layer_id, |
| 1010 int page_scale_layer_id, | 1005 int page_scale_layer_id, |
| 1006 int inner_viewport_container_layer_id, |
| 1007 int outer_viewport_container_layer_id, |
| 1011 int inner_viewport_scroll_layer_id, | 1008 int inner_viewport_scroll_layer_id, |
| 1012 int outer_viewport_scroll_layer_id) { | 1009 int outer_viewport_scroll_layer_id) { |
| 1013 overscroll_elasticity_layer_id_ = overscroll_elasticity_layer_id; | 1010 overscroll_elasticity_layer_id_ = overscroll_elasticity_layer_id; |
| 1014 page_scale_layer_id_ = page_scale_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; |
| 1015 inner_viewport_scroll_layer_id_ = inner_viewport_scroll_layer_id; | 1014 inner_viewport_scroll_layer_id_ = inner_viewport_scroll_layer_id; |
| 1016 outer_viewport_scroll_layer_id_ = outer_viewport_scroll_layer_id; | 1015 outer_viewport_scroll_layer_id_ = outer_viewport_scroll_layer_id; |
| 1017 | 1016 |
| 1018 // The scroll_clip_layer Layer properties should be up-to-date. | 1017 if (auto* inner_container = LayerById(inner_viewport_container_layer_id_)) |
| 1019 DCHECK(lifecycle().AllowsLayerPropertyAccess()); | 1018 inner_container->SetViewportLayerType(INNER_VIEWPORT_CONTAINER); |
| 1020 if (auto* inner_scroll = LayerById(inner_viewport_scroll_layer_id_)) { | 1019 if (auto* inner_scroll = LayerById(inner_viewport_scroll_layer_id_)) |
| 1021 inner_scroll->SetViewportLayerType(INNER_VIEWPORT_SCROLL); | 1020 inner_scroll->SetViewportLayerType(INNER_VIEWPORT_SCROLL); |
| 1022 if (auto* inner_container = inner_scroll->scroll_clip_layer()) | 1021 if (auto* outer_container = LayerById(outer_viewport_container_layer_id_)) |
| 1023 inner_container->SetViewportLayerType(INNER_VIEWPORT_CONTAINER); | 1022 outer_container->SetViewportLayerType(OUTER_VIEWPORT_CONTAINER); |
| 1024 } | 1023 if (auto* outer_scroll = LayerById(outer_viewport_scroll_layer_id_)) |
| 1025 if (auto* outer_scroll = LayerById(outer_viewport_scroll_layer_id_)) { | |
| 1026 outer_scroll->SetViewportLayerType(OUTER_VIEWPORT_SCROLL); | 1024 outer_scroll->SetViewportLayerType(OUTER_VIEWPORT_SCROLL); |
| 1027 if (auto* outer_container = outer_scroll->scroll_clip_layer()) | |
| 1028 outer_container->SetViewportLayerType(OUTER_VIEWPORT_CONTAINER); | |
| 1029 } | |
| 1030 } | 1025 } |
| 1031 | 1026 |
| 1032 void LayerTreeImpl::ClearViewportLayers() { | 1027 void LayerTreeImpl::ClearViewportLayers() { |
| 1033 SetViewportLayersFromIds(Layer::INVALID_ID, Layer::INVALID_ID, | 1028 SetViewportLayersFromIds(Layer::INVALID_ID, Layer::INVALID_ID, |
| 1029 Layer::INVALID_ID, Layer::INVALID_ID, |
| 1034 Layer::INVALID_ID, Layer::INVALID_ID); | 1030 Layer::INVALID_ID, Layer::INVALID_ID); |
| 1035 } | 1031 } |
| 1036 | 1032 |
| 1037 // For unit tests, we use the layer's id as its element id. | 1033 // For unit tests, we use the layer's id as its element id. |
| 1038 static void SetElementIdForTesting(LayerImpl* layer) { | 1034 static void SetElementIdForTesting(LayerImpl* layer) { |
| 1039 layer->SetElementId(LayerIdToElementIdForTesting(layer->id())); | 1035 layer->SetElementId(LayerIdToElementIdForTesting(layer->id())); |
| 1040 } | 1036 } |
| 1041 | 1037 |
| 1042 void LayerTreeImpl::SetElementIdsForTesting() { | 1038 void LayerTreeImpl::SetElementIdsForTesting() { |
| 1043 LayerListIterator<LayerImpl> it(root_layer_for_testing_); | 1039 LayerListIterator<LayerImpl> it(root_layer_for_testing_); |
| (...skipping 1094 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2138 | 2134 |
| 2139 void LayerTreeImpl::ResetAllChangeTracking() { | 2135 void LayerTreeImpl::ResetAllChangeTracking() { |
| 2140 layers_that_should_push_properties_.clear(); | 2136 layers_that_should_push_properties_.clear(); |
| 2141 // Iterate over all layers, including masks. | 2137 // Iterate over all layers, including masks. |
| 2142 for (auto& layer : *layers_) | 2138 for (auto& layer : *layers_) |
| 2143 layer->ResetChangeTracking(); | 2139 layer->ResetChangeTracking(); |
| 2144 property_trees_.ResetAllChangeTracking(); | 2140 property_trees_.ResetAllChangeTracking(); |
| 2145 } | 2141 } |
| 2146 | 2142 |
| 2147 } // namespace cc | 2143 } // namespace cc |
| OLD | NEW |