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 <stddef.h> | 5 #include <stddef.h> |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
431 data.layers_are_clipped_when_surfaces_disabled(); | 431 data.layers_are_clipped_when_surfaces_disabled(); |
432 resets_clip = data.resets_clip(); | 432 resets_clip = data.resets_clip(); |
433 } | 433 } |
434 | 434 |
435 EffectNodeData::EffectNodeData() | 435 EffectNodeData::EffectNodeData() |
436 : opacity(1.f), | 436 : opacity(1.f), |
437 screen_space_opacity(1.f), | 437 screen_space_opacity(1.f), |
438 has_render_surface(false), | 438 has_render_surface(false), |
439 has_copy_request(false), | 439 has_copy_request(false), |
440 has_background_filters(false), | 440 has_background_filters(false), |
| 441 node_or_ancestor_has_background_filters(false), |
| 442 to_screen_opacity_is_animated(false), |
| 443 hidden_by_backface_visibility(false), |
| 444 double_sided(false), |
441 is_drawn(true), | 445 is_drawn(true), |
442 has_animated_opacity(false), | 446 has_animated_opacity(false), |
443 effect_changed(false), | 447 effect_changed(false), |
444 num_copy_requests_in_subtree(0), | 448 num_copy_requests_in_subtree(0), |
445 transform_id(0), | 449 transform_id(0), |
446 clip_id(0), | 450 clip_id(0), |
447 target_id(0) {} | 451 target_id(0) {} |
448 | 452 |
449 EffectNodeData::EffectNodeData(const EffectNodeData& other) = default; | 453 EffectNodeData::EffectNodeData(const EffectNodeData& other) = default; |
450 | 454 |
451 bool EffectNodeData::operator==(const EffectNodeData& other) const { | 455 bool EffectNodeData::operator==(const EffectNodeData& other) const { |
452 return opacity == other.opacity && | 456 return opacity == other.opacity && |
453 screen_space_opacity == other.screen_space_opacity && | 457 screen_space_opacity == other.screen_space_opacity && |
454 has_render_surface == other.has_render_surface && | 458 has_render_surface == other.has_render_surface && |
455 has_copy_request == other.has_copy_request && | 459 has_copy_request == other.has_copy_request && |
456 has_background_filters == other.has_background_filters && | 460 has_background_filters == other.has_background_filters && |
457 is_drawn == other.is_drawn && | 461 node_or_ancestor_has_background_filters == |
| 462 other.node_or_ancestor_has_background_filters && |
| 463 to_screen_opacity_is_animated == other.to_screen_opacity_is_animated && |
| 464 hidden_by_backface_visibility == other.hidden_by_backface_visibility && |
| 465 double_sided == other.double_sided && is_drawn == other.is_drawn && |
458 has_animated_opacity == other.has_animated_opacity && | 466 has_animated_opacity == other.has_animated_opacity && |
459 effect_changed == other.effect_changed && | 467 effect_changed == other.effect_changed && |
460 num_copy_requests_in_subtree == other.num_copy_requests_in_subtree && | 468 num_copy_requests_in_subtree == other.num_copy_requests_in_subtree && |
461 transform_id == other.transform_id && clip_id == other.clip_id && | 469 transform_id == other.transform_id && clip_id == other.clip_id && |
462 target_id == other.target_id; | 470 target_id == other.target_id; |
463 } | 471 } |
464 | 472 |
465 void EffectNodeData::ToProtobuf(proto::TreeNode* proto) const { | 473 void EffectNodeData::ToProtobuf(proto::TreeNode* proto) const { |
466 DCHECK(!proto->has_effect_node_data()); | 474 DCHECK(!proto->has_effect_node_data()); |
467 proto::EffectNodeData* data = proto->mutable_effect_node_data(); | 475 proto::EffectNodeData* data = proto->mutable_effect_node_data(); |
468 data->set_opacity(opacity); | 476 data->set_opacity(opacity); |
469 data->set_screen_space_opacity(screen_space_opacity); | 477 data->set_screen_space_opacity(screen_space_opacity); |
470 data->set_has_render_surface(has_render_surface); | 478 data->set_has_render_surface(has_render_surface); |
471 data->set_has_copy_request(has_copy_request); | 479 data->set_has_copy_request(has_copy_request); |
472 data->set_has_background_filters(has_background_filters); | 480 data->set_has_background_filters(has_background_filters); |
| 481 data->set_node_or_ancestor_has_background_filters( |
| 482 node_or_ancestor_has_background_filters); |
| 483 data->set_to_screen_opacity_is_animated(to_screen_opacity_is_animated); |
| 484 data->set_hidden_by_backface_visibility(hidden_by_backface_visibility); |
| 485 data->set_double_sided(double_sided); |
473 data->set_is_drawn(is_drawn); | 486 data->set_is_drawn(is_drawn); |
474 data->set_has_animated_opacity(has_animated_opacity); | 487 data->set_has_animated_opacity(has_animated_opacity); |
475 data->set_effect_changed(effect_changed); | 488 data->set_effect_changed(effect_changed); |
476 data->set_num_copy_requests_in_subtree(num_copy_requests_in_subtree); | 489 data->set_num_copy_requests_in_subtree(num_copy_requests_in_subtree); |
477 data->set_transform_id(transform_id); | 490 data->set_transform_id(transform_id); |
478 data->set_clip_id(clip_id); | 491 data->set_clip_id(clip_id); |
479 data->set_target_id(target_id); | 492 data->set_target_id(target_id); |
480 } | 493 } |
481 | 494 |
482 void EffectNodeData::FromProtobuf(const proto::TreeNode& proto) { | 495 void EffectNodeData::FromProtobuf(const proto::TreeNode& proto) { |
483 DCHECK(proto.has_effect_node_data()); | 496 DCHECK(proto.has_effect_node_data()); |
484 const proto::EffectNodeData& data = proto.effect_node_data(); | 497 const proto::EffectNodeData& data = proto.effect_node_data(); |
485 | 498 |
486 opacity = data.opacity(); | 499 opacity = data.opacity(); |
487 screen_space_opacity = data.screen_space_opacity(); | 500 screen_space_opacity = data.screen_space_opacity(); |
488 has_render_surface = data.has_render_surface(); | 501 has_render_surface = data.has_render_surface(); |
489 has_copy_request = data.has_copy_request(); | 502 has_copy_request = data.has_copy_request(); |
490 has_background_filters = data.has_background_filters(); | 503 has_background_filters = data.has_background_filters(); |
| 504 node_or_ancestor_has_background_filters = |
| 505 data.node_or_ancestor_has_background_filters(); |
| 506 to_screen_opacity_is_animated = data.to_screen_opacity_is_animated(); |
| 507 hidden_by_backface_visibility = data.hidden_by_backface_visibility(); |
| 508 double_sided = data.double_sided(); |
491 is_drawn = data.is_drawn(); | 509 is_drawn = data.is_drawn(); |
492 has_animated_opacity = data.has_animated_opacity(); | 510 has_animated_opacity = data.has_animated_opacity(); |
493 effect_changed = data.effect_changed(); | 511 effect_changed = data.effect_changed(); |
494 num_copy_requests_in_subtree = data.num_copy_requests_in_subtree(); | 512 num_copy_requests_in_subtree = data.num_copy_requests_in_subtree(); |
495 transform_id = data.transform_id(); | 513 transform_id = data.transform_id(); |
496 clip_id = data.clip_id(); | 514 clip_id = data.clip_id(); |
497 target_id = data.target_id(); | 515 target_id = data.target_id(); |
498 } | 516 } |
499 | 517 |
500 ScrollNodeData::ScrollNodeData() | 518 ScrollNodeData::ScrollNodeData() |
(...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1202 node->data.is_drawn = true; | 1220 node->data.is_drawn = true; |
1203 } | 1221 } |
1204 | 1222 |
1205 void EffectTree::UpdateEffectChanged(EffectNode* node, | 1223 void EffectTree::UpdateEffectChanged(EffectNode* node, |
1206 EffectNode* parent_node) { | 1224 EffectNode* parent_node) { |
1207 if (parent_node && parent_node->data.effect_changed) { | 1225 if (parent_node && parent_node->data.effect_changed) { |
1208 node->data.effect_changed = true; | 1226 node->data.effect_changed = true; |
1209 } | 1227 } |
1210 } | 1228 } |
1211 | 1229 |
| 1230 void EffectTree::UpdateBackfaceVisibility(EffectNode* node, |
| 1231 EffectNode* parent_node) { |
| 1232 if (!parent_node) { |
| 1233 node->data.hidden_by_backface_visibility = false; |
| 1234 return; |
| 1235 } |
| 1236 if (parent_node->data.hidden_by_backface_visibility) { |
| 1237 node->data.hidden_by_backface_visibility = true; |
| 1238 return; |
| 1239 } |
| 1240 |
| 1241 TransformTree& transform_tree = property_trees()->transform_tree; |
| 1242 if (node->data.has_render_surface && !node->data.double_sided) { |
| 1243 TransformNode* transform_node = |
| 1244 transform_tree.Node(node->data.transform_id); |
| 1245 if (transform_node->data.is_invertible && |
| 1246 transform_node->data.ancestors_are_invertible) { |
| 1247 if (transform_node->data.sorting_context_id) { |
| 1248 const TransformNode* parent_transform_node = |
| 1249 transform_tree.parent(transform_node); |
| 1250 if (parent_transform_node && |
| 1251 parent_transform_node->data.sorting_context_id == |
| 1252 transform_node->data.sorting_context_id) { |
| 1253 gfx::Transform surface_draw_transform; |
| 1254 transform_tree.ComputeTransform(transform_node->id, |
| 1255 transform_node->data.target_id, |
| 1256 &surface_draw_transform); |
| 1257 node->data.hidden_by_backface_visibility = |
| 1258 surface_draw_transform.IsBackFaceVisible(); |
| 1259 } else { |
| 1260 node->data.hidden_by_backface_visibility = |
| 1261 transform_node->data.local.IsBackFaceVisible(); |
| 1262 } |
| 1263 return; |
| 1264 } |
| 1265 } |
| 1266 } |
| 1267 node->data.hidden_by_backface_visibility = false; |
| 1268 } |
| 1269 |
1212 void EffectTree::UpdateEffects(int id) { | 1270 void EffectTree::UpdateEffects(int id) { |
1213 EffectNode* node = Node(id); | 1271 EffectNode* node = Node(id); |
1214 EffectNode* parent_node = parent(node); | 1272 EffectNode* parent_node = parent(node); |
1215 | 1273 |
1216 UpdateOpacities(node, parent_node); | 1274 UpdateOpacities(node, parent_node); |
1217 UpdateIsDrawn(node, parent_node); | 1275 UpdateIsDrawn(node, parent_node); |
1218 UpdateEffectChanged(node, parent_node); | 1276 UpdateEffectChanged(node, parent_node); |
| 1277 UpdateBackfaceVisibility(node, parent_node); |
1219 } | 1278 } |
1220 | 1279 |
1221 void EffectTree::ClearCopyRequests() { | 1280 void EffectTree::ClearCopyRequests() { |
1222 for (auto& node : nodes()) { | 1281 for (auto& node : nodes()) { |
1223 node.data.num_copy_requests_in_subtree = 0; | 1282 node.data.num_copy_requests_in_subtree = 0; |
1224 node.data.has_copy_request = false; | 1283 node.data.has_copy_request = false; |
1225 } | 1284 } |
1226 set_needs_update(true); | 1285 set_needs_update(true); |
1227 } | 1286 } |
1228 | 1287 |
(...skipping 629 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1858 break; | 1917 break; |
1859 case ALL_TREES: | 1918 case ALL_TREES: |
1860 transform_tree.ResetChangeTracking(); | 1919 transform_tree.ResetChangeTracking(); |
1861 effect_tree.ResetChangeTracking(); | 1920 effect_tree.ResetChangeTracking(); |
1862 } | 1921 } |
1863 changed = false; | 1922 changed = false; |
1864 full_tree_damaged = false; | 1923 full_tree_damaged = false; |
1865 } | 1924 } |
1866 | 1925 |
1867 } // namespace cc | 1926 } // namespace cc |
OLD | NEW |