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

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

Issue 2087963003: cc: Stop creating unused 0 property tree nodes other than transform Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 5 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/layers/render_surface_impl.cc ('k') | cc/trees/layer_tree_host_common.cc » ('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 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 const typename LayerType::LayerListType& visible_layer_list, 366 const typename LayerType::LayerListType& visible_layer_list,
367 const ClipTree& clip_tree, 367 const ClipTree& clip_tree,
368 const TransformTree& transform_tree, 368 const TransformTree& transform_tree,
369 const EffectTree& effect_tree, 369 const EffectTree& effect_tree,
370 bool non_root_surfaces_enabled) { 370 bool non_root_surfaces_enabled) {
371 for (auto& layer : visible_layer_list) { 371 for (auto& layer : visible_layer_list) {
372 gfx::Size layer_bounds = layer->bounds(); 372 gfx::Size layer_bounds = layer->bounds();
373 373
374 int effect_ancestor_with_copy_request = 374 int effect_ancestor_with_copy_request =
375 effect_tree.ClosestAncestorWithCopyRequest(layer->effect_tree_index()); 375 effect_tree.ClosestAncestorWithCopyRequest(layer->effect_tree_index());
376 if (effect_ancestor_with_copy_request > 1) { 376 if (effect_ancestor_with_copy_request > EffectTree::kRootNodeId) {
377 // Non root copy request. 377 // Non root copy request.
378 ConditionalClip accumulated_clip_rect = ComputeAccumulatedClip( 378 ConditionalClip accumulated_clip_rect = ComputeAccumulatedClip(
379 clip_tree, layer->clip_tree_index(), effect_tree, 379 clip_tree, layer->clip_tree_index(), effect_tree,
380 effect_ancestor_with_copy_request, transform_tree); 380 effect_ancestor_with_copy_request, transform_tree);
381 if (!accumulated_clip_rect.is_clipped) { 381 if (!accumulated_clip_rect.is_clipped) {
382 layer->set_visible_layer_rect(gfx::Rect(layer_bounds)); 382 layer->set_visible_layer_rect(gfx::Rect(layer_bounds));
383 continue; 383 continue;
384 } 384 }
385 385
386 gfx::RectF accumulated_clip_in_copy_request_space = 386 gfx::RectF accumulated_clip_in_copy_request_space =
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
714 std::isnan(rect->right()) || std::isnan(rect->bottom())) 714 std::isnan(rect->right()) || std::isnan(rect->bottom()))
715 *rect = gfx::RectF(); 715 *rect = gfx::RectF();
716 } 716 }
717 717
718 void ComputeClips(ClipTree* clip_tree, 718 void ComputeClips(ClipTree* clip_tree,
719 const TransformTree& transform_tree, 719 const TransformTree& transform_tree,
720 const EffectTree& effect_tree, 720 const EffectTree& effect_tree,
721 bool non_root_surfaces_enabled) { 721 bool non_root_surfaces_enabled) {
722 if (!clip_tree->needs_update()) 722 if (!clip_tree->needs_update())
723 return; 723 return;
724 for (int i = 1; i < static_cast<int>(clip_tree->size()); ++i) { 724 for (int i = ClipTree::kRootNodeId; i < static_cast<int>(clip_tree->size());
725 ++i) {
725 ClipNode* clip_node = clip_tree->Node(i); 726 ClipNode* clip_node = clip_tree->Node(i);
726 727
727 if (clip_node->id == 1) { 728 if (clip_node->id == ClipTree::kRootNodeId) {
728 ResetIfHasNanCoordinate(&clip_node->clip); 729 ResetIfHasNanCoordinate(&clip_node->clip);
729 clip_node->clip_in_target_space = clip_node->clip; 730 clip_node->clip_in_target_space = clip_node->clip;
730 clip_node->combined_clip_in_target_space = clip_node->clip; 731 clip_node->combined_clip_in_target_space = clip_node->clip;
731 continue; 732 continue;
732 } 733 }
733 const TransformNode* transform_node = 734 const TransformNode* transform_node =
734 transform_tree.Node(clip_node->transform_id); 735 transform_tree.Node(clip_node->transform_id);
735 ClipNode* parent_clip_node = clip_tree->parent(clip_node); 736 ClipNode* parent_clip_node = clip_tree->parent(clip_node);
736 737
737 gfx::Transform parent_to_current; 738 gfx::Transform parent_to_current;
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
870 } 871 }
871 ResetIfHasNanCoordinate(&clip_node->clip_in_target_space); 872 ResetIfHasNanCoordinate(&clip_node->clip_in_target_space);
872 ResetIfHasNanCoordinate(&clip_node->combined_clip_in_target_space); 873 ResetIfHasNanCoordinate(&clip_node->combined_clip_in_target_space);
873 } 874 }
874 clip_tree->set_needs_update(false); 875 clip_tree->set_needs_update(false);
875 } 876 }
876 877
877 void ComputeTransforms(TransformTree* transform_tree) { 878 void ComputeTransforms(TransformTree* transform_tree) {
878 if (!transform_tree->needs_update()) 879 if (!transform_tree->needs_update())
879 return; 880 return;
880 for (int i = 1; i < static_cast<int>(transform_tree->size()); ++i) 881 for (int i = TransformTree::kRootNodeId;
882 i < static_cast<int>(transform_tree->size()); ++i)
881 transform_tree->UpdateTransforms(i); 883 transform_tree->UpdateTransforms(i);
882 transform_tree->set_needs_update(false); 884 transform_tree->set_needs_update(false);
883 } 885 }
884 886
885 void UpdateRenderTarget(EffectTree* effect_tree, 887 void UpdateRenderTarget(EffectTree* effect_tree,
886 bool can_render_to_separate_surface) { 888 bool can_render_to_separate_surface) {
887 for (int i = 1; i < static_cast<int>(effect_tree->size()); ++i) { 889 for (int i = EffectTree::kRootNodeId;
890 i < static_cast<int>(effect_tree->size()); ++i) {
888 EffectNode* node = effect_tree->Node(i); 891 EffectNode* node = effect_tree->Node(i);
889 if (i == 1) { 892 if (i == EffectTree::kRootNodeId) {
890 // Render target on the first effect node is root. 893 // Render target on the first effect node is root.
891 node->target_id = 0; 894 node->target_id = EffectTree::kRootNodeId;
892 } else if (!can_render_to_separate_surface) { 895 } else if (!can_render_to_separate_surface) {
893 node->target_id = 1; 896 node->target_id = EffectTree::kRootNodeId;
894 } else if (effect_tree->parent(node)->has_render_surface) { 897 } else if (effect_tree->parent(node)->has_render_surface) {
895 node->target_id = node->parent_id; 898 node->target_id = node->parent_id;
896 } else { 899 } else {
897 node->target_id = effect_tree->parent(node)->target_id; 900 node->target_id = effect_tree->parent(node)->target_id;
898 } 901 }
899 } 902 }
900 } 903 }
901 904
902 void ComputeEffects(EffectTree* effect_tree) { 905 void ComputeEffects(EffectTree* effect_tree) {
903 if (!effect_tree->needs_update()) 906 if (!effect_tree->needs_update())
904 return; 907 return;
905 for (int i = 1; i < static_cast<int>(effect_tree->size()); ++i) 908 for (int i = EffectTree::kRootNodeId;
909 i < static_cast<int>(effect_tree->size()); ++i)
906 effect_tree->UpdateEffects(i); 910 effect_tree->UpdateEffects(i);
907 effect_tree->set_needs_update(false); 911 effect_tree->set_needs_update(false);
908 } 912 }
909 913
910 static void ComputeClipsWithEffectTree(PropertyTrees* property_trees) { 914 static void ComputeClipsWithEffectTree(PropertyTrees* property_trees) {
911 EffectTree* effect_tree = &property_trees->effect_tree; 915 EffectTree* effect_tree = &property_trees->effect_tree;
912 const ClipTree* clip_tree = &property_trees->clip_tree; 916 const ClipTree* clip_tree = &property_trees->clip_tree;
913 const TransformTree* transform_tree = &property_trees->transform_tree; 917 const TransformTree* transform_tree = &property_trees->transform_tree;
914 EffectNode* root_effect_node = effect_tree->Node(1); 918 EffectNode* root_effect_node = effect_tree->Node(EffectTree::kRootNodeId);
915 const RenderSurfaceImpl* root_render_surface = 919 const RenderSurfaceImpl* root_render_surface =
916 root_effect_node->render_surface; 920 root_effect_node->render_surface;
917 gfx::Rect root_clip = 921 gfx::Rect root_clip =
918 gfx::ToEnclosingRect(clip_tree->Node(root_effect_node->clip_id)->clip); 922 gfx::ToEnclosingRect(clip_tree->Node(root_effect_node->clip_id)->clip);
919 if (root_render_surface->is_clipped()) 923 if (root_render_surface->is_clipped())
920 DCHECK(root_clip == root_render_surface->clip_rect()) 924 DCHECK(root_clip == root_render_surface->clip_rect())
921 << "clip on root render surface: " 925 << "clip on root render surface: "
922 << root_render_surface->clip_rect().ToString() 926 << root_render_surface->clip_rect().ToString()
923 << " v.s. root effect node's clip: " << root_clip.ToString(); 927 << " v.s. root effect node's clip: " << root_clip.ToString();
924 for (int i = 2; i < static_cast<int>(effect_tree->size()); ++i) { 928 for (int i = 2; i < static_cast<int>(effect_tree->size()); ++i) {
(...skipping 21 matching lines...) Expand all
946 const ClipTree* clip_tree = &property_trees->clip_tree; 950 const ClipTree* clip_tree = &property_trees->clip_tree;
947 const TransformTree* transform_tree = &property_trees->transform_tree; 951 const TransformTree* transform_tree = &property_trees->transform_tree;
948 const EffectNode* effect_node = effect_tree->Node(layer->effect_tree_index()); 952 const EffectNode* effect_node = effect_tree->Node(layer->effect_tree_index());
949 const EffectNode* target_node = 953 const EffectNode* target_node =
950 effect_node->has_render_surface 954 effect_node->has_render_surface
951 ? effect_node 955 ? effect_node
952 : effect_tree->Node(effect_node->target_id); 956 : effect_tree->Node(effect_node->target_id);
953 // TODO(weiliangc): When effect node has up to date render surface info on 957 // TODO(weiliangc): When effect node has up to date render surface info on
954 // compositor thread, no need to check for resourceless draw mode 958 // compositor thread, no need to check for resourceless draw mode
955 if (!property_trees->non_root_surfaces_enabled) { 959 if (!property_trees->non_root_surfaces_enabled) {
956 target_node = effect_tree->Node(1); 960 target_node = effect_tree->Node(EffectTree::kRootNodeId);
957 } 961 }
958 962
959 ConditionalClip accumulated_clip_rect = 963 ConditionalClip accumulated_clip_rect =
960 ComputeAccumulatedClip(*clip_tree, layer->clip_tree_index(), *effect_tree, 964 ComputeAccumulatedClip(*clip_tree, layer->clip_tree_index(), *effect_tree,
961 target_node->id, *transform_tree); 965 target_node->id, *transform_tree);
962 966
963 gfx::RectF accumulated_clip = accumulated_clip_rect.clip_rect; 967 gfx::RectF accumulated_clip = accumulated_clip_rect.clip_rect;
964 968
965 if ((!property_trees->non_root_surfaces_enabled && 969 if ((!property_trees->non_root_surfaces_enabled &&
966 clip_tree->Node(layer->clip_tree_index()) 970 clip_tree->Node(layer->clip_tree_index())
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
1175 } 1179 }
1176 1180
1177 static void SetSurfaceDrawTransform(const TransformTree& transform_tree, 1181 static void SetSurfaceDrawTransform(const TransformTree& transform_tree,
1178 const EffectTree& effect_tree, 1182 const EffectTree& effect_tree,
1179 RenderSurfaceImpl* render_surface) { 1183 RenderSurfaceImpl* render_surface) {
1180 const TransformNode* transform_node = 1184 const TransformNode* transform_node =
1181 transform_tree.Node(render_surface->TransformTreeIndex()); 1185 transform_tree.Node(render_surface->TransformTreeIndex());
1182 const EffectNode* effect_node = 1186 const EffectNode* effect_node =
1183 effect_tree.Node(render_surface->EffectTreeIndex()); 1187 effect_tree.Node(render_surface->EffectTreeIndex());
1184 // The draw transform of root render surface is identity tranform. 1188 // The draw transform of root render surface is identity tranform.
1185 if (transform_node->id == 1) { 1189 if (transform_node->id == TransformTree::kRootNodeId) {
1186 render_surface->SetDrawTransform(gfx::Transform()); 1190 render_surface->SetDrawTransform(gfx::Transform());
1187 return; 1191 return;
1188 } 1192 }
1189 1193
1190 gfx::Transform render_surface_transform; 1194 gfx::Transform render_surface_transform;
1191 const TransformNode* target_transform_node = 1195 const TransformNode* target_transform_node =
1192 transform_tree.Node(transform_tree.TargetId(transform_node->id)); 1196 transform_tree.Node(transform_tree.TargetId(transform_node->id));
1193 transform_tree.ComputeTransform(transform_node->id, target_transform_node->id, 1197 transform_tree.ComputeTransform(transform_node->id, target_transform_node->id,
1194 &render_surface_transform); 1198 &render_surface_transform);
1195 // We don't have to apply sublayer scale when target is root. 1199 // We don't have to apply sublayer scale when target is root.
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after
1527 void UpdateElasticOverscroll(PropertyTrees* property_trees, 1531 void UpdateElasticOverscroll(PropertyTrees* property_trees,
1528 const Layer* overscroll_elasticity_layer, 1532 const Layer* overscroll_elasticity_layer,
1529 const gfx::Vector2dF& elastic_overscroll) { 1533 const gfx::Vector2dF& elastic_overscroll) {
1530 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, 1534 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer,
1531 elastic_overscroll); 1535 elastic_overscroll);
1532 } 1536 }
1533 1537
1534 } // namespace draw_property_utils 1538 } // namespace draw_property_utils
1535 1539
1536 } // namespace cc 1540 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/render_surface_impl.cc ('k') | cc/trees/layer_tree_host_common.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698