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

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: 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
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 412 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698