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

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

Issue 1611713002: Add Scroll Tree data structure (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add scroll tree serialization unit tests Created 4 years, 11 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_unittest.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 25 matching lines...) Expand all
36 void TreeNode<T>::FromProtobuf(const proto::TreeNode& proto) { 36 void TreeNode<T>::FromProtobuf(const proto::TreeNode& proto) {
37 id = proto.id(); 37 id = proto.id();
38 parent_id = proto.parent_id(); 38 parent_id = proto.parent_id();
39 owner_id = proto.owner_id(); 39 owner_id = proto.owner_id();
40 data.FromProtobuf(proto); 40 data.FromProtobuf(proto);
41 } 41 }
42 42
43 template struct TreeNode<TransformNodeData>; 43 template struct TreeNode<TransformNodeData>;
44 template struct TreeNode<ClipNodeData>; 44 template struct TreeNode<ClipNodeData>;
45 template struct TreeNode<EffectNodeData>; 45 template struct TreeNode<EffectNodeData>;
46 template struct TreeNode<ScrollNodeData>;
46 47
47 template <typename T> 48 template <typename T>
48 PropertyTree<T>::PropertyTree() 49 PropertyTree<T>::PropertyTree()
49 : needs_update_(false) { 50 : needs_update_(false) {
50 nodes_.push_back(T()); 51 nodes_.push_back(T());
51 back()->id = 0; 52 back()->id = 0;
52 back()->parent_id = -1; 53 back()->parent_id = -1;
53 } 54 }
54 55
55 template <typename T> 56 template <typename T>
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 nodes_.push_back(T()); 112 nodes_.push_back(T());
112 nodes_.back().FromProtobuf(proto.nodes(i)); 113 nodes_.back().FromProtobuf(proto.nodes(i));
113 } 114 }
114 115
115 needs_update_ = proto.needs_update(); 116 needs_update_ = proto.needs_update();
116 } 117 }
117 118
118 template class PropertyTree<TransformNode>; 119 template class PropertyTree<TransformNode>;
119 template class PropertyTree<ClipNode>; 120 template class PropertyTree<ClipNode>;
120 template class PropertyTree<EffectNode>; 121 template class PropertyTree<EffectNode>;
122 template class PropertyTree<ScrollNode>;
121 123
122 TransformNodeData::TransformNodeData() 124 TransformNodeData::TransformNodeData()
123 : target_id(-1), 125 : target_id(-1),
124 content_target_id(-1), 126 content_target_id(-1),
125 source_node_id(-1), 127 source_node_id(-1),
126 needs_local_transform_update(true), 128 needs_local_transform_update(true),
127 is_invertible(true), 129 is_invertible(true),
128 ancestors_are_invertible(true), 130 ancestors_are_invertible(true),
129 is_animated(false), 131 is_animated(false),
130 to_screen_is_animated(false), 132 to_screen_is_animated(false),
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
441 const proto::EffectNodeData& data = proto.effect_node_data(); 443 const proto::EffectNodeData& data = proto.effect_node_data();
442 444
443 opacity = data.opacity(); 445 opacity = data.opacity();
444 screen_space_opacity = data.screen_space_opacity(); 446 screen_space_opacity = data.screen_space_opacity();
445 has_render_surface = data.has_render_surface(); 447 has_render_surface = data.has_render_surface();
446 num_copy_requests_in_subtree = data.num_copy_requests_in_subtree(); 448 num_copy_requests_in_subtree = data.num_copy_requests_in_subtree();
447 transform_id = data.transform_id(); 449 transform_id = data.transform_id();
448 clip_id = data.clip_id(); 450 clip_id = data.clip_id();
449 } 451 }
450 452
453 ScrollNodeData::ScrollNodeData()
454 : scrollable(false),
455 should_scroll_on_main_thread(false),
456 scroll_blocks_on(ScrollBlocksOn::SCROLL_BLOCKS_ON_NONE),
457 contains_non_fast_scrollable_region(false),
458 transform_id(0) {}
459
460 bool ScrollNodeData::operator==(const ScrollNodeData& other) const {
461 return scrollable == other.scrollable &&
462 should_scroll_on_main_thread == other.should_scroll_on_main_thread &&
463 scroll_blocks_on == other.scroll_blocks_on &&
464 contains_non_fast_scrollable_region ==
465 other.contains_non_fast_scrollable_region &&
466 transform_id == other.transform_id;
467 }
468
469 void ScrollNodeData::ToProtobuf(proto::TreeNode* proto) const {
470 DCHECK(!proto->has_scroll_node_data());
471 proto::ScrollNodeData* data = proto->mutable_scroll_node_data();
472 data->set_scrollable(scrollable);
473 data->set_should_scroll_on_main_thread(should_scroll_on_main_thread);
474 data->set_scroll_blocks_on(scroll_blocks_on);
475 data->set_contains_non_fast_scrollable_region(
476 contains_non_fast_scrollable_region);
477 data->set_transform_id(transform_id);
478 }
479
480 void ScrollNodeData::FromProtobuf(const proto::TreeNode& proto) {
481 DCHECK(proto.has_scroll_node_data());
482 const proto::ScrollNodeData& data = proto.scroll_node_data();
483
484 scrollable = data.scrollable();
485 should_scroll_on_main_thread = data.should_scroll_on_main_thread();
486 scroll_blocks_on = (ScrollBlocksOn)data.scroll_blocks_on();
487 contains_non_fast_scrollable_region =
488 data.contains_non_fast_scrollable_region();
489 transform_id = data.transform_id();
490 }
491
451 void TransformTree::clear() { 492 void TransformTree::clear() {
452 PropertyTree<TransformNode>::clear(); 493 PropertyTree<TransformNode>::clear();
453 494
454 nodes_affected_by_inner_viewport_bounds_delta_.clear(); 495 nodes_affected_by_inner_viewport_bounds_delta_.clear();
455 nodes_affected_by_outer_viewport_bounds_delta_.clear(); 496 nodes_affected_by_outer_viewport_bounds_delta_.clear();
456 } 497 }
457 498
458 bool TransformTree::ComputeTransform(int source_id, 499 bool TransformTree::ComputeTransform(int source_id,
459 int dest_id, 500 int dest_id,
460 gfx::Transform* transform) const { 501 gfx::Transform* transform) const {
(...skipping 640 matching lines...) Expand 10 before | Expand all | Expand 10 after
1101 PropertyTree::ToProtobuf(proto); 1142 PropertyTree::ToProtobuf(proto);
1102 } 1143 }
1103 1144
1104 void EffectTree::FromProtobuf(const proto::PropertyTree& proto) { 1145 void EffectTree::FromProtobuf(const proto::PropertyTree& proto) {
1105 DCHECK(proto.has_property_type()); 1146 DCHECK(proto.has_property_type());
1106 DCHECK_EQ(proto.property_type(), proto::PropertyTree::Effect); 1147 DCHECK_EQ(proto.property_type(), proto::PropertyTree::Effect);
1107 1148
1108 PropertyTree::FromProtobuf(proto); 1149 PropertyTree::FromProtobuf(proto);
1109 } 1150 }
1110 1151
1152 bool ScrollTree::operator==(const ScrollTree& other) const {
1153 return PropertyTree::operator==(other);
1154 }
1155
1156 void ScrollTree::ToProtobuf(proto::PropertyTree* proto) const {
1157 DCHECK(!proto->has_property_type());
1158 proto->set_property_type(proto::PropertyTree::Scroll);
1159
1160 PropertyTree::ToProtobuf(proto);
1161 }
1162
1163 void ScrollTree::FromProtobuf(const proto::PropertyTree& proto) {
1164 DCHECK(proto.has_property_type());
1165 DCHECK_EQ(proto.property_type(), proto::PropertyTree::Scroll);
1166
1167 PropertyTree::FromProtobuf(proto);
1168 }
1169
1111 PropertyTrees::PropertyTrees() 1170 PropertyTrees::PropertyTrees()
1112 : needs_rebuild(true), 1171 : needs_rebuild(true),
1113 non_root_surfaces_enabled(true), 1172 non_root_surfaces_enabled(true),
1114 sequence_number(0) {} 1173 sequence_number(0) {}
1115 1174
1175 PropertyTrees::~PropertyTrees() {}
1176
1116 bool PropertyTrees::operator==(const PropertyTrees& other) const { 1177 bool PropertyTrees::operator==(const PropertyTrees& other) const {
1117 return transform_tree == other.transform_tree && 1178 return transform_tree == other.transform_tree &&
1118 effect_tree == other.effect_tree && clip_tree == other.clip_tree && 1179 effect_tree == other.effect_tree && clip_tree == other.clip_tree &&
1180 scroll_tree == other.scroll_tree &&
1119 needs_rebuild == other.needs_rebuild && 1181 needs_rebuild == other.needs_rebuild &&
1120 non_root_surfaces_enabled == other.non_root_surfaces_enabled && 1182 non_root_surfaces_enabled == other.non_root_surfaces_enabled &&
1121 sequence_number == other.sequence_number; 1183 sequence_number == other.sequence_number;
1122 } 1184 }
1123 1185
1124 void PropertyTrees::ToProtobuf(proto::PropertyTrees* proto) const { 1186 void PropertyTrees::ToProtobuf(proto::PropertyTrees* proto) const {
1125 // TODO(khushalsagar): Add support for sending diffs when serializaing 1187 // TODO(khushalsagar): Add support for sending diffs when serializaing
1126 // property trees. See crbug/555370. 1188 // property trees. See crbug/555370.
1127 transform_tree.ToProtobuf(proto->mutable_transform_tree()); 1189 transform_tree.ToProtobuf(proto->mutable_transform_tree());
1128 effect_tree.ToProtobuf(proto->mutable_effect_tree()); 1190 effect_tree.ToProtobuf(proto->mutable_effect_tree());
1129 clip_tree.ToProtobuf(proto->mutable_clip_tree()); 1191 clip_tree.ToProtobuf(proto->mutable_clip_tree());
1192 scroll_tree.ToProtobuf(proto->mutable_scroll_tree());
1130 proto->set_needs_rebuild(needs_rebuild); 1193 proto->set_needs_rebuild(needs_rebuild);
1131 proto->set_non_root_surfaces_enabled(non_root_surfaces_enabled); 1194 proto->set_non_root_surfaces_enabled(non_root_surfaces_enabled);
1132 1195
1133 // TODO(khushalsagar): Consider using the sequence number to decide if 1196 // TODO(khushalsagar): Consider using the sequence number to decide if
1134 // property trees need to be serialized again for a commit. See crbug/555370. 1197 // property trees need to be serialized again for a commit. See crbug/555370.
1135 proto->set_sequence_number(sequence_number); 1198 proto->set_sequence_number(sequence_number);
1136 } 1199 }
1137 1200
1138 // static 1201 // static
1139 void PropertyTrees::FromProtobuf(const proto::PropertyTrees& proto) { 1202 void PropertyTrees::FromProtobuf(const proto::PropertyTrees& proto) {
1140 transform_tree.FromProtobuf(proto.transform_tree()); 1203 transform_tree.FromProtobuf(proto.transform_tree());
1141 effect_tree.FromProtobuf(proto.effect_tree()); 1204 effect_tree.FromProtobuf(proto.effect_tree());
1142 clip_tree.FromProtobuf(proto.clip_tree()); 1205 clip_tree.FromProtobuf(proto.clip_tree());
1206 scroll_tree.FromProtobuf(proto.scroll_tree());
1143 1207
1144 needs_rebuild = proto.needs_rebuild(); 1208 needs_rebuild = proto.needs_rebuild();
1145 non_root_surfaces_enabled = proto.non_root_surfaces_enabled(); 1209 non_root_surfaces_enabled = proto.non_root_surfaces_enabled();
1146 sequence_number = proto.sequence_number(); 1210 sequence_number = proto.sequence_number();
1147 } 1211 }
1148 1212
1149 } // namespace cc 1213 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/property_tree.h ('k') | cc/trees/property_tree_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698