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

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

Powered by Google App Engine
This is Rietveld 408576698