Chromium Code Reviews| 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 <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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |