| 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 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |