Chromium Code Reviews| Index: cc/trees/property_tree.h |
| diff --git a/cc/trees/property_tree.h b/cc/trees/property_tree.h |
| index f7e90ea7b47277c8df23da1df91cfd84ecc80de1..9871acd2e0a4d3038acff17ec6e87a3deeee1c8c 100644 |
| --- a/cc/trees/property_tree.h |
| +++ b/cc/trees/property_tree.h |
| @@ -53,7 +53,7 @@ class CC_EXPORT PropertyTree { |
| // they are exported by CC_EXPORT. They will be instantiated in every |
| // compilation units that included this header, and compilation can fail |
| // because T may be incomplete. |
| - ~PropertyTree(); |
| + virtual ~PropertyTree(); |
| PropertyTree<T>& operator=(const PropertyTree<T>&); |
| // Property tree node starts from index 0. |
| @@ -97,9 +97,33 @@ class CC_EXPORT PropertyTree { |
| void AsValueInto(base::trace_event::TracedValue* value) const; |
| + T* FindNodeFromOwningId(int id) { |
| + return Node(FindNodeIndexFromOwningId(id)); |
| + } |
| + int FindNodeIndexFromOwningId(int id) const { |
|
pdr.
2017/03/16 20:30:28
I think we should move away from using the "owning
|
| + auto iter = layer_id_to_node_index.find(id); |
| + if (iter == layer_id_to_node_index.end()) |
| + return kInvalidNodeId; |
| + else |
| + return iter->second; |
| + } |
| + |
| + void InsertOwningIdForNode(const T* node, int id) { |
|
pdr.
2017/03/16 20:30:28
WDYT of using Set* instead of Insert*?
|
| + if (!node) { |
| + layer_id_to_node_index[id] = kInvalidNodeId; |
| + return; |
| + } |
| + |
| + DCHECK(node == Node(node->id)); |
| + layer_id_to_node_index[id] = node->id; |
| + } |
| + |
| private: |
| std::vector<T> nodes_; |
| + // These maps map from layer id to the property tree node index. |
| + std::unordered_map<int, int> layer_id_to_node_index; |
| + |
| bool needs_update_; |
| PropertyTrees* property_trees_; |
| }; |
| @@ -125,7 +149,7 @@ class CC_EXPORT TransformTree final : public PropertyTree<TransformNode> { |
| // compilation units that included this header, and compilation can fail |
| // because TransformCachedNodeData may be incomplete. |
| TransformTree(const TransformTree&) = delete; |
| - ~TransformTree(); |
| + ~TransformTree() final; |
| TransformTree& operator=(const TransformTree&); |
| bool operator==(const TransformTree& other) const; |
| @@ -290,7 +314,7 @@ class CC_EXPORT ClipTree final : public PropertyTree<ClipNode> { |
| class CC_EXPORT EffectTree final : public PropertyTree<EffectNode> { |
| public: |
| EffectTree(); |
| - ~EffectTree(); |
| + ~EffectTree() final; |
| EffectTree& operator=(const EffectTree& from); |
| bool operator==(const EffectTree& other) const; |
| @@ -370,7 +394,7 @@ class CC_EXPORT EffectTree final : public PropertyTree<EffectNode> { |
| class CC_EXPORT ScrollTree final : public PropertyTree<ScrollNode> { |
| public: |
| ScrollTree(); |
| - ~ScrollTree(); |
| + ~ScrollTree() final; |
| ScrollTree& operator=(const ScrollTree& from); |
| bool operator==(const ScrollTree& other) const; |
| @@ -565,14 +589,6 @@ class CC_EXPORT PropertyTrees final { |
| bool operator==(const PropertyTrees& other) const; |
| PropertyTrees& operator=(const PropertyTrees& from); |
| - // These maps map from layer id to the index for each of the respective |
| - // property node types. |
| - std::unordered_map<int, int> layer_id_to_transform_node_index; |
| - std::unordered_map<int, int> layer_id_to_effect_node_index; |
| - std::unordered_map<int, int> layer_id_to_clip_node_index; |
| - std::unordered_map<int, int> layer_id_to_scroll_node_index; |
| - enum TreeType { TRANSFORM, EFFECT, CLIP, SCROLL }; |
| - |
| // These maps allow mapping directly from a compositor element id to the |
| // respective property node. This will eventually allow simplifying logic in |
| // various places that today has to map from element id to layer id, and then |
| @@ -615,7 +631,6 @@ class CC_EXPORT PropertyTrees final { |
| void SetInnerViewportScrollBoundsDelta(gfx::Vector2dF bounds_delta); |
| void PushOpacityIfNeeded(PropertyTrees* target_tree); |
| void RemoveIdFromIdToIndexMaps(int id); |
| - bool IsInIdToIndexMap(TreeType tree_type, int id); |
| void UpdateChangeTracking(); |
| void PushChangeTrackingTo(PropertyTrees* tree); |
| void ResetAllChangeTracking(); |