| 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 "cc/trees/draw_property_utils.h" | 5 #include "cc/trees/draw_property_utils.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 423 TransformToScreenIsKnown(backface_test_layer, tree) && | 423 TransformToScreenIsKnown(backface_test_layer, tree) && |
| 424 IsLayerBackFaceVisible(backface_test_layer, tree)) | 424 IsLayerBackFaceVisible(backface_test_layer, tree)) |
| 425 return true; | 425 return true; |
| 426 | 426 |
| 427 return false; | 427 return false; |
| 428 } | 428 } |
| 429 | 429 |
| 430 template <typename LayerType> | 430 template <typename LayerType> |
| 431 void FindLayersThatNeedUpdates( | 431 void FindLayersThatNeedUpdates( |
| 432 LayerType* layer, | 432 LayerType* layer, |
| 433 const TransformTree& tree, | 433 const TransformTree& transform_tree, |
| 434 bool subtree_is_visible_from_ancestor, | 434 const EffectTree& effect_tree, |
| 435 typename LayerType::LayerListType* update_layer_list, | 435 typename LayerType::LayerListType* update_layer_list, |
| 436 std::vector<LayerType*>* visible_layer_list) { | 436 std::vector<LayerType*>* visible_layer_list) { |
| 437 DCHECK_GE(layer->effect_tree_index(), 0); |
| 437 bool layer_is_drawn = | 438 bool layer_is_drawn = |
| 438 layer->HasCopyRequest() || | 439 effect_tree.Node(layer->effect_tree_index())->data.is_drawn; |
| 439 (subtree_is_visible_from_ancestor && !layer->hide_layer_and_subtree()); | |
| 440 | 440 |
| 441 if (layer->parent() && SubtreeShouldBeSkipped(layer, layer_is_drawn, tree)) | 441 if (layer->parent() && |
| 442 SubtreeShouldBeSkipped(layer, layer_is_drawn, transform_tree)) |
| 442 return; | 443 return; |
| 443 | 444 |
| 444 if (!LayerShouldBeSkipped(layer, layer_is_drawn, tree)) { | 445 if (!LayerShouldBeSkipped(layer, layer_is_drawn, transform_tree)) { |
| 445 visible_layer_list->push_back(layer); | 446 visible_layer_list->push_back(layer); |
| 446 update_layer_list->push_back(layer); | 447 update_layer_list->push_back(layer); |
| 447 } | 448 } |
| 448 | 449 |
| 449 // Append mask layers to the update layer list. They don't have valid visible | 450 // Append mask layers to the update layer list. They don't have valid visible |
| 450 // rects, so need to get added after the above calculation. Replica layers | 451 // rects, so need to get added after the above calculation. Replica layers |
| 451 // don't need to be updated. | 452 // don't need to be updated. |
| 452 if (LayerType* mask_layer = layer->mask_layer()) | 453 if (LayerType* mask_layer = layer->mask_layer()) |
| 453 update_layer_list->push_back(mask_layer); | 454 update_layer_list->push_back(mask_layer); |
| 454 if (LayerType* replica_layer = layer->replica_layer()) { | 455 if (LayerType* replica_layer = layer->replica_layer()) { |
| 455 if (LayerType* mask_layer = replica_layer->mask_layer()) | 456 if (LayerType* mask_layer = replica_layer->mask_layer()) |
| 456 update_layer_list->push_back(mask_layer); | 457 update_layer_list->push_back(mask_layer); |
| 457 } | 458 } |
| 458 | 459 |
| 459 for (size_t i = 0; i < layer->children().size(); ++i) { | 460 for (size_t i = 0; i < layer->children().size(); ++i) { |
| 460 FindLayersThatNeedUpdates(layer->child_at(i), tree, layer_is_drawn, | 461 FindLayersThatNeedUpdates(layer->child_at(i), transform_tree, effect_tree, |
| 461 update_layer_list, visible_layer_list); | 462 update_layer_list, visible_layer_list); |
| 462 } | 463 } |
| 463 } | 464 } |
| 464 | 465 |
| 465 template <typename LayerType> | 466 template <typename LayerType> |
| 466 void UpdateRenderSurfacesWithEffectTreeInternal(EffectTree* effect_tree, | 467 void UpdateRenderSurfacesWithEffectTreeInternal(EffectTree* effect_tree, |
| 467 LayerType* layer) { | 468 LayerType* layer) { |
| 468 EffectNode* node = effect_tree->Node(layer->effect_tree_index()); | 469 EffectNode* node = effect_tree->Node(layer->effect_tree_index()); |
| 469 | 470 |
| 470 if (node->owner_id == layer->id() && node->data.has_render_surface) | 471 if (node->owner_id == layer->id() && node->data.has_render_surface) |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 672 property_trees->non_root_surfaces_enabled = can_render_to_separate_surface; | 673 property_trees->non_root_surfaces_enabled = can_render_to_separate_surface; |
| 673 property_trees->transform_tree.set_needs_update(true); | 674 property_trees->transform_tree.set_needs_update(true); |
| 674 } | 675 } |
| 675 if (property_trees->transform_tree.needs_update()) | 676 if (property_trees->transform_tree.needs_update()) |
| 676 property_trees->clip_tree.set_needs_update(true); | 677 property_trees->clip_tree.set_needs_update(true); |
| 677 ComputeTransforms(&property_trees->transform_tree); | 678 ComputeTransforms(&property_trees->transform_tree); |
| 678 ComputeClips(&property_trees->clip_tree, property_trees->transform_tree, | 679 ComputeClips(&property_trees->clip_tree, property_trees->transform_tree, |
| 679 can_render_to_separate_surface); | 680 can_render_to_separate_surface); |
| 680 ComputeEffects(&property_trees->effect_tree); | 681 ComputeEffects(&property_trees->effect_tree); |
| 681 | 682 |
| 682 const bool subtree_is_visible_from_ancestor = true; | |
| 683 FindLayersThatNeedUpdates(root_layer, property_trees->transform_tree, | 683 FindLayersThatNeedUpdates(root_layer, property_trees->transform_tree, |
| 684 subtree_is_visible_from_ancestor, update_layer_list, | 684 property_trees->effect_tree, update_layer_list, |
| 685 visible_layer_list); | 685 visible_layer_list); |
| 686 CalculateVisibleRects<LayerType>( | 686 CalculateVisibleRects<LayerType>( |
| 687 *visible_layer_list, property_trees->clip_tree, | 687 *visible_layer_list, property_trees->clip_tree, |
| 688 property_trees->transform_tree, can_render_to_separate_surface); | 688 property_trees->transform_tree, can_render_to_separate_surface); |
| 689 } | 689 } |
| 690 | 690 |
| 691 void BuildPropertyTreesAndComputeVisibleRects( | 691 void BuildPropertyTreesAndComputeVisibleRects( |
| 692 Layer* root_layer, | 692 Layer* root_layer, |
| 693 const Layer* page_scale_layer, | 693 const Layer* page_scale_layer, |
| 694 const Layer* inner_viewport_scroll_layer, | 694 const Layer* inner_viewport_scroll_layer, |
| (...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1178 | 1178 |
| 1179 void UpdateElasticOverscrollInPropertyTrees( | 1179 void UpdateElasticOverscrollInPropertyTrees( |
| 1180 PropertyTrees* property_trees, | 1180 PropertyTrees* property_trees, |
| 1181 const Layer* overscroll_elasticity_layer, | 1181 const Layer* overscroll_elasticity_layer, |
| 1182 const gfx::Vector2dF& elastic_overscroll) { | 1182 const gfx::Vector2dF& elastic_overscroll) { |
| 1183 UpdateElasticOverscrollInPropertyTreesInternal( | 1183 UpdateElasticOverscrollInPropertyTreesInternal( |
| 1184 property_trees, overscroll_elasticity_layer, elastic_overscroll); | 1184 property_trees, overscroll_elasticity_layer, elastic_overscroll); |
| 1185 } | 1185 } |
| 1186 | 1186 |
| 1187 } // namespace cc | 1187 } // namespace cc |
| OLD | NEW |