| 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 } | 423 } |
| 424 | 424 |
| 425 template <typename LayerType> | 425 template <typename LayerType> |
| 426 void UpdateRenderSurfaceForLayer(EffectTree* effect_tree, | 426 void UpdateRenderSurfaceForLayer(EffectTree* effect_tree, |
| 427 bool non_root_surfaces_enabled, | 427 bool non_root_surfaces_enabled, |
| 428 LayerType* layer) { | 428 LayerType* layer) { |
| 429 if (!non_root_surfaces_enabled) { | 429 if (!non_root_surfaces_enabled) { |
| 430 layer->SetHasRenderSurface(IsRootLayer(layer)); | 430 layer->SetHasRenderSurface(IsRootLayer(layer)); |
| 431 return; | 431 return; |
| 432 } | 432 } |
| 433 |
| 433 EffectNode* node = effect_tree->Node(layer->effect_tree_index()); | 434 EffectNode* node = effect_tree->Node(layer->effect_tree_index()); |
| 434 | 435 |
| 435 if (node->owner_id == layer->id() && node->data.has_render_surface) | 436 if (node->owner_id == layer->id() && node->data.has_render_surface) |
| 436 layer->SetHasRenderSurface(true); | 437 layer->SetHasRenderSurface(true); |
| 437 else | 438 else |
| 438 layer->SetHasRenderSurface(false); | 439 layer->SetHasRenderSurface(false); |
| 439 } | 440 } |
| 440 | 441 |
| 441 void UpdateRenderSurfacesForLayersRecursive(EffectTree* effect_tree, | 442 void UpdateRenderSurfacesForLayersRecursive(EffectTree* effect_tree, |
| 442 Layer* layer) { | 443 Layer* layer) { |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 594 } | 595 } |
| 595 | 596 |
| 596 void ComputeTransforms(TransformTree* transform_tree) { | 597 void ComputeTransforms(TransformTree* transform_tree) { |
| 597 if (!transform_tree->needs_update()) | 598 if (!transform_tree->needs_update()) |
| 598 return; | 599 return; |
| 599 for (int i = 1; i < static_cast<int>(transform_tree->size()); ++i) | 600 for (int i = 1; i < static_cast<int>(transform_tree->size()); ++i) |
| 600 transform_tree->UpdateTransforms(i); | 601 transform_tree->UpdateTransforms(i); |
| 601 transform_tree->set_needs_update(false); | 602 transform_tree->set_needs_update(false); |
| 602 } | 603 } |
| 603 | 604 |
| 605 void UpdateRenderTarget(EffectTree* effect_tree, |
| 606 bool can_render_to_separate_surface) { |
| 607 for (int i = 1; i < static_cast<int>(effect_tree->size()); ++i) { |
| 608 EffectNode* node = effect_tree->Node(i); |
| 609 if (i == 1) { |
| 610 // Render target on the first effect node is root. |
| 611 node->data.target_id = 0; |
| 612 } else if (!can_render_to_separate_surface) { |
| 613 node->data.target_id = 1; |
| 614 } else if (effect_tree->parent(node)->data.has_render_surface) { |
| 615 node->data.target_id = node->parent_id; |
| 616 } else { |
| 617 node->data.target_id = effect_tree->parent(node)->data.target_id; |
| 618 } |
| 619 } |
| 620 } |
| 621 |
| 604 void ComputeEffects(EffectTree* effect_tree) { | 622 void ComputeEffects(EffectTree* effect_tree) { |
| 605 if (!effect_tree->needs_update()) | 623 if (!effect_tree->needs_update()) |
| 606 return; | 624 return; |
| 607 for (int i = 1; i < static_cast<int>(effect_tree->size()); ++i) | 625 for (int i = 1; i < static_cast<int>(effect_tree->size()); ++i) |
| 608 effect_tree->UpdateEffects(i); | 626 effect_tree->UpdateEffects(i); |
| 609 effect_tree->set_needs_update(false); | 627 effect_tree->set_needs_update(false); |
| 610 } | 628 } |
| 611 | 629 |
| 612 static void ComputeVisibleRectsInternal( | 630 static void ComputeVisibleRectsInternal( |
| 613 LayerImpl* root_layer, | 631 LayerImpl* root_layer, |
| 614 PropertyTrees* property_trees, | 632 PropertyTrees* property_trees, |
| 615 bool can_render_to_separate_surface, | 633 bool can_render_to_separate_surface, |
| 616 LayerImplList* update_layer_list, | 634 LayerImplList* update_layer_list, |
| 617 std::vector<LayerImpl*>* visible_layer_list) { | 635 std::vector<LayerImpl*>* visible_layer_list) { |
| 618 if (property_trees->non_root_surfaces_enabled != | 636 if (property_trees->non_root_surfaces_enabled != |
| 619 can_render_to_separate_surface) { | 637 can_render_to_separate_surface) { |
| 620 property_trees->non_root_surfaces_enabled = can_render_to_separate_surface; | 638 property_trees->non_root_surfaces_enabled = can_render_to_separate_surface; |
| 621 property_trees->transform_tree.set_needs_update(true); | 639 property_trees->transform_tree.set_needs_update(true); |
| 622 } | 640 } |
| 623 if (property_trees->transform_tree.needs_update()) | 641 if (property_trees->transform_tree.needs_update()) |
| 624 property_trees->clip_tree.set_needs_update(true); | 642 property_trees->clip_tree.set_needs_update(true); |
| 643 UpdateRenderTarget(&property_trees->effect_tree, |
| 644 property_trees->non_root_surfaces_enabled); |
| 625 ComputeTransforms(&property_trees->transform_tree); | 645 ComputeTransforms(&property_trees->transform_tree); |
| 626 ComputeClips(&property_trees->clip_tree, property_trees->transform_tree, | 646 ComputeClips(&property_trees->clip_tree, property_trees->transform_tree, |
| 627 can_render_to_separate_surface); | 647 can_render_to_separate_surface); |
| 628 ComputeEffects(&property_trees->effect_tree); | 648 ComputeEffects(&property_trees->effect_tree); |
| 629 | 649 |
| 630 FindLayersThatNeedUpdates(root_layer, property_trees->transform_tree, | 650 FindLayersThatNeedUpdates(root_layer, property_trees->transform_tree, |
| 631 property_trees->effect_tree, update_layer_list, | 651 property_trees->effect_tree, update_layer_list, |
| 632 visible_layer_list); | 652 visible_layer_list); |
| 633 CalculateVisibleRects<LayerImpl>( | 653 CalculateVisibleRects<LayerImpl>( |
| 634 *visible_layer_list, property_trees->clip_tree, | 654 *visible_layer_list, property_trees->clip_tree, |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 716 can_render_to_separate_surface, visible_layer_list); | 736 can_render_to_separate_surface, visible_layer_list); |
| 717 } | 737 } |
| 718 | 738 |
| 719 void ComputeVisibleRects(LayerImpl* root_layer, | 739 void ComputeVisibleRects(LayerImpl* root_layer, |
| 720 PropertyTrees* property_trees, | 740 PropertyTrees* property_trees, |
| 721 bool can_render_to_separate_surface, | 741 bool can_render_to_separate_surface, |
| 722 LayerImplList* visible_layer_list) { | 742 LayerImplList* visible_layer_list) { |
| 723 for (auto* layer : *root_layer->layer_tree_impl()) { | 743 for (auto* layer : *root_layer->layer_tree_impl()) { |
| 724 UpdateRenderSurfaceForLayer(&property_trees->effect_tree, | 744 UpdateRenderSurfaceForLayer(&property_trees->effect_tree, |
| 725 can_render_to_separate_surface, layer); | 745 can_render_to_separate_surface, layer); |
| 746 EffectNode* node = |
| 747 property_trees->effect_tree.Node(layer->effect_tree_index()); |
| 748 if (node->owner_id == layer->id()) |
| 749 node->data.render_surface = layer->render_surface(); |
| 726 #if DCHECK_IS_ON() | 750 #if DCHECK_IS_ON() |
| 727 if (can_render_to_separate_surface) | 751 if (can_render_to_separate_surface) |
| 728 ValidateRenderSurfaceForLayer(layer); | 752 ValidateRenderSurfaceForLayer(layer); |
| 729 #endif | 753 #endif |
| 730 } | 754 } |
| 731 LayerImplList update_layer_list; | 755 LayerImplList update_layer_list; |
| 732 ComputeVisibleRectsInternal(root_layer, property_trees, | 756 ComputeVisibleRectsInternal(root_layer, property_trees, |
| 733 can_render_to_separate_surface, | 757 can_render_to_separate_surface, |
| 734 &update_layer_list, visible_layer_list); | 758 &update_layer_list, visible_layer_list); |
| 735 } | 759 } |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 903 const TransformTree& tree) { | 927 const TransformTree& tree) { |
| 904 return ScreenSpaceTransformInternal(layer, | 928 return ScreenSpaceTransformInternal(layer, |
| 905 tree.Node(layer->transform_tree_index())); | 929 tree.Node(layer->transform_tree_index())); |
| 906 } | 930 } |
| 907 | 931 |
| 908 static float LayerDrawOpacity(const LayerImpl* layer, const EffectTree& tree) { | 932 static float LayerDrawOpacity(const LayerImpl* layer, const EffectTree& tree) { |
| 909 if (!layer->render_target()) | 933 if (!layer->render_target()) |
| 910 return 0.f; | 934 return 0.f; |
| 911 | 935 |
| 912 const EffectNode* target_node = | 936 const EffectNode* target_node = |
| 913 tree.Node(layer->render_target()->effect_tree_index()); | 937 tree.Node(layer->render_target()->EffectTreeIndex()); |
| 914 const EffectNode* node = tree.Node(layer->effect_tree_index()); | 938 const EffectNode* node = tree.Node(layer->effect_tree_index()); |
| 915 if (node == target_node) | 939 if (node == target_node) |
| 916 return 1.f; | 940 return 1.f; |
| 917 | 941 |
| 918 float draw_opacity = 1.f; | 942 float draw_opacity = 1.f; |
| 919 while (node != target_node) { | 943 while (node != target_node) { |
| 920 draw_opacity *= node->data.opacity; | 944 draw_opacity *= node->data.opacity; |
| 921 node = tree.parent(node); | 945 node = tree.parent(node); |
| 922 } | 946 } |
| 923 return draw_opacity; | 947 return draw_opacity; |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1165 void UpdateElasticOverscroll(PropertyTrees* property_trees, | 1189 void UpdateElasticOverscroll(PropertyTrees* property_trees, |
| 1166 const Layer* overscroll_elasticity_layer, | 1190 const Layer* overscroll_elasticity_layer, |
| 1167 const gfx::Vector2dF& elastic_overscroll) { | 1191 const gfx::Vector2dF& elastic_overscroll) { |
| 1168 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, | 1192 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, |
| 1169 elastic_overscroll); | 1193 elastic_overscroll); |
| 1170 } | 1194 } |
| 1171 | 1195 |
| 1172 } // namespace draw_property_utils | 1196 } // namespace draw_property_utils |
| 1173 | 1197 |
| 1174 } // namespace cc | 1198 } // namespace cc |
| OLD | NEW |