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

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

Issue 1417963011: Added serialization to protobufs for property trees. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: gn fix Created 5 years, 1 month 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
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 <set> 5 #include <set>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "cc/base/math_util.h" 9 #include "cc/base/math_util.h"
10 #include "cc/proto/gfx_conversions.h"
11 #include "cc/proto/property_tree.pb.h"
12 #include "cc/proto/scroll_offset.pb.h"
13 #include "cc/proto/transform.pb.h"
14 #include "cc/proto/vector2df.pb.h"
10 #include "cc/trees/property_tree.h" 15 #include "cc/trees/property_tree.h"
11 16
12 namespace cc { 17 namespace cc {
13 18
19 namespace {
20
21 void CheckIsValidTreeNodeProto(
22 const proto::TreeNode& proto,
23 const proto::TreeNode::PropertyType expected_type) {
24 DCHECK(proto.has_property_type());
25 DCHECK_EQ(expected_type, proto.property_type());
26 switch (proto.property_type()) {
27 case proto::TreeNode::Transform:
28 DCHECK(proto.has_transform_node_data());
29 DCHECK(!proto.has_clip_node_data());
30 DCHECK(!proto.has_effect_node_data());
31 return;
32 case proto::TreeNode::Clip:
33 DCHECK(!proto.has_transform_node_data());
34 DCHECK(proto.has_clip_node_data());
35 DCHECK(!proto.has_effect_node_data());
36 return;
37 case proto::TreeNode::Effect:
38 DCHECK(!proto.has_transform_node_data());
39 DCHECK(!proto.has_clip_node_data());
40 DCHECK(proto.has_effect_node_data());
41 return;
42 default:
43 NOTREACHED();
44 }
45 }
46 }
47
14 template <typename T> 48 template <typename T>
15 PropertyTree<T>::PropertyTree() 49 PropertyTree<T>::PropertyTree()
16 : needs_update_(false) { 50 : needs_update_(false) {
17 nodes_.push_back(T()); 51 nodes_.push_back(T());
18 back()->id = 0; 52 back()->id = 0;
19 back()->parent_id = -1; 53 back()->parent_id = -1;
20 } 54 }
21 55
22 template <typename T> 56 template <typename T>
23 PropertyTree<T>::~PropertyTree() { 57 PropertyTree<T>::~PropertyTree() {
(...skipping 19 matching lines...) Expand all
43 } 77 }
44 78
45 template <typename T> 79 template <typename T>
46 void PropertyTree<T>::clear() { 80 void PropertyTree<T>::clear() {
47 nodes_.clear(); 81 nodes_.clear();
48 nodes_.push_back(T()); 82 nodes_.push_back(T());
49 back()->id = 0; 83 back()->id = 0;
50 back()->parent_id = -1; 84 back()->parent_id = -1;
51 } 85 }
52 86
87 template <typename T>
88 void TreeNode<T>::ToProtobuf(proto::TreeNode* proto) const {
89 proto->set_id(id);
90 proto->set_parent_id(parent_id);
91 proto->set_owner_id(owner_id);
92 data.ToProtobuf(proto);
93 }
94
95 template <typename T>
96 void TreeNode<T>::FromProtobuf(const proto::TreeNode& proto) {
97 id = proto.id();
98 parent_id = proto.parent_id();
99 owner_id = proto.owner_id();
100 data.FromProtobuf(proto);
101 }
102
103 template <typename T>
104 void PropertyTree<T>::ToProtobuf(proto::PropertyTree* proto) const {
Khushal 2015/11/11 19:14:13 Serialization for the base PropertyTree.
105 DCHECK_EQ(0, proto->nodes_size());
106 for (size_t i = 0; i < nodes_.size(); i++)
107 nodes_[i].ToProtobuf(proto->add_nodes());
108 proto->set_needs_update(needs_update_);
109 }
110
111 template <typename T>
112 void PropertyTree<T>::FromProtobuf(const proto::PropertyTree& proto) {
113 // Verify that the property tree is empty.
114 DCHECK_EQ(static_cast<int>(nodes_.size()), 1);
115 DCHECK_EQ(back()->id, 0);
116 DCHECK_EQ(back()->parent_id, -1);
117
118 // Add the first node.
119 DCHECK_GT(0, proto.nodes_size());
120 nodes_[0].FromProtobuf(proto.nodes(0));
121
122 for (int i = 1; i < proto.nodes_size(); i++) {
123 nodes_.push_back(T());
124 nodes_[i].FromProtobuf(proto.nodes(i));
125 }
126 }
127
53 template class PropertyTree<TransformNode>; 128 template class PropertyTree<TransformNode>;
54 template class PropertyTree<ClipNode>; 129 template class PropertyTree<ClipNode>;
55 template class PropertyTree<EffectNode>; 130 template class PropertyTree<EffectNode>;
56 131
57 TransformNodeData::TransformNodeData() 132 TransformNodeData::TransformNodeData()
58 : target_id(-1), 133 : target_id(-1),
59 content_target_id(-1), 134 content_target_id(-1),
60 source_node_id(-1), 135 source_node_id(-1),
61 needs_local_transform_update(true), 136 needs_local_transform_update(true),
62 is_invertible(true), 137 is_invertible(true),
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 const gfx::PointF& position, 170 const gfx::PointF& position,
96 const gfx::Point3F& transform_origin) { 171 const gfx::Point3F& transform_origin) {
97 post_local.MakeIdentity(); 172 post_local.MakeIdentity();
98 post_local.Scale(post_local_scale_factor, post_local_scale_factor); 173 post_local.Scale(post_local_scale_factor, post_local_scale_factor);
99 post_local.Translate3d( 174 post_local.Translate3d(
100 position.x() + source_offset.x() + transform_origin.x(), 175 position.x() + source_offset.x() + transform_origin.x(),
101 position.y() + source_offset.y() + transform_origin.y(), 176 position.y() + source_offset.y() + transform_origin.y(),
102 transform_origin.z()); 177 transform_origin.z());
103 } 178 }
104 179
180 void TransformNodeData::ToProtobuf(proto::TreeNode* proto) const {
181 DCHECK(!proto->has_property_type());
Khushal 2015/11/11 19:14:13 We don't really need the property type here. I add
182 proto->set_property_type(proto::TreeNode::Transform);
183
184 DCHECK(!proto->has_transform_node_data());
185 proto::TranformNodeData* data = proto->mutable_transform_node_data();
186
187 TransformToProto(pre_local, data->mutable_pre_local());
188 TransformToProto(local, data->mutable_local());
189 TransformToProto(post_local, data->mutable_post_local());
190
191 TransformToProto(to_parent, data->mutable_to_parent());
192
193 TransformToProto(to_target, data->mutable_to_target());
194 TransformToProto(from_target, data->mutable_from_target());
195
196 TransformToProto(to_screen, data->mutable_to_screen());
197 TransformToProto(from_screen, data->mutable_from_screen());
198
199 data->set_target_id(target_id);
200 data->set_content_target_id(content_target_id);
201 data->set_source_node_id(source_node_id);
202
203 data->set_needs_local_transform_update(needs_local_transform_update);
204
205 data->set_is_invertible(is_invertible);
206 data->set_ancestors_are_invertible(ancestors_are_invertible);
207
208 data->set_is_animated(is_animated);
209 data->set_to_screen_is_animated(to_screen_is_animated);
210 data->set_has_only_translation_animations(has_only_translation_animations);
211 data->set_to_screen_has_scale_animation(to_screen_has_scale_animation);
212
213 data->set_flattens_inherited_transform(flattens_inherited_transform);
214 data->set_node_and_ancestors_are_flat(node_and_ancestors_are_flat);
215
216 data->set_node_and_ancestors_have_only_integer_translation(
217 node_and_ancestors_have_only_integer_translation);
218 data->set_scrolls(scrolls);
219 data->set_needs_sublayer_scale(needs_sublayer_scale);
220
221 data->set_affected_by_inner_viewport_bounds_delta_x(
222 affected_by_inner_viewport_bounds_delta_x);
223 data->set_affected_by_inner_viewport_bounds_delta_y(
224 affected_by_inner_viewport_bounds_delta_y);
225 data->set_affected_by_outer_viewport_bounds_delta_x(
226 affected_by_outer_viewport_bounds_delta_x);
227 data->set_affected_by_outer_viewport_bounds_delta_y(
228 affected_by_outer_viewport_bounds_delta_y);
229
230 data->set_in_subtree_of_page_scale_layer(in_subtree_of_page_scale_layer);
231 data->set_post_local_scale_factor(post_local_scale_factor);
232 data->set_local_maximum_animation_target_scale(
233 local_maximum_animation_target_scale);
234 data->set_local_starting_animation_scale(local_starting_animation_scale);
235 data->set_combined_maximum_animation_target_scale(
236 combined_maximum_animation_target_scale);
237 data->set_combined_starting_animation_scale(
238 combined_starting_animation_scale);
239
240 Vector2dFToProto(sublayer_scale, data->mutable_sublayer_scale());
241 ScrollOffsetToProto(scroll_offset, data->mutable_scroll_offset());
242 Vector2dFToProto(scroll_snap, data->mutable_scroll_snap());
243 Vector2dFToProto(source_offset, data->mutable_source_offset());
244 Vector2dFToProto(source_to_parent, data->mutable_source_to_parent());
245 }
246
247 void TransformNodeData::FromProtobuf(const proto::TreeNode& proto) {
248 CheckIsValidTreeNodeProto(proto, proto::TreeNode::Transform);
249
250 proto::TranformNodeData data = proto.transform_node_data();
251
252 pre_local = ProtoToTransform(data.pre_local());
253 local = ProtoToTransform(data.local());
254 post_local = ProtoToTransform(data.post_local());
255
256 to_parent = ProtoToTransform(data.to_parent());
257
258 to_target = ProtoToTransform(data.to_target());
259 from_target = ProtoToTransform(data.from_target());
260
261 to_screen = ProtoToTransform(data.to_screen());
262 from_screen = ProtoToTransform(data.from_screen());
263
264 target_id = data.target_id();
265 content_target_id = data.content_target_id();
266 source_node_id = data.source_node_id();
267
268 needs_local_transform_update = data.needs_local_transform_update();
269
270 is_invertible = data.is_invertible();
271 ancestors_are_invertible = data.ancestors_are_invertible();
272
273 is_animated = data.is_animated();
274 to_screen_is_animated = data.to_screen_is_animated();
275 has_only_translation_animations = data.has_only_translation_animations();
276 to_screen_has_scale_animation = data.to_screen_has_scale_animation();
277
278 flattens_inherited_transform = data.flattens_inherited_transform();
279 node_and_ancestors_are_flat = data.node_and_ancestors_are_flat();
280
281 node_and_ancestors_have_only_integer_translation =
282 data.node_and_ancestors_have_only_integer_translation();
283 scrolls = data.scrolls();
284 needs_sublayer_scale = data.needs_sublayer_scale();
285
286 affected_by_inner_viewport_bounds_delta_x =
287 data.affected_by_inner_viewport_bounds_delta_x();
288 affected_by_inner_viewport_bounds_delta_y =
289 data.affected_by_inner_viewport_bounds_delta_y();
290 affected_by_outer_viewport_bounds_delta_x =
291 data.affected_by_outer_viewport_bounds_delta_x();
292 affected_by_outer_viewport_bounds_delta_y =
293 data.affected_by_outer_viewport_bounds_delta_y();
294
295 in_subtree_of_page_scale_layer = data.in_subtree_of_page_scale_layer();
296 post_local_scale_factor = data.post_local_scale_factor();
297 local_maximum_animation_target_scale =
298 data.local_maximum_animation_target_scale();
299 local_starting_animation_scale = data.local_starting_animation_scale();
300 combined_maximum_animation_target_scale =
301 data.combined_maximum_animation_target_scale();
302 combined_starting_animation_scale = data.combined_starting_animation_scale();
303
304 sublayer_scale = ProtoToVector2dF(data.sublayer_scale());
305 scroll_offset = ProtoToScrollOffset(data.scroll_offset());
306 scroll_snap = ProtoToVector2dF(data.scroll_snap());
307 source_offset = ProtoToVector2dF(data.source_offset());
308 source_to_parent = ProtoToVector2dF(data.source_to_parent());
309 }
310
105 ClipNodeData::ClipNodeData() 311 ClipNodeData::ClipNodeData()
106 : transform_id(-1), 312 : transform_id(-1),
107 target_id(-1), 313 target_id(-1),
108 applies_local_clip(true), 314 applies_local_clip(true),
109 layer_clipping_uses_only_local_clip(false), 315 layer_clipping_uses_only_local_clip(false),
110 target_is_clipped(false), 316 target_is_clipped(false),
111 layers_are_clipped(false), 317 layers_are_clipped(false),
112 layers_are_clipped_when_surfaces_disabled(false), 318 layers_are_clipped_when_surfaces_disabled(false),
113 resets_clip(false) {} 319 resets_clip(false) {}
114 320
321 void ClipNodeData::ToProtobuf(proto::TreeNode* proto) const {
322 DCHECK(!proto->has_property_type());
323 proto->set_property_type(proto::TreeNode::Clip);
324
325 DCHECK(!proto->has_clip_node_data());
326 proto::ClipNodeData* data = proto->mutable_clip_node_data();
327 RectFToProto(clip, data->mutable_clip());
328 RectFToProto(combined_clip_in_target_space,
329 data->mutable_combined_clip_in_target_space());
330 RectFToProto(clip_in_target_space, data->mutable_clip_in_target_space());
331
332 data->set_transform_id(transform_id);
333 data->set_target_id(target_id);
334 data->set_applies_local_clip(applies_local_clip);
335 data->set_layer_clipping_uses_only_local_clip(
336 layer_clipping_uses_only_local_clip);
337 data->set_target_is_clipped(target_is_clipped);
338 data->set_layers_are_clipped(layers_are_clipped);
339 data->set_layers_are_clipped_when_surfaces_disabled(
340 layers_are_clipped_when_surfaces_disabled);
341 data->set_resets_clip(resets_clip);
342 }
343
344 void ClipNodeData::FromProtobuf(const proto::TreeNode& proto) {
345 CheckIsValidTreeNodeProto(proto, proto::TreeNode::Clip);
346
347 proto::ClipNodeData data = proto.clip_node_data();
348
349 clip = ProtoToRectF(data.clip());
350 combined_clip_in_target_space =
351 ProtoToRectF(data.combined_clip_in_target_space());
352 clip_in_target_space = ProtoToRectF(data.clip_in_target_space());
353
354 transform_id = data.transform_id();
355 target_id = data.target_id();
356 applies_local_clip = data.applies_local_clip();
357 layer_clipping_uses_only_local_clip =
358 data.layer_clipping_uses_only_local_clip();
359 target_is_clipped = data.target_is_clipped();
360 layers_are_clipped = data.layers_are_clipped();
361 layers_are_clipped_when_surfaces_disabled =
362 data.layers_are_clipped_when_surfaces_disabled();
363 resets_clip = data.resets_clip();
364 }
365
115 EffectNodeData::EffectNodeData() 366 EffectNodeData::EffectNodeData()
116 : opacity(1.f), 367 : opacity(1.f),
117 screen_space_opacity(1.f), 368 screen_space_opacity(1.f),
118 has_render_surface(false), 369 has_render_surface(false),
119 transform_id(0), 370 transform_id(0),
120 clip_id(0) {} 371 clip_id(0) {}
121 372
373 bool EffectNodeData::operator==(const EffectNodeData& other) const {
374 return opacity == other.opacity &&
375 screen_space_opacity == other.screen_space_opacity &&
376 has_render_surface == other.has_render_surface &&
377 transform_id == other.transform_id && clip_id == other.clip_id;
378 }
379
380 void EffectNodeData::ToProtobuf(proto::TreeNode* proto) const {
381 DCHECK(!proto->has_property_type());
382 proto->set_property_type(proto::TreeNode::Effect);
383
384 DCHECK(!proto->has_effect_node_data());
385 proto::EffectNodeData* data = proto->mutable_effect_node_data();
386 data->set_opacity(opacity);
387 data->set_screen_space_opacity(screen_space_opacity);
388 data->set_has_render_surface(has_render_surface);
389 data->set_transform_id(transform_id);
390 data->set_clip_id(clip_id);
391 }
392
393 void EffectNodeData::FromProtobuf(const proto::TreeNode& proto) {
394 CheckIsValidTreeNodeProto(proto, proto::TreeNode::Effect);
395
396 proto::EffectNodeData data = proto.effect_node_data();
397
398 opacity = data.opacity();
399 screen_space_opacity = data.screen_space_opacity();
400 has_render_surface = data.has_render_surface();
401 transform_id = data.transform_id();
402 clip_id = data.clip_id();
403 }
404
122 void TransformTree::clear() { 405 void TransformTree::clear() {
123 PropertyTree<TransformNode>::clear(); 406 PropertyTree<TransformNode>::clear();
124 407
125 nodes_affected_by_inner_viewport_bounds_delta_.clear(); 408 nodes_affected_by_inner_viewport_bounds_delta_.clear();
126 nodes_affected_by_outer_viewport_bounds_delta_.clear(); 409 nodes_affected_by_outer_viewport_bounds_delta_.clear();
127 } 410 }
128 411
129 bool TransformTree::ComputeTransform(int source_id, 412 bool TransformTree::ComputeTransform(int source_id,
130 int dest_id, 413 int dest_id,
131 gfx::Transform* transform) const { 414 gfx::Transform* transform) const {
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after
617 } 900 }
618 901
619 bool TransformTree::HasNodesAffectedByInnerViewportBoundsDelta() const { 902 bool TransformTree::HasNodesAffectedByInnerViewportBoundsDelta() const {
620 return !nodes_affected_by_inner_viewport_bounds_delta_.empty(); 903 return !nodes_affected_by_inner_viewport_bounds_delta_.empty();
621 } 904 }
622 905
623 bool TransformTree::HasNodesAffectedByOuterViewportBoundsDelta() const { 906 bool TransformTree::HasNodesAffectedByOuterViewportBoundsDelta() const {
624 return !nodes_affected_by_outer_viewport_bounds_delta_.empty(); 907 return !nodes_affected_by_outer_viewport_bounds_delta_.empty();
625 } 908 }
626 909
910 void TransformTree::ToProtobuf(proto::TransformTree* proto) const {
911 DCHECK(!proto->has_property_tree());
912 PropertyTree::ToProtobuf(proto->mutable_property_tree());
David Trainor- moved to gerrit 2015/11/11 16:43:16 I can't find this. Not added yet?
Khushal 2015/11/11 19:14:13 Added a comment for where it is.
913
914 proto->set_source_to_parent_updates_allowed(
915 source_to_parent_updates_allowed_);
916 proto->set_page_scale_factor(page_scale_factor_);
917 proto->set_device_scale_factor(device_scale_factor_);
918 proto->set_device_transform_scale_factor(device_transform_scale_factor_);
919
920 Vector2dFToProto(inner_viewport_bounds_delta_,
921 proto->mutable_inner_viewport_bounds_delta());
922 Vector2dFToProto(outer_viewport_bounds_delta_,
923 proto->mutable_outer_viewport_bounds_delta());
924
925 for (int i : nodes_affected_by_inner_viewport_bounds_delta_)
926 proto->add_nodes_affected_by_inner_viewport_bounds_delta(i);
927
928 for (int i : nodes_affected_by_outer_viewport_bounds_delta_)
929 proto->add_nodes_affected_by_outer_viewport_bounds_delta(i);
930 }
931
932 void TransformTree::FromProtobuf(const proto::TransformTree& proto) {
933 DCHECK(proto.has_property_tree());
934 PropertyTree::FromProtobuf(proto.property_tree());
935
936 source_to_parent_updates_allowed_ = proto.source_to_parent_updates_allowed();
937 page_scale_factor_ = proto.page_scale_factor();
938 device_scale_factor_ = proto.device_scale_factor();
939 device_transform_scale_factor_ = proto.device_transform_scale_factor();
940
941 inner_viewport_bounds_delta_ =
942 ProtoToVector2dF(proto.inner_viewport_bounds_delta());
943 outer_viewport_bounds_delta_ =
944 ProtoToVector2dF(proto.outer_viewport_bounds_delta());
945
946 DCHECK(nodes_affected_by_inner_viewport_bounds_delta_.empty());
947 for (int i = 0;
948 i < proto.nodes_affected_by_inner_viewport_bounds_delta_size(); i++) {
949 nodes_affected_by_inner_viewport_bounds_delta_.push_back(
950 proto.nodes_affected_by_inner_viewport_bounds_delta(i));
951 }
952
953 DCHECK(nodes_affected_by_outer_viewport_bounds_delta_.empty());
954 for (int i = 0;
955 i < proto.nodes_affected_by_outer_viewport_bounds_delta_size(); i++) {
956 nodes_affected_by_outer_viewport_bounds_delta_.push_back(
957 proto.nodes_affected_by_outer_viewport_bounds_delta(i));
958 }
959 }
960
627 void EffectTree::UpdateOpacities(int id) { 961 void EffectTree::UpdateOpacities(int id) {
628 EffectNode* node = Node(id); 962 EffectNode* node = Node(id);
629 node->data.screen_space_opacity = node->data.opacity; 963 node->data.screen_space_opacity = node->data.opacity;
630 964
631 EffectNode* parent_node = parent(node); 965 EffectNode* parent_node = parent(node);
632 if (parent_node) 966 if (parent_node)
633 node->data.screen_space_opacity *= parent_node->data.screen_space_opacity; 967 node->data.screen_space_opacity *= parent_node->data.screen_space_opacity;
634 } 968 }
635 969
636 void TransformTree::UpdateNodeAndAncestorsHaveIntegerTranslations( 970 void TransformTree::UpdateNodeAndAncestorsHaveIntegerTranslations(
(...skipping 16 matching lines...) Expand all
653 node->data.clip = viewport_rect; 987 node->data.clip = viewport_rect;
654 set_needs_update(true); 988 set_needs_update(true);
655 } 989 }
656 990
657 gfx::RectF ClipTree::ViewportClip() { 991 gfx::RectF ClipTree::ViewportClip() {
658 const unsigned long min_size = 1; 992 const unsigned long min_size = 1;
659 DCHECK_GT(size(), min_size); 993 DCHECK_GT(size(), min_size);
660 return Node(1)->data.clip; 994 return Node(1)->data.clip;
661 } 995 }
662 996
997 void ClipTree::ToProtobuf(proto::ClipTree* proto) const {
998 DCHECK(!proto->has_property_tree());
999 PropertyTree::ToProtobuf(proto->mutable_property_tree());
1000 }
1001
1002 void ClipTree::FromProtobuf(const proto::ClipTree& proto) {
1003 DCHECK(proto.has_property_tree());
1004 PropertyTree::FromProtobuf(proto.property_tree());
1005 }
1006
1007 void EffectTree::ToProtobuf(proto::EffectTree* proto) const {
1008 DCHECK(!proto->has_property_tree());
1009 PropertyTree::ToProtobuf(proto->mutable_property_tree());
1010 }
1011
1012 void EffectTree::FromProtobuf(const proto::EffectTree& proto) {
1013 DCHECK(proto.has_property_tree());
1014 PropertyTree::FromProtobuf(proto.property_tree());
1015 }
1016
663 PropertyTrees::PropertyTrees() 1017 PropertyTrees::PropertyTrees()
664 : needs_rebuild(true), 1018 : needs_rebuild(true),
665 non_root_surfaces_enabled(true), 1019 non_root_surfaces_enabled(true),
666 sequence_number(0) {} 1020 sequence_number(0) {}
667 1021
1022 void PropertyTrees::ToProtobuf(proto::PropertyTrees* proto) const {
1023 // TODO(khushalsagar): Add support for sending diffs when serializaing
1024 // property trees.
1025 transform_tree.ToProtobuf(proto->mutable_transform_tree());
1026 effect_tree.ToProtobuf(proto->mutable_effect_tree());
1027 clip_tree.ToProtobuf(proto->mutable_clip_tree());
1028 proto->set_needs_rebuild(needs_rebuild);
1029 proto->set_non_root_surfaces_enabled(non_root_surfaces_enabled);
1030
1031 // TODO(khushalsagar): Consider using the sequence number to decide if
1032 // property trees need to be serialized again for a commit.
1033 proto->set_sequence_number(sequence_number);
1034 }
1035
1036 // static
1037 PropertyTrees PropertyTrees::CreateFromProtobuf(
1038 const proto::PropertyTrees& proto) {
1039 PropertyTrees property_trees;
1040
1041 property_trees.transform_tree.FromProtobuf(proto.transform_tree());
1042 property_trees.effect_tree.FromProtobuf(proto.effect_tree());
1043 property_trees.clip_tree.FromProtobuf(proto.clip_tree());
1044
1045 property_trees.needs_rebuild = proto.needs_rebuild();
1046 property_trees.non_root_surfaces_enabled = proto.non_root_surfaces_enabled();
1047 property_trees.sequence_number = proto.sequence_number();
1048
1049 return property_trees;
1050 }
1051
668 } // namespace cc 1052 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698