OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <stddef.h> | 5 #include <stddef.h> |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
64 return node.id; | 64 return node.id; |
65 } | 65 } |
66 | 66 |
67 template <typename T> | 67 template <typename T> |
68 void PropertyTree<T>::clear() { | 68 void PropertyTree<T>::clear() { |
69 needs_update_ = false; | 69 needs_update_ = false; |
70 nodes_.clear(); | 70 nodes_.clear(); |
71 nodes_.push_back(T()); | 71 nodes_.push_back(T()); |
72 back()->id = kRootNodeId; | 72 back()->id = kRootNodeId; |
73 back()->parent_id = kInvalidNodeId; | 73 back()->parent_id = kInvalidNodeId; |
74 layer_id_to_node_index.clear(); | |
74 | 75 |
75 #if DCHECK_IS_ON() | 76 #if DCHECK_IS_ON() |
76 PropertyTree<T> tree; | 77 PropertyTree<T> tree; |
77 DCHECK(tree == *this); | 78 DCHECK(tree == *this); |
78 #endif | 79 #endif |
79 } | 80 } |
80 | 81 |
81 template <typename T> | 82 template <typename T> |
82 bool PropertyTree<T>::operator==(const PropertyTree<T>& other) const { | 83 bool PropertyTree<T>::operator==(const PropertyTree<T>& other) const { |
83 return nodes_ == other.nodes() && needs_update_ == other.needs_update(); | 84 return nodes_ == other.nodes() && needs_update_ == other.needs_update() && |
85 layer_id_to_node_index == other.layer_id_to_node_index; | |
84 } | 86 } |
85 | 87 |
86 template <typename T> | 88 template <typename T> |
87 void PropertyTree<T>::AsValueInto(base::trace_event::TracedValue* value) const { | 89 void PropertyTree<T>::AsValueInto(base::trace_event::TracedValue* value) const { |
88 value->BeginArray("nodes"); | 90 value->BeginArray("nodes"); |
89 for (const auto& node : nodes_) { | 91 for (const auto& node : nodes_) { |
90 value->BeginDictionary(); | 92 value->BeginDictionary(); |
91 node.AsValueInto(value); | 93 node.AsValueInto(value); |
92 value->EndDictionary(); | 94 value->EndDictionary(); |
93 } | 95 } |
(...skipping 1496 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1590 clip_tree.SetPropertyTrees(this); | 1592 clip_tree.SetPropertyTrees(this); |
1591 scroll_tree.SetPropertyTrees(this); | 1593 scroll_tree.SetPropertyTrees(this); |
1592 } | 1594 } |
1593 | 1595 |
1594 PropertyTrees::~PropertyTrees() {} | 1596 PropertyTrees::~PropertyTrees() {} |
1595 | 1597 |
1596 bool PropertyTrees::operator==(const PropertyTrees& other) const { | 1598 bool PropertyTrees::operator==(const PropertyTrees& other) const { |
1597 return transform_tree == other.transform_tree && | 1599 return transform_tree == other.transform_tree && |
1598 effect_tree == other.effect_tree && clip_tree == other.clip_tree && | 1600 effect_tree == other.effect_tree && clip_tree == other.clip_tree && |
1599 scroll_tree == other.scroll_tree && | 1601 scroll_tree == other.scroll_tree && |
1600 layer_id_to_transform_node_index == | |
1601 other.layer_id_to_transform_node_index && | |
1602 layer_id_to_effect_node_index == other.layer_id_to_effect_node_index && | |
1603 layer_id_to_clip_node_index == other.layer_id_to_clip_node_index && | |
1604 layer_id_to_scroll_node_index == other.layer_id_to_scroll_node_index && | |
1605 element_id_to_effect_node_index == | 1602 element_id_to_effect_node_index == |
1606 other.element_id_to_effect_node_index && | 1603 other.element_id_to_effect_node_index && |
1607 element_id_to_scroll_node_index == | 1604 element_id_to_scroll_node_index == |
1608 other.element_id_to_scroll_node_index && | 1605 other.element_id_to_scroll_node_index && |
1609 element_id_to_transform_node_index == | 1606 element_id_to_transform_node_index == |
1610 other.element_id_to_transform_node_index && | 1607 other.element_id_to_transform_node_index && |
1611 always_use_active_tree_opacity_effect_ids == | 1608 always_use_active_tree_opacity_effect_ids == |
1612 other.always_use_active_tree_opacity_effect_ids && | 1609 other.always_use_active_tree_opacity_effect_ids && |
1613 needs_rebuild == other.needs_rebuild && changed == other.changed && | 1610 needs_rebuild == other.needs_rebuild && changed == other.changed && |
1614 full_tree_damaged == other.full_tree_damaged && | 1611 full_tree_damaged == other.full_tree_damaged && |
1615 is_main_thread == other.is_main_thread && | 1612 is_main_thread == other.is_main_thread && |
1616 is_active == other.is_active && | 1613 is_active == other.is_active && |
1617 non_root_surfaces_enabled == other.non_root_surfaces_enabled && | 1614 non_root_surfaces_enabled == other.non_root_surfaces_enabled && |
1618 sequence_number == other.sequence_number; | 1615 sequence_number == other.sequence_number; |
1619 } | 1616 } |
1620 | 1617 |
1621 PropertyTrees& PropertyTrees::operator=(const PropertyTrees& from) { | 1618 PropertyTrees& PropertyTrees::operator=(const PropertyTrees& from) { |
1622 transform_tree = from.transform_tree; | 1619 transform_tree = from.transform_tree; |
1623 effect_tree = from.effect_tree; | 1620 effect_tree = from.effect_tree; |
1624 clip_tree = from.clip_tree; | 1621 clip_tree = from.clip_tree; |
1625 scroll_tree = from.scroll_tree; | 1622 scroll_tree = from.scroll_tree; |
1626 layer_id_to_transform_node_index = from.layer_id_to_transform_node_index; | |
1627 layer_id_to_effect_node_index = from.layer_id_to_effect_node_index; | |
1628 always_use_active_tree_opacity_effect_ids = | 1623 always_use_active_tree_opacity_effect_ids = |
1629 from.always_use_active_tree_opacity_effect_ids; | 1624 from.always_use_active_tree_opacity_effect_ids; |
1630 layer_id_to_clip_node_index = from.layer_id_to_clip_node_index; | |
1631 layer_id_to_scroll_node_index = from.layer_id_to_scroll_node_index; | |
1632 element_id_to_effect_node_index = from.element_id_to_effect_node_index; | 1625 element_id_to_effect_node_index = from.element_id_to_effect_node_index; |
1633 element_id_to_scroll_node_index = from.element_id_to_scroll_node_index; | 1626 element_id_to_scroll_node_index = from.element_id_to_scroll_node_index; |
1634 element_id_to_transform_node_index = from.element_id_to_transform_node_index; | 1627 element_id_to_transform_node_index = from.element_id_to_transform_node_index; |
1635 needs_rebuild = from.needs_rebuild; | 1628 needs_rebuild = from.needs_rebuild; |
1636 changed = from.changed; | 1629 changed = from.changed; |
1637 full_tree_damaged = from.full_tree_damaged; | 1630 full_tree_damaged = from.full_tree_damaged; |
1638 non_root_surfaces_enabled = from.non_root_surfaces_enabled; | 1631 non_root_surfaces_enabled = from.non_root_surfaces_enabled; |
1639 sequence_number = from.sequence_number; | 1632 sequence_number = from.sequence_number; |
1640 is_main_thread = from.is_main_thread; | 1633 is_main_thread = from.is_main_thread; |
1641 is_active = from.is_active; | 1634 is_active = from.is_active; |
1642 inner_viewport_container_bounds_delta_ = | 1635 inner_viewport_container_bounds_delta_ = |
1643 from.inner_viewport_container_bounds_delta(); | 1636 from.inner_viewport_container_bounds_delta(); |
1644 outer_viewport_container_bounds_delta_ = | 1637 outer_viewport_container_bounds_delta_ = |
1645 from.outer_viewport_container_bounds_delta(); | 1638 from.outer_viewport_container_bounds_delta(); |
1646 inner_viewport_scroll_bounds_delta_ = | 1639 inner_viewport_scroll_bounds_delta_ = |
1647 from.inner_viewport_scroll_bounds_delta(); | 1640 from.inner_viewport_scroll_bounds_delta(); |
1648 transform_tree.SetPropertyTrees(this); | 1641 transform_tree.SetPropertyTrees(this); |
1649 effect_tree.SetPropertyTrees(this); | 1642 effect_tree.SetPropertyTrees(this); |
1650 clip_tree.SetPropertyTrees(this); | 1643 clip_tree.SetPropertyTrees(this); |
1651 scroll_tree.SetPropertyTrees(this); | 1644 scroll_tree.SetPropertyTrees(this); |
1652 ResetCachedData(); | 1645 ResetCachedData(); |
1653 return *this; | 1646 return *this; |
1654 } | 1647 } |
1655 | 1648 |
1656 void PropertyTrees::clear() { | 1649 void PropertyTrees::clear() { |
1657 transform_tree.clear(); | 1650 transform_tree.clear(); |
1658 clip_tree.clear(); | 1651 clip_tree.clear(); |
1659 effect_tree.clear(); | 1652 effect_tree.clear(); |
1660 scroll_tree.clear(); | 1653 scroll_tree.clear(); |
1661 layer_id_to_transform_node_index.clear(); | |
1662 layer_id_to_effect_node_index.clear(); | |
1663 layer_id_to_clip_node_index.clear(); | |
1664 layer_id_to_scroll_node_index.clear(); | |
1665 element_id_to_effect_node_index.clear(); | 1654 element_id_to_effect_node_index.clear(); |
1666 element_id_to_scroll_node_index.clear(); | 1655 element_id_to_scroll_node_index.clear(); |
1667 element_id_to_transform_node_index.clear(); | 1656 element_id_to_transform_node_index.clear(); |
1668 always_use_active_tree_opacity_effect_ids.clear(); | 1657 always_use_active_tree_opacity_effect_ids.clear(); |
1669 | 1658 |
1670 needs_rebuild = true; | 1659 needs_rebuild = true; |
1671 full_tree_damaged = false; | 1660 full_tree_damaged = false; |
1672 changed = false; | 1661 changed = false; |
1673 non_root_surfaces_enabled = true; | 1662 non_root_surfaces_enabled = true; |
1674 sequence_number++; | 1663 sequence_number++; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1706 transform_tree.UpdateOuterViewportContainerBoundsDelta(); | 1695 transform_tree.UpdateOuterViewportContainerBoundsDelta(); |
1707 } | 1696 } |
1708 | 1697 |
1709 void PropertyTrees::SetInnerViewportScrollBoundsDelta( | 1698 void PropertyTrees::SetInnerViewportScrollBoundsDelta( |
1710 gfx::Vector2dF bounds_delta) { | 1699 gfx::Vector2dF bounds_delta) { |
1711 inner_viewport_scroll_bounds_delta_ = bounds_delta; | 1700 inner_viewport_scroll_bounds_delta_ = bounds_delta; |
1712 } | 1701 } |
1713 | 1702 |
1714 void PropertyTrees::PushOpacityIfNeeded(PropertyTrees* target_tree) { | 1703 void PropertyTrees::PushOpacityIfNeeded(PropertyTrees* target_tree) { |
1715 for (int id : target_tree->always_use_active_tree_opacity_effect_ids) { | 1704 for (int id : target_tree->always_use_active_tree_opacity_effect_ids) { |
1716 if (layer_id_to_effect_node_index.find(id) == | 1705 if (!effect_tree.FindNodeFromId(id)) |
ajuma
2017/03/16 17:15:32
If we save the result of this call we can avoid th
| |
1717 layer_id_to_effect_node_index.end()) | |
1718 continue; | 1706 continue; |
1719 EffectNode* source_effect_node = | 1707 EffectNode* source_effect_node = effect_tree.FindNodeFromId(id); |
1720 effect_tree.Node(layer_id_to_effect_node_index[id]); | 1708 EffectNode* target_effect_node = |
1721 EffectNode* target_effect_node = target_tree->effect_tree.Node( | 1709 target_tree->effect_tree.FindNodeFromId(id); |
1722 target_tree->layer_id_to_effect_node_index[id]); | |
1723 float source_opacity = source_effect_node->opacity; | 1710 float source_opacity = source_effect_node->opacity; |
1724 float target_opacity = target_effect_node->opacity; | 1711 float target_opacity = target_effect_node->opacity; |
1725 if (source_opacity == target_opacity) | 1712 if (source_opacity == target_opacity) |
1726 continue; | 1713 continue; |
1727 target_effect_node->opacity = source_opacity; | 1714 target_effect_node->opacity = source_opacity; |
1728 target_tree->effect_tree.set_needs_update(true); | 1715 target_tree->effect_tree.set_needs_update(true); |
1729 } | 1716 } |
1730 } | 1717 } |
1731 | 1718 |
1732 void PropertyTrees::RemoveIdFromIdToIndexMaps(int id) { | 1719 void PropertyTrees::RemoveIdFromIdToIndexMaps(int id) { |
1733 layer_id_to_transform_node_index.erase(id); | 1720 transform_tree.InsertOwningIdForNode(nullptr, id); |
1734 layer_id_to_effect_node_index.erase(id); | 1721 clip_tree.InsertOwningIdForNode(nullptr, id); |
1735 layer_id_to_clip_node_index.erase(id); | 1722 scroll_tree.InsertOwningIdForNode(nullptr, id); |
1736 layer_id_to_scroll_node_index.erase(id); | 1723 effect_tree.InsertOwningIdForNode(nullptr, id); |
1737 } | |
1738 | |
1739 bool PropertyTrees::IsInIdToIndexMap(TreeType tree_type, int id) { | |
1740 std::unordered_map<int, int>* id_to_index_map = nullptr; | |
1741 switch (tree_type) { | |
1742 case TRANSFORM: | |
1743 id_to_index_map = &layer_id_to_transform_node_index; | |
1744 break; | |
1745 case EFFECT: | |
1746 id_to_index_map = &layer_id_to_effect_node_index; | |
1747 break; | |
1748 case CLIP: | |
1749 id_to_index_map = &layer_id_to_clip_node_index; | |
1750 break; | |
1751 case SCROLL: | |
1752 id_to_index_map = &layer_id_to_scroll_node_index; | |
1753 break; | |
1754 } | |
1755 return id_to_index_map->find(id) != id_to_index_map->end(); | |
1756 } | 1724 } |
1757 | 1725 |
1758 void PropertyTrees::UpdateChangeTracking() { | 1726 void PropertyTrees::UpdateChangeTracking() { |
1759 for (int id = EffectTree::kContentsRootNodeId; | 1727 for (int id = EffectTree::kContentsRootNodeId; |
1760 id < static_cast<int>(effect_tree.size()); ++id) { | 1728 id < static_cast<int>(effect_tree.size()); ++id) { |
1761 EffectNode* node = effect_tree.Node(id); | 1729 EffectNode* node = effect_tree.Node(id); |
1762 EffectNode* parent_node = effect_tree.parent(node); | 1730 EffectNode* parent_node = effect_tree.parent(node); |
1763 effect_tree.UpdateEffectChanged(node, parent_node); | 1731 effect_tree.UpdateEffectChanged(node, parent_node); |
1764 } | 1732 } |
1765 for (int i = TransformTree::kContentsRootNodeId; | 1733 for (int i = TransformTree::kContentsRootNodeId; |
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2114 const EffectNode* effect_node = effect_tree.Node(effect_id); | 2082 const EffectNode* effect_node = effect_tree.Node(effect_id); |
2115 | 2083 |
2116 if (effect_node->surface_contents_scale.x() != 0.0 && | 2084 if (effect_node->surface_contents_scale.x() != 0.0 && |
2117 effect_node->surface_contents_scale.y() != 0.0) | 2085 effect_node->surface_contents_scale.y() != 0.0) |
2118 screen_space_transform.Scale(1.0 / effect_node->surface_contents_scale.x(), | 2086 screen_space_transform.Scale(1.0 / effect_node->surface_contents_scale.x(), |
2119 1.0 / effect_node->surface_contents_scale.y()); | 2087 1.0 / effect_node->surface_contents_scale.y()); |
2120 return screen_space_transform; | 2088 return screen_space_transform; |
2121 } | 2089 } |
2122 | 2090 |
2123 } // namespace cc | 2091 } // namespace cc |
OLD | NEW |