Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(748)

Side by Side Diff: cc/trees/draw_property_utils.cc

Issue 1868003002: cc: Move RenderTarget Information to Effect Tree (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/trees/damage_tracker_unittest.cc ('k') | cc/trees/layer_tree_host_common.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 } 385 }
386 386
387 template <typename LayerType> 387 template <typename LayerType>
388 void UpdateRenderSurfaceForLayer(EffectTree* effect_tree, 388 void UpdateRenderSurfaceForLayer(EffectTree* effect_tree,
389 bool non_root_surfaces_enabled, 389 bool non_root_surfaces_enabled,
390 LayerType* layer) { 390 LayerType* layer) {
391 if (!non_root_surfaces_enabled) { 391 if (!non_root_surfaces_enabled) {
392 layer->SetHasRenderSurface(IsRootLayer(layer)); 392 layer->SetHasRenderSurface(IsRootLayer(layer));
393 return; 393 return;
394 } 394 }
395
395 EffectNode* node = effect_tree->Node(layer->effect_tree_index()); 396 EffectNode* node = effect_tree->Node(layer->effect_tree_index());
396 397
397 if (node->owner_id == layer->id() && node->data.has_render_surface) 398 if (node->owner_id == layer->id() && node->data.has_render_surface)
398 layer->SetHasRenderSurface(true); 399 layer->SetHasRenderSurface(true);
399 else 400 else
400 layer->SetHasRenderSurface(false); 401 layer->SetHasRenderSurface(false);
401 } 402 }
402 403
403 void UpdateRenderSurfacesForLayersRecursive(EffectTree* effect_tree, 404 void UpdateRenderSurfacesForLayersRecursive(EffectTree* effect_tree,
404 Layer* layer) { 405 Layer* layer) {
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
680 } 681 }
681 682
682 void ComputeTransforms(TransformTree* transform_tree) { 683 void ComputeTransforms(TransformTree* transform_tree) {
683 if (!transform_tree->needs_update()) 684 if (!transform_tree->needs_update())
684 return; 685 return;
685 for (int i = 1; i < static_cast<int>(transform_tree->size()); ++i) 686 for (int i = 1; i < static_cast<int>(transform_tree->size()); ++i)
686 transform_tree->UpdateTransforms(i); 687 transform_tree->UpdateTransforms(i);
687 transform_tree->set_needs_update(false); 688 transform_tree->set_needs_update(false);
688 } 689 }
689 690
691 void UpdateRenderTarget(EffectTree* effect_tree,
692 bool can_render_to_separate_surface) {
693 for (int i = 1; i < static_cast<int>(effect_tree->size()); ++i) {
694 EffectNode* node = effect_tree->Node(i);
695 if (i == 1) {
696 // Render target on the first effect node is root.
697 node->data.target_id = 0;
698 } else if (!can_render_to_separate_surface) {
699 node->data.target_id = 1;
700 } else if (effect_tree->parent(node)->data.has_render_surface) {
701 node->data.target_id = node->parent_id;
702 } else {
703 node->data.target_id = effect_tree->parent(node)->data.target_id;
704 }
705 }
706 }
707
690 void ComputeEffects(EffectTree* effect_tree) { 708 void ComputeEffects(EffectTree* effect_tree) {
691 if (!effect_tree->needs_update()) 709 if (!effect_tree->needs_update())
692 return; 710 return;
693 for (int i = 1; i < static_cast<int>(effect_tree->size()); ++i) 711 for (int i = 1; i < static_cast<int>(effect_tree->size()); ++i)
694 effect_tree->UpdateEffects(i); 712 effect_tree->UpdateEffects(i);
695 effect_tree->set_needs_update(false); 713 effect_tree->set_needs_update(false);
696 } 714 }
697 715
698 static void ComputeVisibleRectsInternal( 716 static void ComputeVisibleRectsInternal(
699 LayerImpl* root_layer, 717 LayerImpl* root_layer,
700 PropertyTrees* property_trees, 718 PropertyTrees* property_trees,
701 bool can_render_to_separate_surface, 719 bool can_render_to_separate_surface,
702 LayerImplList* update_layer_list, 720 LayerImplList* update_layer_list,
703 std::vector<LayerImpl*>* visible_layer_list) { 721 std::vector<LayerImpl*>* visible_layer_list) {
704 if (property_trees->non_root_surfaces_enabled != 722 if (property_trees->non_root_surfaces_enabled !=
705 can_render_to_separate_surface) { 723 can_render_to_separate_surface) {
706 property_trees->non_root_surfaces_enabled = can_render_to_separate_surface; 724 property_trees->non_root_surfaces_enabled = can_render_to_separate_surface;
707 property_trees->transform_tree.set_needs_update(true); 725 property_trees->transform_tree.set_needs_update(true);
708 } 726 }
709 if (property_trees->transform_tree.needs_update()) 727 if (property_trees->transform_tree.needs_update())
710 property_trees->clip_tree.set_needs_update(true); 728 property_trees->clip_tree.set_needs_update(true);
729 UpdateRenderTarget(&property_trees->effect_tree,
730 property_trees->non_root_surfaces_enabled);
711 ComputeTransforms(&property_trees->transform_tree); 731 ComputeTransforms(&property_trees->transform_tree);
712 ComputeClips(&property_trees->clip_tree, property_trees->transform_tree, 732 ComputeClips(&property_trees->clip_tree, property_trees->transform_tree,
713 can_render_to_separate_surface); 733 can_render_to_separate_surface);
714 ComputeEffects(&property_trees->effect_tree); 734 ComputeEffects(&property_trees->effect_tree);
715 735
716 FindLayersThatNeedUpdates( 736 FindLayersThatNeedUpdates(
717 root_layer->layer_tree_impl(), property_trees->transform_tree, 737 root_layer->layer_tree_impl(), property_trees->transform_tree,
718 property_trees->effect_tree, update_layer_list, visible_layer_list); 738 property_trees->effect_tree, update_layer_list, visible_layer_list);
719 CalculateVisibleRects<LayerImpl>( 739 CalculateVisibleRects<LayerImpl>(
720 *visible_layer_list, property_trees->clip_tree, 740 *visible_layer_list, property_trees->clip_tree,
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
775 can_render_to_separate_surface, visible_layer_list); 795 can_render_to_separate_surface, visible_layer_list);
776 } 796 }
777 797
778 void ComputeVisibleRects(LayerImpl* root_layer, 798 void ComputeVisibleRects(LayerImpl* root_layer,
779 PropertyTrees* property_trees, 799 PropertyTrees* property_trees,
780 bool can_render_to_separate_surface, 800 bool can_render_to_separate_surface,
781 LayerImplList* visible_layer_list) { 801 LayerImplList* visible_layer_list) {
782 for (auto* layer : *root_layer->layer_tree_impl()) { 802 for (auto* layer : *root_layer->layer_tree_impl()) {
783 UpdateRenderSurfaceForLayer(&property_trees->effect_tree, 803 UpdateRenderSurfaceForLayer(&property_trees->effect_tree,
784 can_render_to_separate_surface, layer); 804 can_render_to_separate_surface, layer);
805 EffectNode* node =
806 property_trees->effect_tree.Node(layer->effect_tree_index());
807 if (node->owner_id == layer->id())
808 node->data.render_surface = layer->render_surface();
785 #if DCHECK_IS_ON() 809 #if DCHECK_IS_ON()
786 if (can_render_to_separate_surface) 810 if (can_render_to_separate_surface)
787 ValidateRenderSurfaceForLayer(layer); 811 ValidateRenderSurfaceForLayer(layer);
788 #endif 812 #endif
789 } 813 }
790 LayerImplList update_layer_list; 814 LayerImplList update_layer_list;
791 ComputeVisibleRectsInternal(root_layer, property_trees, 815 ComputeVisibleRectsInternal(root_layer, property_trees,
792 can_render_to_separate_surface, 816 can_render_to_separate_surface,
793 &update_layer_list, visible_layer_list); 817 &update_layer_list, visible_layer_list);
794 } 818 }
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
914 const TransformTree& tree) { 938 const TransformTree& tree) {
915 return ScreenSpaceTransformInternal(layer, 939 return ScreenSpaceTransformInternal(layer,
916 tree.Node(layer->transform_tree_index())); 940 tree.Node(layer->transform_tree_index()));
917 } 941 }
918 942
919 static float LayerDrawOpacity(const LayerImpl* layer, const EffectTree& tree) { 943 static float LayerDrawOpacity(const LayerImpl* layer, const EffectTree& tree) {
920 if (!layer->render_target()) 944 if (!layer->render_target())
921 return 0.f; 945 return 0.f;
922 946
923 const EffectNode* target_node = 947 const EffectNode* target_node =
924 tree.Node(layer->render_target()->effect_tree_index()); 948 tree.Node(layer->render_target()->EffectTreeIndex());
925 const EffectNode* node = tree.Node(layer->effect_tree_index()); 949 const EffectNode* node = tree.Node(layer->effect_tree_index());
926 if (node == target_node) 950 if (node == target_node)
927 return 1.f; 951 return 1.f;
928 952
929 float draw_opacity = 1.f; 953 float draw_opacity = 1.f;
930 while (node != target_node) { 954 while (node != target_node) {
931 draw_opacity *= node->data.opacity; 955 draw_opacity *= node->data.opacity;
932 node = tree.parent(node); 956 node = tree.parent(node);
933 } 957 }
934 return draw_opacity; 958 return draw_opacity;
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
1176 void UpdateElasticOverscroll(PropertyTrees* property_trees, 1200 void UpdateElasticOverscroll(PropertyTrees* property_trees,
1177 const Layer* overscroll_elasticity_layer, 1201 const Layer* overscroll_elasticity_layer,
1178 const gfx::Vector2dF& elastic_overscroll) { 1202 const gfx::Vector2dF& elastic_overscroll) {
1179 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, 1203 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer,
1180 elastic_overscroll); 1204 elastic_overscroll);
1181 } 1205 }
1182 1206
1183 } // namespace draw_property_utils 1207 } // namespace draw_property_utils
1184 1208
1185 } // namespace cc 1209 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/damage_tracker_unittest.cc ('k') | cc/trees/layer_tree_host_common.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698