Index: cc/trees/property_tree.cc |
diff --git a/cc/trees/property_tree.cc b/cc/trees/property_tree.cc |
index f4f78d9f4a2b9c586a92a13028e53793b18420c0..b2ee4daa8170d1eab1bff1599f8802b688bec07e 100644 |
--- a/cc/trees/property_tree.cc |
+++ b/cc/trees/property_tree.cc |
@@ -71,6 +71,7 @@ void PropertyTree<T>::clear() { |
nodes_.push_back(T()); |
back()->id = kRootNodeId; |
back()->parent_id = kInvalidNodeId; |
+ owning_layer_id_to_node_index.clear(); |
#if DCHECK_IS_ON() |
PropertyTree<T> tree; |
@@ -80,7 +81,8 @@ void PropertyTree<T>::clear() { |
template <typename T> |
bool PropertyTree<T>::operator==(const PropertyTree<T>& other) const { |
- return nodes_ == other.nodes() && needs_update_ == other.needs_update(); |
+ return nodes_ == other.nodes() && needs_update_ == other.needs_update() && |
+ owning_layer_id_to_node_index == other.owning_layer_id_to_node_index; |
} |
template <typename T> |
@@ -1597,11 +1599,6 @@ bool PropertyTrees::operator==(const PropertyTrees& other) const { |
return transform_tree == other.transform_tree && |
effect_tree == other.effect_tree && clip_tree == other.clip_tree && |
scroll_tree == other.scroll_tree && |
- layer_id_to_transform_node_index == |
- other.layer_id_to_transform_node_index && |
- layer_id_to_effect_node_index == other.layer_id_to_effect_node_index && |
- layer_id_to_clip_node_index == other.layer_id_to_clip_node_index && |
- layer_id_to_scroll_node_index == other.layer_id_to_scroll_node_index && |
element_id_to_effect_node_index == |
other.element_id_to_effect_node_index && |
element_id_to_scroll_node_index == |
@@ -1623,12 +1620,8 @@ PropertyTrees& PropertyTrees::operator=(const PropertyTrees& from) { |
effect_tree = from.effect_tree; |
clip_tree = from.clip_tree; |
scroll_tree = from.scroll_tree; |
- layer_id_to_transform_node_index = from.layer_id_to_transform_node_index; |
- layer_id_to_effect_node_index = from.layer_id_to_effect_node_index; |
always_use_active_tree_opacity_effect_ids = |
from.always_use_active_tree_opacity_effect_ids; |
- layer_id_to_clip_node_index = from.layer_id_to_clip_node_index; |
- layer_id_to_scroll_node_index = from.layer_id_to_scroll_node_index; |
element_id_to_effect_node_index = from.element_id_to_effect_node_index; |
element_id_to_scroll_node_index = from.element_id_to_scroll_node_index; |
element_id_to_transform_node_index = from.element_id_to_transform_node_index; |
@@ -1658,10 +1651,6 @@ void PropertyTrees::clear() { |
clip_tree.clear(); |
effect_tree.clear(); |
scroll_tree.clear(); |
- layer_id_to_transform_node_index.clear(); |
- layer_id_to_effect_node_index.clear(); |
- layer_id_to_clip_node_index.clear(); |
- layer_id_to_scroll_node_index.clear(); |
element_id_to_effect_node_index.clear(); |
element_id_to_scroll_node_index.clear(); |
element_id_to_transform_node_index.clear(); |
@@ -1713,46 +1702,25 @@ void PropertyTrees::SetInnerViewportScrollBoundsDelta( |
void PropertyTrees::PushOpacityIfNeeded(PropertyTrees* target_tree) { |
for (int id : target_tree->always_use_active_tree_opacity_effect_ids) { |
- if (layer_id_to_effect_node_index.find(id) == |
- layer_id_to_effect_node_index.end()) |
- continue; |
- EffectNode* source_effect_node = |
- effect_tree.Node(layer_id_to_effect_node_index[id]); |
- EffectNode* target_effect_node = target_tree->effect_tree.Node( |
- target_tree->layer_id_to_effect_node_index[id]); |
- float source_opacity = source_effect_node->opacity; |
- float target_opacity = target_effect_node->opacity; |
- if (source_opacity == target_opacity) |
- continue; |
- target_effect_node->opacity = source_opacity; |
- target_tree->effect_tree.set_needs_update(true); |
+ if (EffectNode* source_effect_node = |
+ effect_tree.FindNodeFromOwningLayerId(id)) { |
+ EffectNode* target_effect_node = |
+ target_tree->effect_tree.FindNodeFromOwningLayerId(id); |
+ float source_opacity = source_effect_node->opacity; |
+ float target_opacity = target_effect_node->opacity; |
+ if (source_opacity == target_opacity) |
+ continue; |
+ target_effect_node->opacity = source_opacity; |
+ target_tree->effect_tree.set_needs_update(true); |
+ } |
} |
} |
void PropertyTrees::RemoveIdFromIdToIndexMaps(int id) { |
- layer_id_to_transform_node_index.erase(id); |
- layer_id_to_effect_node_index.erase(id); |
- layer_id_to_clip_node_index.erase(id); |
- layer_id_to_scroll_node_index.erase(id); |
-} |
- |
-bool PropertyTrees::IsInIdToIndexMap(TreeType tree_type, int id) { |
- std::unordered_map<int, int>* id_to_index_map = nullptr; |
- switch (tree_type) { |
- case TRANSFORM: |
- id_to_index_map = &layer_id_to_transform_node_index; |
- break; |
- case EFFECT: |
- id_to_index_map = &layer_id_to_effect_node_index; |
- break; |
- case CLIP: |
- id_to_index_map = &layer_id_to_clip_node_index; |
- break; |
- case SCROLL: |
- id_to_index_map = &layer_id_to_scroll_node_index; |
- break; |
- } |
- return id_to_index_map->find(id) != id_to_index_map->end(); |
+ transform_tree.SetOwningLayerIdForNode(nullptr, id); |
+ clip_tree.SetOwningLayerIdForNode(nullptr, id); |
+ scroll_tree.SetOwningLayerIdForNode(nullptr, id); |
+ effect_tree.SetOwningLayerIdForNode(nullptr, id); |
} |
void PropertyTrees::UpdateChangeTracking() { |