| 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() {
|
|
|