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

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

Issue 2454203002: Revert of cc : Move screen space scale factor to root transform node (Closed)
Patch Set: Created 4 years, 1 month 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 | « no previous file | cc/trees/effect_node.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 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 for_visible_rect_calculation ? clip_node->combined_clip_in_target_space 102 for_visible_rect_calculation ? clip_node->combined_clip_in_target_space
103 : clip_node->clip_in_target_space; 103 : clip_node->clip_in_target_space;
104 104
105 if (clip_node->target_transform_id > target_node_id) { 105 if (clip_node->target_transform_id > target_node_id) {
106 // In this case, layer has a scroll parent. We need to keep the scale 106 // In this case, layer has a scroll parent. We need to keep the scale
107 // at the layer's target but remove the scale at the scroll parent's 107 // at the layer's target but remove the scale at the scroll parent's
108 // target. 108 // target.
109 if (property_trees->ComputeTransformToTarget(clip_node->target_transform_id, 109 if (property_trees->ComputeTransformToTarget(clip_node->target_transform_id,
110 target_effect_node->id, 110 target_effect_node->id,
111 &clip_to_target)) { 111 &clip_to_target)) {
112 PostConcatSurfaceContentsScale(target_effect_node, &clip_to_target); 112 // We don't have to apply surface contents scale when target is root.
113 if (target_effect_node->id != EffectTree::kContentsRootNodeId) {
114 PostConcatSurfaceContentsScale(target_effect_node, &clip_to_target);
113 #if DCHECK_IS_ON() 115 #if DCHECK_IS_ON()
114 const TransformTree& transform_tree = property_trees->transform_tree; 116 const TransformTree& transform_tree = property_trees->transform_tree;
115 VerifySurfaceContentsScalesMatch(layer->effect_tree_index(), 117 VerifySurfaceContentsScalesMatch(layer->effect_tree_index(),
116 target_node_id, effect_tree, 118 target_node_id, effect_tree,
117 transform_tree); 119 transform_tree);
118 #endif 120 #endif
121 }
119 122
120 const EffectNode* source_node = 123 const EffectNode* source_node =
121 effect_tree.Node(clip_node->target_effect_id); 124 effect_tree.Node(clip_node->target_effect_id);
122 ConcatInverseSurfaceContentsScale(source_node, &clip_to_target); 125 ConcatInverseSurfaceContentsScale(source_node, &clip_to_target);
123 #if DCHECK_IS_ON() 126 #if DCHECK_IS_ON()
127 const TransformTree& transform_tree = property_trees->transform_tree;
124 VerifySurfaceContentsScalesMatch(clip_node->target_effect_id, 128 VerifySurfaceContentsScalesMatch(clip_node->target_effect_id,
125 clip_node->target_transform_id, 129 clip_node->target_transform_id,
126 effect_tree, transform_tree); 130 effect_tree, transform_tree);
127 #endif 131 #endif
128 *clip_rect_in_target_space = 132 *clip_rect_in_target_space =
129 MathUtil::MapClippedRect(clip_to_target, clip_from_clip_node); 133 MathUtil::MapClippedRect(clip_to_target, clip_from_clip_node);
130 } else { 134 } else {
131 return false; 135 return false;
132 } 136 }
133 } else { 137 } else {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 } 176 }
173 177
174 static ConditionalClip ComputeLocalRectInTargetSpace( 178 static ConditionalClip ComputeLocalRectInTargetSpace(
175 gfx::RectF rect, 179 gfx::RectF rect,
176 const PropertyTrees* property_trees, 180 const PropertyTrees* property_trees,
177 int current_transform_id, 181 int current_transform_id,
178 int target_transform_id, 182 int target_transform_id,
179 int target_effect_id) { 183 int target_effect_id) {
180 gfx::Transform current_to_target; 184 gfx::Transform current_to_target;
181 if (!property_trees->ComputeTransformToTarget( 185 if (!property_trees->ComputeTransformToTarget(
182 current_transform_id, target_effect_id, &current_to_target)) { 186 current_transform_id, target_effect_id, &current_to_target))
183 // If transform is not invertible, cannot apply clip. 187 // If transform is not invertible, cannot apply clip.
184 return ConditionalClip{false, gfx::RectF()}; 188 return ConditionalClip{false, gfx::RectF()};
189 // We don't have to apply surface contents scale when target is root.
190 if (target_effect_id != EffectTree::kContentsRootNodeId) {
191 const EffectTree& effect_tree = property_trees->effect_tree;
192 const EffectNode* target_effect_node = effect_tree.Node(target_effect_id);
193 PostConcatSurfaceContentsScale(target_effect_node, &current_to_target);
194 #if DCHECK_IS_ON()
195 const TransformTree& transform_tree = property_trees->transform_tree;
196 VerifySurfaceContentsScalesMatch(target_effect_id, target_transform_id,
197 effect_tree, transform_tree);
198 #endif
185 } 199 }
186 const EffectTree& effect_tree = property_trees->effect_tree;
187 const EffectNode* target_effect_node = effect_tree.Node(target_effect_id);
188 PostConcatSurfaceContentsScale(target_effect_node, &current_to_target);
189 #if DCHECK_IS_ON()
190 const TransformTree& transform_tree = property_trees->transform_tree;
191 VerifySurfaceContentsScalesMatch(target_effect_id, target_transform_id,
192 effect_tree, transform_tree);
193 #endif
194 200
195 if (current_transform_id > target_transform_id) 201 if (current_transform_id > target_transform_id)
196 return ConditionalClip{true, // is_clipped. 202 return ConditionalClip{true, // is_clipped.
197 MathUtil::MapClippedRect(current_to_target, rect)}; 203 MathUtil::MapClippedRect(current_to_target, rect)};
198 204
199 return ConditionalClip{true, // is_clipped. 205 return ConditionalClip{true, // is_clipped.
200 MathUtil::ProjectClippedRect(current_to_target, rect)}; 206 MathUtil::ProjectClippedRect(current_to_target, rect)};
201 } 207 }
202 208
203 static ConditionalClip ComputeCurrentClip(const ClipNode* clip_node, 209 static ConditionalClip ComputeCurrentClip(const ClipNode* clip_node,
204 const PropertyTrees* property_trees, 210 const PropertyTrees* property_trees,
205 int target_transform_id, 211 int target_transform_id,
206 int target_effect_id) { 212 int target_effect_id) {
207 if (clip_node->transform_id != target_transform_id) 213 if (clip_node->transform_id != target_transform_id)
208 return ComputeLocalRectInTargetSpace(clip_node->clip, property_trees, 214 return ComputeLocalRectInTargetSpace(clip_node->clip, property_trees,
209 clip_node->transform_id, 215 clip_node->transform_id,
210 target_transform_id, target_effect_id); 216 target_transform_id, target_effect_id);
211 217
212 const EffectTree& effect_tree = property_trees->effect_tree; 218 const EffectTree& effect_tree = property_trees->effect_tree;
213 gfx::RectF current_clip = clip_node->clip; 219 gfx::RectF current_clip = clip_node->clip;
214 gfx::Vector2dF surface_contents_scale = 220 gfx::Vector2dF surface_contents_scale =
215 effect_tree.Node(target_effect_id)->surface_contents_scale; 221 effect_tree.Node(target_effect_id)->surface_contents_scale;
216 // The viewport clip should not be scaled 222 if (surface_contents_scale.x() > 0 && surface_contents_scale.y() > 0)
217 if (surface_contents_scale.x() > 0 && surface_contents_scale.y() > 0 &&
218 clip_node->transform_id != TransformTree::kRootNodeId)
219 current_clip.Scale(surface_contents_scale.x(), surface_contents_scale.y()); 223 current_clip.Scale(surface_contents_scale.x(), surface_contents_scale.y());
220 return ConditionalClip{true /* is_clipped */, current_clip}; 224 return ConditionalClip{true /* is_clipped */, current_clip};
221 } 225 }
222 226
223 static ConditionalClip ComputeAccumulatedClip( 227 static ConditionalClip ComputeAccumulatedClip(
224 const PropertyTrees* property_trees, 228 const PropertyTrees* property_trees,
225 int local_clip_id, 229 int local_clip_id,
226 int target_id) { 230 int target_id) {
227 const ClipTree& clip_tree = property_trees->clip_tree; 231 const ClipTree& clip_tree = property_trees->clip_tree;
228 const EffectTree& effect_tree = property_trees->effect_tree; 232 const EffectTree& effect_tree = property_trees->effect_tree;
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
529 ContentsTargetEffectNode(layer->effect_tree_index(), effect_tree); 533 ContentsTargetEffectNode(layer->effect_tree_index(), effect_tree);
530 bool success = property_trees->ComputeTransformFromTarget( 534 bool success = property_trees->ComputeTransformFromTarget(
531 transform_node->id, target_effect_node->id, &target_to_layer); 535 transform_node->id, target_effect_node->id, &target_to_layer);
532 if (!success) { 536 if (!success) {
533 // An animated singular transform may become non-singular during the 537 // An animated singular transform may become non-singular during the
534 // animation, so we still need to compute a visible rect. In this 538 // animation, so we still need to compute a visible rect. In this
535 // situation, we treat the entire layer as visible. 539 // situation, we treat the entire layer as visible.
536 layer->set_visible_layer_rect(gfx::Rect(layer_bounds)); 540 layer->set_visible_layer_rect(gfx::Rect(layer_bounds));
537 continue; 541 continue;
538 } 542 }
539 ConcatInverseSurfaceContentsScale(target_effect_node, &target_to_layer); 543 if (target_effect_node->id > EffectTree::kContentsRootNodeId) {
544 ConcatInverseSurfaceContentsScale(target_effect_node, &target_to_layer);
540 #if DCHECK_IS_ON() 545 #if DCHECK_IS_ON()
541 VerifySurfaceContentsScalesMatch(target_effect_node->id, target_node_id, 546 VerifySurfaceContentsScalesMatch(target_effect_node->id, target_node_id,
542 effect_tree, transform_tree); 547 effect_tree, transform_tree);
543 #endif 548 #endif
549 }
544 } 550 }
545 gfx::Transform target_to_content; 551 gfx::Transform target_to_content;
546 target_to_content.Translate(-layer->offset_to_transform_parent().x(), 552 target_to_content.Translate(-layer->offset_to_transform_parent().x(),
547 -layer->offset_to_transform_parent().y()); 553 -layer->offset_to_transform_parent().y());
548 target_to_content.PreconcatTransform(target_to_layer); 554 target_to_content.PreconcatTransform(target_to_layer);
549 555
550 gfx::Rect visible_rect = gfx::ToEnclosingRect(MathUtil::ProjectClippedRect( 556 gfx::Rect visible_rect = gfx::ToEnclosingRect(MathUtil::ProjectClippedRect(
551 target_to_content, combined_clip_rect_in_target_space)); 557 target_to_content, combined_clip_rect_in_target_space));
552 visible_rect.Intersect(gfx::Rect(layer_bounds)); 558 visible_rect.Intersect(gfx::Rect(layer_bounds));
553 layer->set_visible_layer_rect(visible_rect); 559 layer->set_visible_layer_rect(visible_rect);
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
812 gfx::RectF parent_combined_clip_in_target_space = 818 gfx::RectF parent_combined_clip_in_target_space =
813 parent_clip_node->combined_clip_in_target_space; 819 parent_clip_node->combined_clip_in_target_space;
814 gfx::RectF parent_clip_in_target_space = 820 gfx::RectF parent_clip_in_target_space =
815 parent_clip_node->clip_in_target_space; 821 parent_clip_node->clip_in_target_space;
816 if (parent_target_transform_node && 822 if (parent_target_transform_node &&
817 parent_target_transform_node->id != clip_node->target_transform_id && 823 parent_target_transform_node->id != clip_node->target_transform_id &&
818 non_root_surfaces_enabled) { 824 non_root_surfaces_enabled) {
819 success &= property_trees->ComputeTransformFromTarget( 825 success &= property_trees->ComputeTransformFromTarget(
820 clip_node->target_transform_id, parent_clip_node->target_effect_id, 826 clip_node->target_transform_id, parent_clip_node->target_effect_id,
821 &parent_to_current); 827 &parent_to_current);
822 const EffectNode* target_effect_node = 828 // We don't have to apply surface contents scale when target is root.
823 effect_tree.Node(clip_node->target_effect_id); 829 if (clip_node->target_effect_id != EffectTree::kContentsRootNodeId) {
824 PostConcatSurfaceContentsScale(target_effect_node, &parent_to_current); 830 const EffectNode* target_effect_node =
831 effect_tree.Node(clip_node->target_effect_id);
832 PostConcatSurfaceContentsScale(target_effect_node, &parent_to_current);
825 #if DCHECK_IS_ON() 833 #if DCHECK_IS_ON()
826 VerifySurfaceContentsScalesMatch(clip_node->target_effect_id, 834 VerifySurfaceContentsScalesMatch(clip_node->target_effect_id,
827 clip_node->target_transform_id, 835 clip_node->target_transform_id,
828 effect_tree, transform_tree); 836 effect_tree, transform_tree);
829 #endif 837 #endif
830 const EffectNode* parent_target_effect_node = 838 }
831 effect_tree.Node(parent_clip_node->target_effect_id); 839 if (parent_clip_node->target_effect_id !=
832 ConcatInverseSurfaceContentsScale(parent_target_effect_node, 840 EffectTree::kContentsRootNodeId) {
833 &parent_to_current); 841 const EffectNode* parent_target_effect_node =
842 effect_tree.Node(parent_clip_node->target_effect_id);
843 ConcatInverseSurfaceContentsScale(parent_target_effect_node,
844 &parent_to_current);
834 #if DCHECK_IS_ON() 845 #if DCHECK_IS_ON()
835 VerifySurfaceContentsScalesMatch(parent_clip_node->target_effect_id, 846 VerifySurfaceContentsScalesMatch(parent_clip_node->target_effect_id,
836 parent_clip_node->target_transform_id, 847 parent_clip_node->target_transform_id,
837 effect_tree, transform_tree); 848 effect_tree, transform_tree);
838 #endif 849 #endif
850 }
839 // If we can't compute a transform, it's because we had to use the inverse 851 // If we can't compute a transform, it's because we had to use the inverse
840 // of a singular transform. We won't draw in this case, so there's no need 852 // of a singular transform. We won't draw in this case, so there's no need
841 // to compute clips. 853 // to compute clips.
842 if (!success) 854 if (!success)
843 continue; 855 continue;
844 parent_combined_clip_in_target_space = MathUtil::ProjectClippedRect( 856 parent_combined_clip_in_target_space = MathUtil::ProjectClippedRect(
845 parent_to_current, parent_clip_node->combined_clip_in_target_space); 857 parent_to_current, parent_clip_node->combined_clip_in_target_space);
846 parent_clip_in_target_space = MathUtil::ProjectClippedRect( 858 parent_clip_in_target_space = MathUtil::ProjectClippedRect(
847 parent_to_current, parent_clip_node->clip_in_target_space); 859 parent_to_current, parent_clip_node->clip_in_target_space);
848 } 860 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
890 902
891 if (!non_root_surfaces_enabled) { 903 if (!non_root_surfaces_enabled) {
892 source_to_target = transform_tree.ToScreen(clip_node->transform_id); 904 source_to_target = transform_tree.ToScreen(clip_node->transform_id);
893 } else if (transform_tree.ContentTargetId(transform_node->id) == 905 } else if (transform_tree.ContentTargetId(transform_node->id) ==
894 clip_node->target_transform_id) { 906 clip_node->target_transform_id) {
895 source_to_target = transform_tree.ToTarget(clip_node->transform_id, 907 source_to_target = transform_tree.ToTarget(clip_node->transform_id,
896 clip_node->target_effect_id); 908 clip_node->target_effect_id);
897 } else { 909 } else {
898 success = property_trees->ComputeTransformToTarget( 910 success = property_trees->ComputeTransformToTarget(
899 transform_node->id, clip_node->target_effect_id, &source_to_target); 911 transform_node->id, clip_node->target_effect_id, &source_to_target);
900 const EffectNode* target_effect_node = 912 // We don't have to apply surface contents scale when target is root.
901 effect_tree.Node(clip_node->target_effect_id); 913 if (clip_node->target_effect_id != EffectTree::kContentsRootNodeId) {
902 PostConcatSurfaceContentsScale(target_effect_node, &source_to_target); 914 const EffectNode* target_effect_node =
915 effect_tree.Node(clip_node->target_effect_id);
916 PostConcatSurfaceContentsScale(target_effect_node, &source_to_target);
903 #if DCHECK_IS_ON() 917 #if DCHECK_IS_ON()
904 VerifySurfaceContentsScalesMatch(clip_node->target_effect_id, 918 VerifySurfaceContentsScalesMatch(clip_node->target_effect_id,
905 clip_node->target_transform_id, 919 clip_node->target_transform_id,
906 effect_tree, transform_tree); 920 effect_tree, transform_tree);
907 #endif 921 #endif
922 }
908 // source_to_target computation should be successful as target is an 923 // source_to_target computation should be successful as target is an
909 // ancestor of the transform node. 924 // ancestor of the transform node.
910 DCHECK(success); 925 DCHECK(success);
911 } 926 }
912 927
913 gfx::RectF source_clip_in_target_space = 928 gfx::RectF source_clip_in_target_space =
914 MathUtil::MapClippedRect(source_to_target, clip_node->clip); 929 MathUtil::MapClippedRect(source_to_target, clip_node->clip);
915 930
916 // With surfaces disabled, the only case where we use only the local clip 931 // With surfaces disabled, the only case where we use only the local clip
917 // for layer clipping is the case where no non-viewport ancestor node 932 // for layer clipping is the case where no non-viewport ancestor node
(...skipping 24 matching lines...) Expand all
942 for (int i = 1; i < static_cast<int>(transform_tree->size()); ++i) 957 for (int i = 1; i < static_cast<int>(transform_tree->size()); ++i)
943 transform_tree->UpdateTransforms(i); 958 transform_tree->UpdateTransforms(i);
944 transform_tree->set_needs_update(false); 959 transform_tree->set_needs_update(false);
945 } 960 }
946 961
947 void UpdateRenderTarget(EffectTree* effect_tree, 962 void UpdateRenderTarget(EffectTree* effect_tree,
948 bool can_render_to_separate_surface) { 963 bool can_render_to_separate_surface) {
949 for (int i = 1; i < static_cast<int>(effect_tree->size()); ++i) { 964 for (int i = 1; i < static_cast<int>(effect_tree->size()); ++i) {
950 EffectNode* node = effect_tree->Node(i); 965 EffectNode* node = effect_tree->Node(i);
951 if (i == 1) { 966 if (i == 1) {
952 // Render target on the node corresponding to root is itself. 967 // Render target on the first effect node is root.
953 node->target_id = 1; 968 node->target_id = 0;
954 } else if (!can_render_to_separate_surface) { 969 } else if (!can_render_to_separate_surface) {
955 node->target_id = 1; 970 node->target_id = 1;
956 } else if (effect_tree->parent(node)->has_render_surface) { 971 } else if (effect_tree->parent(node)->has_render_surface) {
957 node->target_id = node->parent_id; 972 node->target_id = node->parent_id;
958 } else { 973 } else {
959 node->target_id = effect_tree->parent(node)->target_id; 974 node->target_id = effect_tree->parent(node)->target_id;
960 } 975 }
961 } 976 }
962 } 977 }
963 978
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
1048 static void VerifyDrawTransformsMatch(LayerImpl* layer, 1063 static void VerifyDrawTransformsMatch(LayerImpl* layer,
1049 PropertyTrees* property_trees) { 1064 PropertyTrees* property_trees) {
1050 const int source_id = layer->transform_tree_index(); 1065 const int source_id = layer->transform_tree_index();
1051 int destination_id = FindTargetTransformTreeIndexFromEffectTree( 1066 int destination_id = FindTargetTransformTreeIndexFromEffectTree(
1052 property_trees->effect_tree, layer->effect_tree_index()); 1067 property_trees->effect_tree, layer->effect_tree_index());
1053 const EffectNode* target_effect_node = ContentsTargetEffectNode( 1068 const EffectNode* target_effect_node = ContentsTargetEffectNode(
1054 layer->effect_tree_index(), property_trees->effect_tree); 1069 layer->effect_tree_index(), property_trees->effect_tree);
1055 gfx::Transform draw_transform; 1070 gfx::Transform draw_transform;
1056 property_trees->ComputeTransformToTarget(source_id, target_effect_node->id, 1071 property_trees->ComputeTransformToTarget(source_id, target_effect_node->id,
1057 &draw_transform); 1072 &draw_transform);
1058 PostConcatSurfaceContentsScale(target_effect_node, &draw_transform); 1073 // We don't have to apply surface contents scale when target is root.
1074 if (target_effect_node->id != EffectTree::kContentsRootNodeId) {
1075 PostConcatSurfaceContentsScale(target_effect_node, &draw_transform);
1059 #if DCHECK_IS_ON() 1076 #if DCHECK_IS_ON()
1060 VerifySurfaceContentsScalesMatch(layer->effect_tree_index(), destination_id, 1077 VerifySurfaceContentsScalesMatch(layer->effect_tree_index(), destination_id,
1061 property_trees->effect_tree, 1078 property_trees->effect_tree,
1062 property_trees->transform_tree); 1079 property_trees->transform_tree);
1063 #endif 1080 #endif
1081 }
1064 if (layer->should_flatten_transform_from_property_tree()) 1082 if (layer->should_flatten_transform_from_property_tree())
1065 draw_transform.FlattenTo2d(); 1083 draw_transform.FlattenTo2d();
1066 draw_transform.Translate(layer->offset_to_transform_parent().x(), 1084 draw_transform.Translate(layer->offset_to_transform_parent().x(),
1067 layer->offset_to_transform_parent().y()); 1085 layer->offset_to_transform_parent().y());
1068 DCHECK(draw_transform.ApproximatelyEqual(DrawTransform( 1086 DCHECK(draw_transform.ApproximatelyEqual(DrawTransform(
1069 layer, property_trees->transform_tree, property_trees->effect_tree))) 1087 layer, property_trees->transform_tree, property_trees->effect_tree)))
1070 << " layer: " << layer->id() << " source transform id: " << source_id 1088 << " layer: " << layer->id() << " source transform id: " << source_id
1071 << " destination transform id: " << destination_id 1089 << " destination transform id: " << destination_id
1072 << " draw transform from transform tree: " 1090 << " draw transform from transform tree: "
1073 << DrawTransform(layer, property_trees->transform_tree, 1091 << DrawTransform(layer, property_trees->transform_tree,
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
1295 if (transform_node->id == 1) { 1313 if (transform_node->id == 1) {
1296 render_surface->SetDrawTransform(gfx::Transform()); 1314 render_surface->SetDrawTransform(gfx::Transform());
1297 return; 1315 return;
1298 } 1316 }
1299 1317
1300 gfx::Transform render_surface_transform; 1318 gfx::Transform render_surface_transform;
1301 const EffectNode* target_effect_node = 1319 const EffectNode* target_effect_node =
1302 effect_tree.Node(effect_node->target_id); 1320 effect_tree.Node(effect_node->target_id);
1303 property_trees->ComputeTransformToTarget( 1321 property_trees->ComputeTransformToTarget(
1304 transform_node->id, target_effect_node->id, &render_surface_transform); 1322 transform_node->id, target_effect_node->id, &render_surface_transform);
1305 PostConcatSurfaceContentsScale(target_effect_node, &render_surface_transform); 1323 // We don't have to apply surface contents scale when target is root.
1324 if (effect_node->target_id != EffectTree::kContentsRootNodeId) {
1325 PostConcatSurfaceContentsScale(target_effect_node,
1326 &render_surface_transform);
1306 #if DCHECK_IS_ON() 1327 #if DCHECK_IS_ON()
1307 const TransformNode* target_transform_node = 1328 const TransformNode* target_transform_node =
1308 transform_tree.Node(transform_tree.TargetId(transform_node->id)); 1329 transform_tree.Node(transform_tree.TargetId(transform_node->id));
1309 VerifySurfaceContentsScalesMatch(effect_node->target_id, 1330 VerifySurfaceContentsScalesMatch(effect_node->target_id,
1310 target_transform_node->id, effect_tree, 1331 target_transform_node->id, effect_tree,
1311 transform_tree); 1332 transform_tree);
1312 #endif 1333 #endif
1334 }
1313 1335
1314 ConcatInverseSurfaceContentsScale(effect_node, &render_surface_transform); 1336 ConcatInverseSurfaceContentsScale(effect_node, &render_surface_transform);
1315 #if DCHECK_IS_ON() 1337 #if DCHECK_IS_ON()
1316 VerifySurfaceContentsScalesMatch(effect_node->id, transform_node->id, 1338 VerifySurfaceContentsScalesMatch(effect_node->id, transform_node->id,
1317 effect_tree, transform_tree); 1339 effect_tree, transform_tree);
1318 #endif 1340 #endif
1319 render_surface->SetDrawTransform(render_surface_transform); 1341 render_surface->SetDrawTransform(render_surface_transform);
1320 } 1342 }
1321 1343
1322 static void SetSurfaceIsClipped(const ClipNode* clip_node, 1344 static void SetSurfaceIsClipped(const ClipNode* clip_node,
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1355 int target_effect_id = effect_node->target_id; 1377 int target_effect_id = effect_node->target_id;
1356 const bool success = property_trees->ComputeTransformToTarget( 1378 const bool success = property_trees->ComputeTransformToTarget(
1357 parent_clip_node->target_transform_id, target_effect_id, 1379 parent_clip_node->target_transform_id, target_effect_id,
1358 &clip_parent_target_to_target); 1380 &clip_parent_target_to_target);
1359 1381
1360 if (!success) { 1382 if (!success) {
1361 render_surface->SetClipRect(gfx::Rect()); 1383 render_surface->SetClipRect(gfx::Rect());
1362 return; 1384 return;
1363 } 1385 }
1364 1386
1365 PostConcatSurfaceContentsScale(effect_node, &clip_parent_target_to_target); 1387 // We don't have to apply surface contents scale when target is root.
1388 if (render_surface->EffectTreeIndex() != EffectTree::kContentsRootNodeId) {
1389 const EffectNode* effect_node =
1390 effect_tree.Node(render_surface->EffectTreeIndex());
1391 PostConcatSurfaceContentsScale(effect_node, &clip_parent_target_to_target);
1366 #if DCHECK_IS_ON() 1392 #if DCHECK_IS_ON()
1367 VerifySurfaceContentsScalesMatch(render_surface->EffectTreeIndex(), 1393 VerifySurfaceContentsScalesMatch(
1368 transform_tree.TargetId(transform_node->id), 1394 render_surface->EffectTreeIndex(),
1369 effect_tree, transform_tree); 1395 transform_tree.TargetId(transform_node->id), effect_tree,
1396 transform_tree);
1370 #endif 1397 #endif
1398 }
1371 1399
1372 DCHECK_LT(parent_clip_node->target_transform_id, 1400 DCHECK_LT(parent_clip_node->target_transform_id,
1373 transform_tree.TargetId(transform_node->id)); 1401 transform_tree.TargetId(transform_node->id));
1374 render_surface->SetClipRect(gfx::ToEnclosingRect(MathUtil::ProjectClippedRect( 1402 render_surface->SetClipRect(gfx::ToEnclosingRect(MathUtil::ProjectClippedRect(
1375 clip_parent_target_to_target, parent_clip_node->clip_in_target_space))); 1403 clip_parent_target_to_target, parent_clip_node->clip_in_target_space)));
1376 } 1404 }
1377 1405
1378 template <typename LayerType> 1406 template <typename LayerType>
1379 static gfx::Transform ScreenSpaceTransformInternal(LayerType* layer, 1407 static gfx::Transform ScreenSpaceTransformInternal(LayerType* layer,
1380 const TransformTree& tree) { 1408 const TransformTree& tree) {
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
1592 void UpdateElasticOverscroll(PropertyTrees* property_trees, 1620 void UpdateElasticOverscroll(PropertyTrees* property_trees,
1593 const Layer* overscroll_elasticity_layer, 1621 const Layer* overscroll_elasticity_layer,
1594 const gfx::Vector2dF& elastic_overscroll) { 1622 const gfx::Vector2dF& elastic_overscroll) {
1595 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, 1623 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer,
1596 elastic_overscroll); 1624 elastic_overscroll);
1597 } 1625 }
1598 1626
1599 } // namespace draw_property_utils 1627 } // namespace draw_property_utils
1600 1628
1601 } // namespace cc 1629 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | cc/trees/effect_node.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698