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 742 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
753 } | 753 } |
754 return &sticky_position_data_[node->sticky_position_constraint_id]; | 754 return &sticky_position_data_[node->sticky_position_constraint_id]; |
755 } | 755 } |
756 | 756 |
757 EffectTree::EffectTree() { | 757 EffectTree::EffectTree() { |
758 render_surfaces_.push_back(nullptr); | 758 render_surfaces_.push_back(nullptr); |
759 } | 759 } |
760 | 760 |
761 EffectTree::~EffectTree() {} | 761 EffectTree::~EffectTree() {} |
762 | 762 |
| 763 #if DCHECK_IS_ON() |
| 764 bool EffectTree::LookupByOnwningLayerIdAllowed() const { |
| 765 return false; |
| 766 } |
| 767 #endif |
| 768 |
763 int EffectTree::Insert(const EffectNode& tree_node, int parent_id) { | 769 int EffectTree::Insert(const EffectNode& tree_node, int parent_id) { |
764 int node_id = PropertyTree<EffectNode>::Insert(tree_node, parent_id); | 770 int node_id = PropertyTree<EffectNode>::Insert(tree_node, parent_id); |
765 DCHECK_EQ(node_id, static_cast<int>(render_surfaces_.size())); | 771 DCHECK_EQ(node_id, static_cast<int>(render_surfaces_.size())); |
766 | 772 |
767 render_surfaces_.push_back(nullptr); | 773 render_surfaces_.push_back(nullptr); |
768 return node_id; | 774 return node_id; |
769 } | 775 } |
770 | 776 |
771 void EffectTree::clear() { | 777 void EffectTree::clear() { |
772 PropertyTree<EffectNode>::clear(); | 778 PropertyTree<EffectNode>::clear(); |
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1007 void EffectTree::UpdateRenderSurfaces(LayerTreeImpl* layer_tree_impl) { | 1013 void EffectTree::UpdateRenderSurfaces(LayerTreeImpl* layer_tree_impl) { |
1008 for (int id = kContentsRootNodeId; id < static_cast<int>(size()); ++id) { | 1014 for (int id = kContentsRootNodeId; id < static_cast<int>(size()); ++id) { |
1009 EffectNode* effect_node = Node(id); | 1015 EffectNode* effect_node = Node(id); |
1010 bool needs_render_surface = | 1016 bool needs_render_surface = |
1011 id == kContentsRootNodeId || effect_node->has_render_surface; | 1017 id == kContentsRootNodeId || effect_node->has_render_surface; |
1012 if (needs_render_surface == !!render_surfaces_[id]) | 1018 if (needs_render_surface == !!render_surfaces_[id]) |
1013 continue; | 1019 continue; |
1014 | 1020 |
1015 if (needs_render_surface) { | 1021 if (needs_render_surface) { |
1016 render_surfaces_[id] = base::MakeUnique<RenderSurfaceImpl>( | 1022 render_surfaces_[id] = base::MakeUnique<RenderSurfaceImpl>( |
1017 layer_tree_impl, effect_node->owning_layer_id); | 1023 layer_tree_impl, effect_node->stable_id); |
1018 render_surfaces_[id]->set_effect_tree_index(id); | 1024 render_surfaces_[id]->set_effect_tree_index(id); |
1019 } else { | 1025 } else { |
1020 render_surfaces_[id].reset(); | 1026 render_surfaces_[id].reset(); |
1021 } | 1027 } |
1022 } | 1028 } |
1023 } | 1029 } |
1024 | 1030 |
1025 bool EffectTree::ContributesToDrawnSurface(int id) { | 1031 bool EffectTree::ContributesToDrawnSurface(int id) { |
1026 // All drawn nodes contribute to drawn surface. | 1032 // All drawn nodes contribute to drawn surface. |
1027 // Exception : Nodes that are hidden and are drawn only for the sake of | 1033 // Exception : Nodes that are hidden and are drawn only for the sake of |
(...skipping 24 matching lines...) Expand all Loading... |
1052 bool EffectTree::CreateOrReuseRenderSurfaces( | 1058 bool EffectTree::CreateOrReuseRenderSurfaces( |
1053 std::vector<std::unique_ptr<RenderSurfaceImpl>>* old_render_surfaces, | 1059 std::vector<std::unique_ptr<RenderSurfaceImpl>>* old_render_surfaces, |
1054 LayerTreeImpl* layer_tree_impl) { | 1060 LayerTreeImpl* layer_tree_impl) { |
1055 // Make a list of {stable id, node id} pairs for nodes that are supposed to | 1061 // Make a list of {stable id, node id} pairs for nodes that are supposed to |
1056 // have surfaces. | 1062 // have surfaces. |
1057 std::vector<std::pair<int, int>> stable_id_node_id_list; | 1063 std::vector<std::pair<int, int>> stable_id_node_id_list; |
1058 for (int id = kContentsRootNodeId; id < static_cast<int>(size()); ++id) { | 1064 for (int id = kContentsRootNodeId; id < static_cast<int>(size()); ++id) { |
1059 EffectNode* node = Node(id); | 1065 EffectNode* node = Node(id); |
1060 if (node->has_render_surface) { | 1066 if (node->has_render_surface) { |
1061 stable_id_node_id_list.push_back( | 1067 stable_id_node_id_list.push_back( |
1062 std::make_pair(node->owning_layer_id, node->id)); | 1068 std::make_pair(node->stable_id, node->id)); |
1063 } | 1069 } |
1064 } | 1070 } |
1065 | 1071 |
1066 // Sort by stable id so that we can process the two lists cosequentially. | 1072 // Sort by stable id so that we can process the two lists cosequentially. |
1067 std::sort(stable_id_node_id_list.begin(), stable_id_node_id_list.end()); | 1073 std::sort(stable_id_node_id_list.begin(), stable_id_node_id_list.end()); |
1068 std::sort(old_render_surfaces->begin(), old_render_surfaces->end(), | 1074 std::sort(old_render_surfaces->begin(), old_render_surfaces->end(), |
1069 [](const std::unique_ptr<RenderSurfaceImpl>& a, | 1075 [](const std::unique_ptr<RenderSurfaceImpl>& a, |
1070 const std::unique_ptr<RenderSurfaceImpl>& b) { | 1076 const std::unique_ptr<RenderSurfaceImpl>& b) { |
1071 return a->id() < b->id(); | 1077 return a->id() < b->id(); |
1072 }); | 1078 }); |
(...skipping 638 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1711 outer_viewport_container_bounds_delta_ = bounds_delta; | 1717 outer_viewport_container_bounds_delta_ = bounds_delta; |
1712 transform_tree.UpdateOuterViewportContainerBoundsDelta(); | 1718 transform_tree.UpdateOuterViewportContainerBoundsDelta(); |
1713 } | 1719 } |
1714 | 1720 |
1715 void PropertyTrees::SetInnerViewportScrollBoundsDelta( | 1721 void PropertyTrees::SetInnerViewportScrollBoundsDelta( |
1716 gfx::Vector2dF bounds_delta) { | 1722 gfx::Vector2dF bounds_delta) { |
1717 inner_viewport_scroll_bounds_delta_ = bounds_delta; | 1723 inner_viewport_scroll_bounds_delta_ = bounds_delta; |
1718 } | 1724 } |
1719 | 1725 |
1720 void PropertyTrees::PushOpacityIfNeeded(PropertyTrees* target_tree) { | 1726 void PropertyTrees::PushOpacityIfNeeded(PropertyTrees* target_tree) { |
1721 for (int id : target_tree->always_use_active_tree_opacity_effect_ids) { | 1727 for (const ElementId& element_id : |
| 1728 target_tree->always_use_active_tree_opacity_effect_ids) { |
1722 if (const EffectNode* source_effect_node = | 1729 if (const EffectNode* source_effect_node = |
1723 effect_tree.FindNodeFromOwningLayerId(id)) { | 1730 effect_tree.FindNodeFromElementId(element_id)) { |
1724 EffectNode* target_effect_node = | 1731 EffectNode* target_effect_node = |
1725 target_tree->effect_tree.UpdateNodeFromOwningLayerId(id); | 1732 target_tree->effect_tree.FindNodeFromElementId(element_id); |
1726 float source_opacity = source_effect_node->opacity; | 1733 float source_opacity = source_effect_node->opacity; |
1727 float target_opacity = target_effect_node->opacity; | 1734 float target_opacity = target_effect_node->opacity; |
1728 if (source_opacity == target_opacity) | 1735 if (source_opacity == target_opacity) |
1729 continue; | 1736 continue; |
1730 target_effect_node->opacity = source_opacity; | 1737 target_effect_node->opacity = source_opacity; |
1731 target_tree->effect_tree.set_needs_update(true); | 1738 target_tree->effect_tree.set_needs_update(true); |
1732 } | 1739 } |
1733 } | 1740 } |
1734 } | 1741 } |
1735 | 1742 |
1736 void PropertyTrees::RemoveIdFromIdToIndexMaps(int id) { | 1743 void PropertyTrees::RemoveIdFromIdToIndexMaps(int id) { |
1737 transform_tree.SetOwningLayerIdForNode(nullptr, id); | 1744 transform_tree.SetOwningLayerIdForNode(nullptr, id); |
1738 clip_tree.SetOwningLayerIdForNode(nullptr, id); | 1745 clip_tree.SetOwningLayerIdForNode(nullptr, id); |
1739 scroll_tree.SetOwningLayerIdForNode(nullptr, id); | 1746 scroll_tree.SetOwningLayerIdForNode(nullptr, id); |
1740 effect_tree.SetOwningLayerIdForNode(nullptr, id); | |
1741 } | 1747 } |
1742 | 1748 |
1743 void PropertyTrees::UpdateChangeTracking() { | 1749 void PropertyTrees::UpdateChangeTracking() { |
1744 for (int id = EffectTree::kContentsRootNodeId; | 1750 for (int id = EffectTree::kContentsRootNodeId; |
1745 id < static_cast<int>(effect_tree.size()); ++id) { | 1751 id < static_cast<int>(effect_tree.size()); ++id) { |
1746 EffectNode* node = effect_tree.Node(id); | 1752 EffectNode* node = effect_tree.Node(id); |
1747 EffectNode* parent_node = effect_tree.parent(node); | 1753 EffectNode* parent_node = effect_tree.parent(node); |
1748 effect_tree.UpdateEffectChanged(node, parent_node); | 1754 effect_tree.UpdateEffectChanged(node, parent_node); |
1749 } | 1755 } |
1750 for (int i = TransformTree::kContentsRootNodeId; | 1756 for (int i = TransformTree::kContentsRootNodeId; |
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2120 const EffectNode* effect_node = effect_tree.Node(effect_id); | 2126 const EffectNode* effect_node = effect_tree.Node(effect_id); |
2121 | 2127 |
2122 if (effect_node->surface_contents_scale.x() != 0.0 && | 2128 if (effect_node->surface_contents_scale.x() != 0.0 && |
2123 effect_node->surface_contents_scale.y() != 0.0) | 2129 effect_node->surface_contents_scale.y() != 0.0) |
2124 screen_space_transform.Scale(1.0 / effect_node->surface_contents_scale.x(), | 2130 screen_space_transform.Scale(1.0 / effect_node->surface_contents_scale.x(), |
2125 1.0 / effect_node->surface_contents_scale.y()); | 2131 1.0 / effect_node->surface_contents_scale.y()); |
2126 return screen_space_transform; | 2132 return screen_space_transform; |
2127 } | 2133 } |
2128 | 2134 |
2129 } // namespace cc | 2135 } // namespace cc |
OLD | NEW |