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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 namespace cc { | 48 namespace cc { |
49 | 49 |
50 LayerTreeImpl::LayerTreeImpl( | 50 LayerTreeImpl::LayerTreeImpl( |
51 LayerTreeHostImpl* layer_tree_host_impl, | 51 LayerTreeHostImpl* layer_tree_host_impl, |
52 scoped_refptr<SyncedProperty<ScaleGroup>> page_scale_factor, | 52 scoped_refptr<SyncedProperty<ScaleGroup>> page_scale_factor, |
53 scoped_refptr<SyncedTopControls> top_controls_shown_ratio, | 53 scoped_refptr<SyncedTopControls> top_controls_shown_ratio, |
54 scoped_refptr<SyncedElasticOverscroll> elastic_overscroll) | 54 scoped_refptr<SyncedElasticOverscroll> elastic_overscroll) |
55 : layer_tree_host_impl_(layer_tree_host_impl), | 55 : layer_tree_host_impl_(layer_tree_host_impl), |
56 source_frame_number_(-1), | 56 source_frame_number_(-1), |
57 is_first_frame_after_commit_tracker_(-1), | 57 is_first_frame_after_commit_tracker_(-1), |
58 root_layer_(nullptr), | 58 root_layer_for_testing_(nullptr), |
59 hud_layer_(nullptr), | 59 hud_layer_(nullptr), |
60 background_color_(0), | 60 background_color_(0), |
61 has_transparent_background_(false), | 61 has_transparent_background_(false), |
62 last_scrolled_layer_id_(Layer::INVALID_ID), | 62 last_scrolled_layer_id_(Layer::INVALID_ID), |
63 overscroll_elasticity_layer_id_(Layer::INVALID_ID), | 63 overscroll_elasticity_layer_id_(Layer::INVALID_ID), |
64 page_scale_layer_id_(Layer::INVALID_ID), | 64 page_scale_layer_id_(Layer::INVALID_ID), |
65 inner_viewport_scroll_layer_id_(Layer::INVALID_ID), | 65 inner_viewport_scroll_layer_id_(Layer::INVALID_ID), |
66 outer_viewport_scroll_layer_id_(Layer::INVALID_ID), | 66 outer_viewport_scroll_layer_id_(Layer::INVALID_ID), |
67 page_scale_factor_(page_scale_factor), | 67 page_scale_factor_(page_scale_factor), |
68 min_page_scale_factor_(0), | 68 min_page_scale_factor_(0), |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
254 } | 254 } |
255 | 255 |
256 RenderSurfaceImpl* LayerTreeImpl::RootRenderSurface() const { | 256 RenderSurfaceImpl* LayerTreeImpl::RootRenderSurface() const { |
257 return layer_list_.empty() ? nullptr : layer_list_[0]->render_surface(); | 257 return layer_list_.empty() ? nullptr : layer_list_[0]->render_surface(); |
258 } | 258 } |
259 | 259 |
260 bool LayerTreeImpl::LayerListIsEmpty() const { | 260 bool LayerTreeImpl::LayerListIsEmpty() const { |
261 return layer_list_.empty(); | 261 return layer_list_.empty(); |
262 } | 262 } |
263 | 263 |
264 void LayerTreeImpl::SetRootLayer(std::unique_ptr<LayerImpl> layer) { | 264 void LayerTreeImpl::SetRootLayerForTesting(std::unique_ptr<LayerImpl> layer) { |
265 if (root_layer_ && layer.get() != root_layer_) | 265 if (root_layer_for_testing_ && layer.get() != root_layer_for_testing_) |
266 RemoveLayer(root_layer_->id()); | 266 RemoveLayer(root_layer_for_testing_->id()); |
267 root_layer_ = layer.get(); | 267 root_layer_for_testing_ = layer.get(); |
268 if (layer) | 268 if (layer) |
269 AddLayer(std::move(layer)); | 269 AddLayer(std::move(layer)); |
| 270 BuildLayerListForTesting(); |
270 layer_tree_host_impl_->OnCanDrawStateChangedForTree(); | 271 layer_tree_host_impl_->OnCanDrawStateChangedForTree(); |
271 } | 272 } |
272 | 273 |
273 void LayerTreeImpl::SetRootLayerFromLayerList() { | 274 void LayerTreeImpl::SetRootLayerFromLayerListForTesting() { |
274 root_layer_ = layer_list_.empty() ? nullptr : layer_list_[0]; | 275 root_layer_for_testing_ = layer_list_.empty() ? nullptr : layer_list_[0]; |
| 276 } |
| 277 |
| 278 void LayerTreeImpl::OnCanDrawStateChangedForTree() { |
275 layer_tree_host_impl_->OnCanDrawStateChangedForTree(); | 279 layer_tree_host_impl_->OnCanDrawStateChangedForTree(); |
276 } | 280 } |
277 | 281 |
278 void LayerTreeImpl::AddToLayerList(LayerImpl* layer) { | 282 void LayerTreeImpl::AddToLayerList(LayerImpl* layer) { |
279 layer_list_.push_back(layer); | 283 layer_list_.push_back(layer); |
280 } | 284 } |
281 | 285 |
282 void LayerTreeImpl::ClearLayerList() { | 286 void LayerTreeImpl::ClearLayerList() { |
283 layer_list_.clear(); | 287 layer_list_.clear(); |
284 } | 288 } |
285 | 289 |
286 void LayerTreeImpl::BuildLayerListForTesting() { | 290 void LayerTreeImpl::BuildLayerListForTesting() { |
287 ClearLayerList(); | 291 ClearLayerList(); |
288 LayerListIterator<LayerImpl> it(root_layer_); | 292 LayerListIterator<LayerImpl> it(root_layer_for_testing_); |
289 for (; it != LayerListIterator<LayerImpl>(nullptr); ++it) { | 293 for (; it != LayerListIterator<LayerImpl>(nullptr); ++it) { |
290 AddToLayerList(*it); | 294 AddToLayerList(*it); |
291 } | 295 } |
292 } | 296 } |
293 | 297 |
294 bool LayerTreeImpl::IsRootLayer(const LayerImpl* layer) const { | 298 bool LayerTreeImpl::IsRootLayer(const LayerImpl* layer) const { |
295 return layer_list_.empty() ? false : layer_list_[0] == layer; | 299 return layer_list_.empty() ? false : layer_list_[0] == layer; |
296 } | 300 } |
297 | 301 |
298 LayerImpl* LayerTreeImpl::InnerViewportScrollLayer() const { | 302 LayerImpl* LayerTreeImpl::InnerViewportScrollLayer() const { |
(...skipping 22 matching lines...) Expand all Loading... |
321 if (InnerViewportScrollLayer()) | 325 if (InnerViewportScrollLayer()) |
322 offset += InnerViewportScrollLayer()->MaxScrollOffset(); | 326 offset += InnerViewportScrollLayer()->MaxScrollOffset(); |
323 | 327 |
324 if (OuterViewportScrollLayer()) | 328 if (OuterViewportScrollLayer()) |
325 offset += OuterViewportScrollLayer()->MaxScrollOffset(); | 329 offset += OuterViewportScrollLayer()->MaxScrollOffset(); |
326 | 330 |
327 return offset; | 331 return offset; |
328 } | 332 } |
329 | 333 |
330 std::unique_ptr<OwnedLayerImplList> LayerTreeImpl::DetachLayers() { | 334 std::unique_ptr<OwnedLayerImplList> LayerTreeImpl::DetachLayers() { |
331 root_layer_ = nullptr; | 335 root_layer_for_testing_ = nullptr; |
332 layer_list_.clear(); | 336 layer_list_.clear(); |
333 render_surface_layer_list_.clear(); | 337 render_surface_layer_list_.clear(); |
334 set_needs_update_draw_properties(); | 338 set_needs_update_draw_properties(); |
335 std::unique_ptr<OwnedLayerImplList> ret = std::move(layers_); | 339 std::unique_ptr<OwnedLayerImplList> ret = std::move(layers_); |
336 layers_.reset(new OwnedLayerImplList); | 340 layers_.reset(new OwnedLayerImplList); |
337 return ret; | 341 return ret; |
338 } | 342 } |
339 | 343 |
340 static void UpdateClipTreeForBoundsDeltaOnLayer(LayerImpl* layer, | 344 static void UpdateClipTreeForBoundsDeltaOnLayer(LayerImpl* layer, |
341 ClipTree* clip_tree) { | 345 ClipTree* clip_tree) { |
(...skipping 662 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1004 "layers_updated_count", layers_updated_count); | 1008 "layers_updated_count", layers_updated_count); |
1005 } | 1009 } |
1006 | 1010 |
1007 DCHECK(!needs_update_draw_properties_) | 1011 DCHECK(!needs_update_draw_properties_) |
1008 << "CalcDrawProperties should not set_needs_update_draw_properties()"; | 1012 << "CalcDrawProperties should not set_needs_update_draw_properties()"; |
1009 return true; | 1013 return true; |
1010 } | 1014 } |
1011 | 1015 |
1012 void LayerTreeImpl::BuildLayerListAndPropertyTreesForTesting() { | 1016 void LayerTreeImpl::BuildLayerListAndPropertyTreesForTesting() { |
1013 BuildLayerListForTesting(); | 1017 BuildLayerListForTesting(); |
1014 PropertyTreeBuilder::PreCalculateMetaInformationForTesting(root_layer_); | 1018 PropertyTreeBuilder::PreCalculateMetaInformationForTesting( |
| 1019 root_layer_for_testing_); |
1015 property_trees_.transform_tree.set_source_to_parent_updates_allowed(true); | 1020 property_trees_.transform_tree.set_source_to_parent_updates_allowed(true); |
1016 PropertyTreeBuilder::BuildPropertyTrees( | 1021 PropertyTreeBuilder::BuildPropertyTrees( |
1017 root_layer_, PageScaleLayer(), InnerViewportScrollLayer(), | 1022 root_layer_for_testing_, PageScaleLayer(), InnerViewportScrollLayer(), |
1018 OuterViewportScrollLayer(), OverscrollElasticityLayer(), | 1023 OuterViewportScrollLayer(), OverscrollElasticityLayer(), |
1019 elastic_overscroll()->Current(IsActiveTree()), | 1024 elastic_overscroll()->Current(IsActiveTree()), |
1020 current_page_scale_factor(), device_scale_factor(), | 1025 current_page_scale_factor(), device_scale_factor(), |
1021 gfx::Rect(DrawViewportSize()), layer_tree_host_impl_->DrawTransform(), | 1026 gfx::Rect(DrawViewportSize()), layer_tree_host_impl_->DrawTransform(), |
1022 &property_trees_); | 1027 &property_trees_); |
1023 property_trees_.transform_tree.set_source_to_parent_updates_allowed(false); | 1028 property_trees_.transform_tree.set_source_to_parent_updates_allowed(false); |
1024 } | 1029 } |
1025 | 1030 |
1026 const LayerImplList& LayerTreeImpl::RenderSurfaceLayerList() const { | 1031 const LayerImplList& LayerTreeImpl::RenderSurfaceLayerList() const { |
1027 // If this assert triggers, then the list is dirty. | 1032 // If this assert triggers, then the list is dirty. |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1091 } | 1096 } |
1092 | 1097 |
1093 // These manage ownership of the LayerImpl. | 1098 // These manage ownership of the LayerImpl. |
1094 void LayerTreeImpl::AddLayer(std::unique_ptr<LayerImpl> layer) { | 1099 void LayerTreeImpl::AddLayer(std::unique_ptr<LayerImpl> layer) { |
1095 DCHECK(std::find(layers_->begin(), layers_->end(), layer) == layers_->end()); | 1100 DCHECK(std::find(layers_->begin(), layers_->end(), layer) == layers_->end()); |
1096 layers_->push_back(std::move(layer)); | 1101 layers_->push_back(std::move(layer)); |
1097 set_needs_update_draw_properties(); | 1102 set_needs_update_draw_properties(); |
1098 } | 1103 } |
1099 | 1104 |
1100 std::unique_ptr<LayerImpl> LayerTreeImpl::RemoveLayer(int id) { | 1105 std::unique_ptr<LayerImpl> LayerTreeImpl::RemoveLayer(int id) { |
1101 if (root_layer_ && root_layer_->id() == id) | |
1102 root_layer_ = nullptr; | |
1103 for (auto it = layers_->begin(); it != layers_->end(); ++it) { | 1106 for (auto it = layers_->begin(); it != layers_->end(); ++it) { |
1104 if ((*it) && (*it)->id() != id) | 1107 if ((*it) && (*it)->id() != id) |
1105 continue; | 1108 continue; |
1106 std::unique_ptr<LayerImpl> ret = std::move(*it); | 1109 std::unique_ptr<LayerImpl> ret = std::move(*it); |
1107 set_needs_update_draw_properties(); | 1110 set_needs_update_draw_properties(); |
1108 layers_->erase(it); | 1111 layers_->erase(it); |
1109 return ret; | 1112 return ret; |
1110 } | 1113 } |
1111 return nullptr; | 1114 return nullptr; |
1112 } | 1115 } |
(...skipping 974 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2087 | 2090 |
2088 void LayerTreeImpl::ResetAllChangeTracking() { | 2091 void LayerTreeImpl::ResetAllChangeTracking() { |
2089 layers_that_should_push_properties_.clear(); | 2092 layers_that_should_push_properties_.clear(); |
2090 // Iterate over all layers, including masks and replicas. | 2093 // Iterate over all layers, including masks and replicas. |
2091 for (auto& layer : *layers_) | 2094 for (auto& layer : *layers_) |
2092 layer->ResetChangeTracking(); | 2095 layer->ResetChangeTracking(); |
2093 property_trees_.ResetAllChangeTracking(); | 2096 property_trees_.ResetAllChangeTracking(); |
2094 } | 2097 } |
2095 | 2098 |
2096 } // namespace cc | 2099 } // namespace cc |
OLD | NEW |