Chromium Code Reviews| 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 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 373 property_trees_.is_active = IsActiveTree(); | 373 property_trees_.is_active = IsActiveTree(); |
| 374 property_trees_.transform_tree.set_source_to_parent_updates_allowed(false); | 374 property_trees_.transform_tree.set_source_to_parent_updates_allowed(false); |
| 375 } | 375 } |
| 376 | 376 |
| 377 void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) { | 377 void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) { |
| 378 // The request queue should have been processed and does not require a push. | 378 // The request queue should have been processed and does not require a push. |
| 379 DCHECK_EQ(ui_resource_request_queue_.size(), 0u); | 379 DCHECK_EQ(ui_resource_request_queue_.size(), 0u); |
| 380 | 380 |
| 381 // To maintain the current scrolling node we need to use element ids which | 381 // To maintain the current scrolling node we need to use element ids which |
| 382 // are stable across the property tree update in SetPropertyTrees. | 382 // are stable across the property tree update in SetPropertyTrees. |
| 383 ElementId scrolling_element_id; | 383 ElementId scrolling_element_id = 0; |
|
wkorman
2017/05/05 20:06:10
kInvalidElementId here?
chrishtr
2017/05/05 20:46:09
Done.
| |
| 384 if (ScrollNode* scrolling_node = target_tree->CurrentlyScrollingNode()) | 384 if (ScrollNode* scrolling_node = target_tree->CurrentlyScrollingNode()) |
| 385 scrolling_element_id = scrolling_node->element_id; | 385 scrolling_element_id = scrolling_node->element_id; |
| 386 | 386 |
| 387 target_tree->SetPropertyTrees(&property_trees_); | 387 target_tree->SetPropertyTrees(&property_trees_); |
| 388 | 388 |
| 389 ScrollNode* scrolling_node = nullptr; | 389 ScrollNode* scrolling_node = nullptr; |
| 390 if (scrolling_element_id) { | 390 if (scrolling_element_id) { |
| 391 auto& scroll_tree = target_tree->property_trees()->scroll_tree; | 391 auto& scroll_tree = target_tree->property_trees()->scroll_tree; |
| 392 scrolling_node = scroll_tree.FindNodeFromElementId(scrolling_element_id); | 392 scrolling_node = scroll_tree.FindNodeFromElementId(scrolling_element_id); |
| 393 } | 393 } |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 529 LayerImpl* LayerTreeImpl::LayerByElementId(ElementId element_id) const { | 529 LayerImpl* LayerTreeImpl::LayerByElementId(ElementId element_id) const { |
| 530 return LayerById(LayerIdByElementId(element_id)); | 530 return LayerById(LayerIdByElementId(element_id)); |
| 531 } | 531 } |
| 532 | 532 |
| 533 void LayerTreeImpl::AddToElementMap(LayerImpl* layer) { | 533 void LayerTreeImpl::AddToElementMap(LayerImpl* layer) { |
| 534 ElementId element_id = layer->element_id(); | 534 ElementId element_id = layer->element_id(); |
| 535 if (!element_id) | 535 if (!element_id) |
| 536 return; | 536 return; |
| 537 | 537 |
| 538 TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("compositor-worker"), | 538 TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("compositor-worker"), |
| 539 "LayerTreeImpl::AddToElementMap", "element", | 539 "LayerTreeImpl::AddToElementMap", "element", element_id, |
| 540 element_id.AsValue().release(), "layer_id", layer->id()); | 540 "layer_id", layer->id()); |
| 541 | 541 |
| 542 #if DCHECK_IS_ON() | 542 #if DCHECK_IS_ON() |
| 543 LayerImpl* existing_layer = LayerByElementId(element_id); | 543 LayerImpl* existing_layer = LayerByElementId(element_id); |
| 544 bool element_id_collision_detected = | 544 bool element_id_collision_detected = |
| 545 existing_layer && existing_layer != layer; | 545 existing_layer && existing_layer != layer; |
| 546 | 546 |
| 547 // TODO(pdr): Remove this suppression and always check for id collisions. | 547 // TODO(pdr): Remove this suppression and always check for id collisions. |
| 548 // This is a temporary suppression for SPV2 which generates unnecessary | 548 // This is a temporary suppression for SPV2 which generates unnecessary |
| 549 // layers that collide. Remove once crbug.com/693693 is fixed. | 549 // layers that collide. Remove once crbug.com/693693 is fixed. |
| 550 if (!settings().use_layer_lists) | 550 if (!settings().use_layer_lists) |
| 551 DCHECK(!element_id_collision_detected); | 551 DCHECK(!element_id_collision_detected); |
| 552 #endif | 552 #endif |
| 553 | 553 |
| 554 element_layers_map_[element_id] = layer->id(); | 554 element_layers_map_[element_id] = layer->id(); |
| 555 | 555 |
| 556 layer_tree_host_impl_->mutator_host()->RegisterElement( | 556 layer_tree_host_impl_->mutator_host()->RegisterElement( |
| 557 element_id, | 557 element_id, |
| 558 IsActiveTree() ? ElementListType::ACTIVE : ElementListType::PENDING); | 558 IsActiveTree() ? ElementListType::ACTIVE : ElementListType::PENDING); |
| 559 } | 559 } |
| 560 | 560 |
| 561 void LayerTreeImpl::RemoveFromElementMap(LayerImpl* layer) { | 561 void LayerTreeImpl::RemoveFromElementMap(LayerImpl* layer) { |
| 562 if (!layer->element_id()) | 562 if (!layer->element_id()) |
| 563 return; | 563 return; |
| 564 | 564 |
| 565 TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("compositor-worker"), | 565 TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("compositor-worker"), |
| 566 "LayerTreeImpl::RemoveFromElementMap", "element", | 566 "LayerTreeImpl::RemoveFromElementMap", "element", |
| 567 layer->element_id().AsValue().release(), "layer_id", | 567 layer->element_id(), "layer_id", layer->id()); |
| 568 layer->id()); | |
| 569 | 568 |
| 570 layer_tree_host_impl_->mutator_host()->UnregisterElement( | 569 layer_tree_host_impl_->mutator_host()->UnregisterElement( |
| 571 layer->element_id(), | 570 layer->element_id(), |
| 572 IsActiveTree() ? ElementListType::ACTIVE : ElementListType::PENDING); | 571 IsActiveTree() ? ElementListType::ACTIVE : ElementListType::PENDING); |
| 573 | 572 |
| 574 element_layers_map_.erase(layer->element_id()); | 573 element_layers_map_.erase(layer->element_id()); |
| 575 } | 574 } |
| 576 | 575 |
| 577 void LayerTreeImpl::AddToOpacityAnimationsMap(int id, float opacity) { | 576 void LayerTreeImpl::AddToOpacityAnimationsMap(int id, float opacity) { |
| 578 if (LayerImpl* layer = LayerById(id)) | 577 if (LayerImpl* layer = LayerById(id)) |
| (...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 978 | 977 |
| 979 void LayerTreeImpl::ClearViewportLayers() { | 978 void LayerTreeImpl::ClearViewportLayers() { |
| 980 overscroll_elasticity_layer_id_ = Layer::INVALID_ID; | 979 overscroll_elasticity_layer_id_ = Layer::INVALID_ID; |
| 981 page_scale_layer_id_ = Layer::INVALID_ID; | 980 page_scale_layer_id_ = Layer::INVALID_ID; |
| 982 inner_viewport_scroll_layer_id_ = Layer::INVALID_ID; | 981 inner_viewport_scroll_layer_id_ = Layer::INVALID_ID; |
| 983 outer_viewport_scroll_layer_id_ = Layer::INVALID_ID; | 982 outer_viewport_scroll_layer_id_ = Layer::INVALID_ID; |
| 984 } | 983 } |
| 985 | 984 |
| 986 // For unit tests, we use the layer's id as its element id. | 985 // For unit tests, we use the layer's id as its element id. |
| 987 static void SetElementIdForTesting(LayerImpl* layer) { | 986 static void SetElementIdForTesting(LayerImpl* layer) { |
| 988 layer->SetElementId(LayerIdToElementIdForTesting(layer->id())); | 987 layer->SetElementId(layer->id()); |
| 989 } | 988 } |
| 990 | 989 |
| 991 void LayerTreeImpl::SetElementIdsForTesting() { | 990 void LayerTreeImpl::SetElementIdsForTesting() { |
| 992 LayerListIterator<LayerImpl> it(root_layer_for_testing_); | 991 LayerListIterator<LayerImpl> it(root_layer_for_testing_); |
| 993 for (; it != LayerListIterator<LayerImpl>(nullptr); ++it) { | 992 for (; it != LayerListIterator<LayerImpl>(nullptr); ++it) { |
| 994 if (!it->element_id()) | 993 if (!it->element_id()) |
| 995 SetElementIdForTesting(*it); | 994 SetElementIdForTesting(*it); |
| 996 } | 995 } |
| 997 } | 996 } |
| 998 | 997 |
| (...skipping 1093 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2092 | 2091 |
| 2093 void LayerTreeImpl::ResetAllChangeTracking() { | 2092 void LayerTreeImpl::ResetAllChangeTracking() { |
| 2094 layers_that_should_push_properties_.clear(); | 2093 layers_that_should_push_properties_.clear(); |
| 2095 // Iterate over all layers, including masks. | 2094 // Iterate over all layers, including masks. |
| 2096 for (auto& layer : *layers_) | 2095 for (auto& layer : *layers_) |
| 2097 layer->ResetChangeTracking(); | 2096 layer->ResetChangeTracking(); |
| 2098 property_trees_.ResetAllChangeTracking(); | 2097 property_trees_.ResetAllChangeTracking(); |
| 2099 } | 2098 } |
| 2100 | 2099 |
| 2101 } // namespace cc | 2100 } // namespace cc |
| OLD | NEW |