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( | |
|
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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |