Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(241)

Side by Side Diff: cc/trees/property_tree.cc

Issue 1975623002: cc : Add LayerToPropertyTreeIndices map to PropertyTrees (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/trees/property_tree.h ('k') | cc/trees/property_tree_builder.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 110
111 template <typename T> 111 template <typename T>
112 void PropertyTree<T>::ToProtobuf(proto::PropertyTree* proto) const { 112 void PropertyTree<T>::ToProtobuf(proto::PropertyTree* proto) const {
113 DCHECK_EQ(0, proto->nodes_size()); 113 DCHECK_EQ(0, proto->nodes_size());
114 for (const auto& node : nodes_) 114 for (const auto& node : nodes_)
115 node.ToProtobuf(proto->add_nodes()); 115 node.ToProtobuf(proto->add_nodes());
116 proto->set_needs_update(needs_update_); 116 proto->set_needs_update(needs_update_);
117 } 117 }
118 118
119 template <typename T> 119 template <typename T>
120 void PropertyTree<T>::FromProtobuf(const proto::PropertyTree& proto) { 120 void PropertyTree<T>::FromProtobuf(
121 const proto::PropertyTree& proto,
122 std::unordered_map<int, int>* node_id_to_index_map) {
121 // Verify that the property tree is empty. 123 // Verify that the property tree is empty.
122 DCHECK_EQ(static_cast<int>(nodes_.size()), 1); 124 DCHECK_EQ(static_cast<int>(nodes_.size()), 1);
123 DCHECK_EQ(back()->id, 0); 125 DCHECK_EQ(back()->id, 0);
124 DCHECK_EQ(back()->parent_id, -1); 126 DCHECK_EQ(back()->parent_id, -1);
125 127
126 // Add the first node. 128 // Add the first node.
127 DCHECK_GT(proto.nodes_size(), 0); 129 DCHECK_GT(proto.nodes_size(), 0);
128 nodes_.back().FromProtobuf(proto.nodes(0)); 130 nodes_.back().FromProtobuf(proto.nodes(0));
129 131
132 DCHECK(!node_id_to_index_map || (*node_id_to_index_map).empty());
130 for (int i = 1; i < proto.nodes_size(); ++i) { 133 for (int i = 1; i < proto.nodes_size(); ++i) {
131 nodes_.push_back(T()); 134 nodes_.push_back(T());
132 nodes_.back().FromProtobuf(proto.nodes(i)); 135 nodes_.back().FromProtobuf(proto.nodes(i));
136 (*node_id_to_index_map)[nodes_.back().owner_id] = nodes_.back().id;
133 } 137 }
134 138
135 needs_update_ = proto.needs_update(); 139 needs_update_ = proto.needs_update();
136 } 140 }
137 141
138 template <typename T> 142 template <typename T>
139 void PropertyTree<T>::AsValueInto(base::trace_event::TracedValue* value) const { 143 void PropertyTree<T>::AsValueInto(base::trace_event::TracedValue* value) const {
140 value->BeginArray("nodes"); 144 value->BeginArray("nodes");
141 for (const auto& node : nodes_) { 145 for (const auto& node : nodes_) {
142 value->BeginDictionary(); 146 value->BeginDictionary();
(...skipping 1131 matching lines...) Expand 10 before | Expand all | Expand 10 after
1274 data->set_device_scale_factor(device_scale_factor_); 1278 data->set_device_scale_factor(device_scale_factor_);
1275 data->set_device_transform_scale_factor(device_transform_scale_factor_); 1279 data->set_device_transform_scale_factor(device_transform_scale_factor_);
1276 1280
1277 for (auto i : nodes_affected_by_inner_viewport_bounds_delta_) 1281 for (auto i : nodes_affected_by_inner_viewport_bounds_delta_)
1278 data->add_nodes_affected_by_inner_viewport_bounds_delta(i); 1282 data->add_nodes_affected_by_inner_viewport_bounds_delta(i);
1279 1283
1280 for (auto i : nodes_affected_by_outer_viewport_bounds_delta_) 1284 for (auto i : nodes_affected_by_outer_viewport_bounds_delta_)
1281 data->add_nodes_affected_by_outer_viewport_bounds_delta(i); 1285 data->add_nodes_affected_by_outer_viewport_bounds_delta(i);
1282 } 1286 }
1283 1287
1284 void TransformTree::FromProtobuf(const proto::PropertyTree& proto) { 1288 void TransformTree::FromProtobuf(
1289 const proto::PropertyTree& proto,
1290 std::unordered_map<int, int>* node_id_to_index_map) {
1285 DCHECK(proto.has_property_type()); 1291 DCHECK(proto.has_property_type());
1286 DCHECK_EQ(proto.property_type(), proto::PropertyTree::Transform); 1292 DCHECK_EQ(proto.property_type(), proto::PropertyTree::Transform);
1287 1293
1288 PropertyTree::FromProtobuf(proto); 1294 PropertyTree::FromProtobuf(proto, node_id_to_index_map);
1289 const proto::TransformTreeData& data = proto.transform_tree_data(); 1295 const proto::TransformTreeData& data = proto.transform_tree_data();
1290 1296
1291 source_to_parent_updates_allowed_ = data.source_to_parent_updates_allowed(); 1297 source_to_parent_updates_allowed_ = data.source_to_parent_updates_allowed();
1292 page_scale_factor_ = data.page_scale_factor(); 1298 page_scale_factor_ = data.page_scale_factor();
1293 device_scale_factor_ = data.device_scale_factor(); 1299 device_scale_factor_ = data.device_scale_factor();
1294 device_transform_scale_factor_ = data.device_transform_scale_factor(); 1300 device_transform_scale_factor_ = data.device_transform_scale_factor();
1295 1301
1296 DCHECK(nodes_affected_by_inner_viewport_bounds_delta_.empty()); 1302 DCHECK(nodes_affected_by_inner_viewport_bounds_delta_.empty());
1297 for (int i = 0; i < data.nodes_affected_by_inner_viewport_bounds_delta_size(); 1303 for (int i = 0; i < data.nodes_affected_by_inner_viewport_bounds_delta_size();
1298 ++i) { 1304 ++i) {
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
1452 return PropertyTree::operator==(other); 1458 return PropertyTree::operator==(other);
1453 } 1459 }
1454 1460
1455 void ClipTree::ToProtobuf(proto::PropertyTree* proto) const { 1461 void ClipTree::ToProtobuf(proto::PropertyTree* proto) const {
1456 DCHECK(!proto->has_property_type()); 1462 DCHECK(!proto->has_property_type());
1457 proto->set_property_type(proto::PropertyTree::Clip); 1463 proto->set_property_type(proto::PropertyTree::Clip);
1458 1464
1459 PropertyTree::ToProtobuf(proto); 1465 PropertyTree::ToProtobuf(proto);
1460 } 1466 }
1461 1467
1462 void ClipTree::FromProtobuf(const proto::PropertyTree& proto) { 1468 void ClipTree::FromProtobuf(
1469 const proto::PropertyTree& proto,
1470 std::unordered_map<int, int>* node_id_to_index_map) {
1463 DCHECK(proto.has_property_type()); 1471 DCHECK(proto.has_property_type());
1464 DCHECK_EQ(proto.property_type(), proto::PropertyTree::Clip); 1472 DCHECK_EQ(proto.property_type(), proto::PropertyTree::Clip);
1465 1473
1466 PropertyTree::FromProtobuf(proto); 1474 PropertyTree::FromProtobuf(proto, node_id_to_index_map);
1467 } 1475 }
1468 1476
1469 bool EffectTree::operator==(const EffectTree& other) const { 1477 bool EffectTree::operator==(const EffectTree& other) const {
1470 return PropertyTree::operator==(other); 1478 return PropertyTree::operator==(other);
1471 } 1479 }
1472 1480
1473 void EffectTree::ToProtobuf(proto::PropertyTree* proto) const { 1481 void EffectTree::ToProtobuf(proto::PropertyTree* proto) const {
1474 DCHECK(!proto->has_property_type()); 1482 DCHECK(!proto->has_property_type());
1475 proto->set_property_type(proto::PropertyTree::Effect); 1483 proto->set_property_type(proto::PropertyTree::Effect);
1476 1484
1477 PropertyTree::ToProtobuf(proto); 1485 PropertyTree::ToProtobuf(proto);
1478 } 1486 }
1479 1487
1480 void EffectTree::FromProtobuf(const proto::PropertyTree& proto) { 1488 void EffectTree::FromProtobuf(
1489 const proto::PropertyTree& proto,
1490 std::unordered_map<int, int>* node_id_to_index_map) {
1481 DCHECK(proto.has_property_type()); 1491 DCHECK(proto.has_property_type());
1482 DCHECK_EQ(proto.property_type(), proto::PropertyTree::Effect); 1492 DCHECK_EQ(proto.property_type(), proto::PropertyTree::Effect);
1483 1493
1484 PropertyTree::FromProtobuf(proto); 1494 PropertyTree::FromProtobuf(proto, node_id_to_index_map);
1485 } 1495 }
1486 1496
1487 ScrollTree::ScrollTree() 1497 ScrollTree::ScrollTree()
1488 : currently_scrolling_node_id_(-1), 1498 : currently_scrolling_node_id_(-1),
1489 layer_id_to_scroll_offset_map_(ScrollTree::ScrollOffsetMap()) {} 1499 layer_id_to_scroll_offset_map_(ScrollTree::ScrollOffsetMap()) {}
1490 1500
1491 ScrollTree::ScrollTree(const ScrollTree& other) = default; 1501 ScrollTree::ScrollTree(const ScrollTree& other) = default;
1492 1502
1493 ScrollTree::~ScrollTree() {} 1503 ScrollTree::~ScrollTree() {}
1494 1504
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1539 for (auto i : layer_id_to_scroll_offset_map_) { 1549 for (auto i : layer_id_to_scroll_offset_map_) {
1540 data->add_layer_id_to_scroll_offset_map(); 1550 data->add_layer_id_to_scroll_offset_map();
1541 proto::ScrollOffsetMapEntry* entry = 1551 proto::ScrollOffsetMapEntry* entry =
1542 data->mutable_layer_id_to_scroll_offset_map( 1552 data->mutable_layer_id_to_scroll_offset_map(
1543 data->layer_id_to_scroll_offset_map_size() - 1); 1553 data->layer_id_to_scroll_offset_map_size() - 1);
1544 entry->set_layer_id(i.first); 1554 entry->set_layer_id(i.first);
1545 SyncedScrollOffsetToProto(*i.second.get(), entry->mutable_scroll_offset()); 1555 SyncedScrollOffsetToProto(*i.second.get(), entry->mutable_scroll_offset());
1546 } 1556 }
1547 } 1557 }
1548 1558
1549 void ScrollTree::FromProtobuf(const proto::PropertyTree& proto) { 1559 void ScrollTree::FromProtobuf(
1560 const proto::PropertyTree& proto,
1561 std::unordered_map<int, int>* node_id_to_index_map) {
1550 DCHECK(proto.has_property_type()); 1562 DCHECK(proto.has_property_type());
1551 DCHECK_EQ(proto.property_type(), proto::PropertyTree::Scroll); 1563 DCHECK_EQ(proto.property_type(), proto::PropertyTree::Scroll);
1552 1564
1553 PropertyTree::FromProtobuf(proto); 1565 PropertyTree::FromProtobuf(proto, node_id_to_index_map);
1554 const proto::ScrollTreeData& data = proto.scroll_tree_data(); 1566 const proto::ScrollTreeData& data = proto.scroll_tree_data();
1555 1567
1556 currently_scrolling_node_id_ = data.currently_scrolling_node_id(); 1568 currently_scrolling_node_id_ = data.currently_scrolling_node_id();
1557 1569
1558 // TODO(khushalsagar): This should probably be removed if the copy constructor 1570 // TODO(khushalsagar): This should probably be removed if the copy constructor
1559 // for ScrollTree copies the |layer_id_to_scroll_offset_map_| as well. 1571 // for ScrollTree copies the |layer_id_to_scroll_offset_map_| as well.
1560 layer_id_to_scroll_offset_map_.clear(); 1572 layer_id_to_scroll_offset_map_.clear();
1561 for (int i = 0; i < data.layer_id_to_scroll_offset_map_size(); ++i) { 1573 for (int i = 0; i < data.layer_id_to_scroll_offset_map_size(); ++i) {
1562 const proto::ScrollOffsetMapEntry entry = 1574 const proto::ScrollOffsetMapEntry entry =
1563 data.layer_id_to_scroll_offset_map(i); 1575 data.layer_id_to_scroll_offset_map(i);
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after
1903 } 1915 }
1904 1916
1905 PropertyTrees::PropertyTrees(const PropertyTrees& other) = default; 1917 PropertyTrees::PropertyTrees(const PropertyTrees& other) = default;
1906 1918
1907 PropertyTrees::~PropertyTrees() {} 1919 PropertyTrees::~PropertyTrees() {}
1908 1920
1909 bool PropertyTrees::operator==(const PropertyTrees& other) const { 1921 bool PropertyTrees::operator==(const PropertyTrees& other) const {
1910 return transform_tree == other.transform_tree && 1922 return transform_tree == other.transform_tree &&
1911 effect_tree == other.effect_tree && clip_tree == other.clip_tree && 1923 effect_tree == other.effect_tree && clip_tree == other.clip_tree &&
1912 scroll_tree == other.scroll_tree && 1924 scroll_tree == other.scroll_tree &&
1925 transform_id_to_index_map == other.transform_id_to_index_map &&
1926 effect_id_to_index_map == other.effect_id_to_index_map &&
1927 clip_id_to_index_map == other.clip_id_to_index_map &&
1928 scroll_id_to_index_map == other.scroll_id_to_index_map &&
1913 needs_rebuild == other.needs_rebuild && changed == other.changed && 1929 needs_rebuild == other.needs_rebuild && changed == other.changed &&
1914 full_tree_damaged == other.full_tree_damaged && 1930 full_tree_damaged == other.full_tree_damaged &&
1915 is_main_thread == other.is_main_thread && 1931 is_main_thread == other.is_main_thread &&
1916 is_active == other.is_active && 1932 is_active == other.is_active &&
1917 non_root_surfaces_enabled == other.non_root_surfaces_enabled && 1933 non_root_surfaces_enabled == other.non_root_surfaces_enabled &&
1918 sequence_number == other.sequence_number; 1934 sequence_number == other.sequence_number;
1919 } 1935 }
1920 1936
1921 PropertyTrees& PropertyTrees::operator=(const PropertyTrees& from) { 1937 PropertyTrees& PropertyTrees::operator=(const PropertyTrees& from) {
1922 transform_tree = from.transform_tree; 1938 transform_tree = from.transform_tree;
1923 effect_tree = from.effect_tree; 1939 effect_tree = from.effect_tree;
1924 clip_tree = from.clip_tree; 1940 clip_tree = from.clip_tree;
1925 scroll_tree = from.scroll_tree; 1941 scroll_tree = from.scroll_tree;
1942 transform_id_to_index_map = from.transform_id_to_index_map;
1943 effect_id_to_index_map = from.effect_id_to_index_map;
1944 clip_id_to_index_map = from.clip_id_to_index_map;
1945 scroll_id_to_index_map = from.scroll_id_to_index_map;
1926 needs_rebuild = from.needs_rebuild; 1946 needs_rebuild = from.needs_rebuild;
1927 changed = from.changed; 1947 changed = from.changed;
1928 full_tree_damaged = from.full_tree_damaged; 1948 full_tree_damaged = from.full_tree_damaged;
1929 non_root_surfaces_enabled = from.non_root_surfaces_enabled; 1949 non_root_surfaces_enabled = from.non_root_surfaces_enabled;
1930 sequence_number = from.sequence_number; 1950 sequence_number = from.sequence_number;
1931 is_main_thread = from.is_main_thread; 1951 is_main_thread = from.is_main_thread;
1932 is_active = from.is_active; 1952 is_active = from.is_active;
1933 inner_viewport_container_bounds_delta_ = 1953 inner_viewport_container_bounds_delta_ =
1934 from.inner_viewport_container_bounds_delta(); 1954 from.inner_viewport_container_bounds_delta();
1935 outer_viewport_container_bounds_delta_ = 1955 outer_viewport_container_bounds_delta_ =
(...skipping 21 matching lines...) Expand all
1957 proto->set_is_main_thread(is_main_thread); 1977 proto->set_is_main_thread(is_main_thread);
1958 proto->set_is_active(is_active); 1978 proto->set_is_active(is_active);
1959 1979
1960 // TODO(khushalsagar): Consider using the sequence number to decide if 1980 // TODO(khushalsagar): Consider using the sequence number to decide if
1961 // property trees need to be serialized again for a commit. See crbug/555370. 1981 // property trees need to be serialized again for a commit. See crbug/555370.
1962 proto->set_sequence_number(sequence_number); 1982 proto->set_sequence_number(sequence_number);
1963 } 1983 }
1964 1984
1965 // static 1985 // static
1966 void PropertyTrees::FromProtobuf(const proto::PropertyTrees& proto) { 1986 void PropertyTrees::FromProtobuf(const proto::PropertyTrees& proto) {
1967 transform_tree.FromProtobuf(proto.transform_tree()); 1987 transform_tree.FromProtobuf(proto.transform_tree(),
1968 effect_tree.FromProtobuf(proto.effect_tree()); 1988 &transform_id_to_index_map);
1969 clip_tree.FromProtobuf(proto.clip_tree()); 1989 effect_tree.FromProtobuf(proto.effect_tree(), &effect_id_to_index_map);
1970 scroll_tree.FromProtobuf(proto.scroll_tree()); 1990 clip_tree.FromProtobuf(proto.clip_tree(), &clip_id_to_index_map);
1991 scroll_tree.FromProtobuf(proto.scroll_tree(), &scroll_id_to_index_map);
1971 1992
1972 needs_rebuild = proto.needs_rebuild(); 1993 needs_rebuild = proto.needs_rebuild();
1973 changed = proto.changed(); 1994 changed = proto.changed();
1974 full_tree_damaged = proto.full_tree_damaged(); 1995 full_tree_damaged = proto.full_tree_damaged();
1975 non_root_surfaces_enabled = proto.non_root_surfaces_enabled(); 1996 non_root_surfaces_enabled = proto.non_root_surfaces_enabled();
1976 sequence_number = proto.sequence_number(); 1997 sequence_number = proto.sequence_number();
1977 is_main_thread = proto.is_main_thread(); 1998 is_main_thread = proto.is_main_thread();
1978 is_active = proto.is_active(); 1999 is_active = proto.is_active();
1979 2000
1980 transform_tree.SetPropertyTrees(this); 2001 transform_tree.SetPropertyTrees(this);
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
2076 value->EndDictionary(); 2097 value->EndDictionary();
2077 2098
2078 value->BeginDictionary("scroll_tree"); 2099 value->BeginDictionary("scroll_tree");
2079 scroll_tree.AsValueInto(value.get()); 2100 scroll_tree.AsValueInto(value.get());
2080 value->EndDictionary(); 2101 value->EndDictionary();
2081 2102
2082 return value; 2103 return value;
2083 } 2104 }
2084 2105
2085 } // namespace cc 2106 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/property_tree.h ('k') | cc/trees/property_tree_builder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698