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

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

Issue 2211113002: cc: Compute draw transforms correctly when non root surfaces disabled (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 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 | « no previous file | no next file » | 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 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 << target_transform_node->surface_contents_scale.ToString() 74 << target_transform_node->surface_contents_scale.ToString()
75 << " surface contents scale from effect tree: " 75 << " surface contents scale from effect tree: "
76 << target_effect_node->surface_contents_scale.ToString(); 76 << target_effect_node->surface_contents_scale.ToString();
77 } 77 }
78 #endif 78 #endif
79 79
80 static const EffectNode* ContentsTargetEffectNode( 80 static const EffectNode* ContentsTargetEffectNode(
81 const int effect_tree_index, 81 const int effect_tree_index,
82 const EffectTree& effect_tree) { 82 const EffectTree& effect_tree) {
83 const EffectNode* effect_node = effect_tree.Node(effect_tree_index); 83 const EffectNode* effect_node = effect_tree.Node(effect_tree_index);
84 return effect_node->has_render_surface 84 return effect_node->render_surface ? effect_node
85 ? effect_node 85 : effect_tree.Node(effect_node->target_id);
86 : effect_tree.Node(effect_node->target_id);
87 } 86 }
88 87
89 template <typename LayerType> 88 template <typename LayerType>
90 bool ComputeClipRectInTargetSpace(const LayerType* layer, 89 bool ComputeClipRectInTargetSpace(const LayerType* layer,
91 const ClipNode* clip_node, 90 const ClipNode* clip_node,
92 const PropertyTrees* property_trees, 91 const PropertyTrees* property_trees,
93 int target_node_id, 92 int target_node_id,
94 gfx::RectF* clip_rect_in_target_space) { 93 gfx::RectF* clip_rect_in_target_space) {
95 DCHECK(layer->clip_tree_index() == clip_node->id); 94 DCHECK(layer->clip_tree_index() == clip_node->id);
96 DCHECK(clip_node->target_transform_id != target_node_id); 95 DCHECK(clip_node->target_transform_id != target_node_id);
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 ContentsTargetEffectNode(layer->effect_tree_index(), effect_tree); 523 ContentsTargetEffectNode(layer->effect_tree_index(), effect_tree);
525 bool success = property_trees->ComputeTransformFromTarget( 524 bool success = property_trees->ComputeTransformFromTarget(
526 transform_node->id, target_effect_node->id, &target_to_layer); 525 transform_node->id, target_effect_node->id, &target_to_layer);
527 if (!success) { 526 if (!success) {
528 // An animated singular transform may become non-singular during the 527 // An animated singular transform may become non-singular during the
529 // animation, so we still need to compute a visible rect. In this 528 // animation, so we still need to compute a visible rect. In this
530 // situation, we treat the entire layer as visible. 529 // situation, we treat the entire layer as visible.
531 layer->set_visible_layer_rect(gfx::Rect(layer_bounds)); 530 layer->set_visible_layer_rect(gfx::Rect(layer_bounds));
532 continue; 531 continue;
533 } 532 }
534 if (target_effect_node->id != EffectTree::kContentsRootNodeId) { 533 if (target_effect_node->id > EffectTree::kContentsRootNodeId) {
535 ConcatInverseSurfaceContentsScale(target_effect_node, &target_to_layer); 534 ConcatInverseSurfaceContentsScale(target_effect_node, &target_to_layer);
536 #if DCHECK_IS_ON() 535 #if DCHECK_IS_ON()
537 VerifySurfaceContentsScalesMatch(target_effect_node->id, target_node_id, 536 VerifySurfaceContentsScalesMatch(target_effect_node->id, target_node_id,
538 effect_tree, transform_tree); 537 effect_tree, transform_tree);
539 #endif 538 #endif
540 } 539 }
541 } 540 }
542 gfx::Transform target_to_content; 541 gfx::Transform target_to_content;
543 target_to_content.Translate(-layer->offset_to_transform_parent().x(), 542 target_to_content.Translate(-layer->offset_to_transform_parent().x(),
544 -layer->offset_to_transform_parent().y()); 543 -layer->offset_to_transform_parent().y());
(...skipping 655 matching lines...) Expand 10 before | Expand all | Expand 10 after
1200 bool layer_is_drawn, 1199 bool layer_is_drawn,
1201 const TransformTree& tree) { 1200 const TransformTree& tree) {
1202 return LayerNeedsUpdateInternal(layer, layer_is_drawn, tree); 1201 return LayerNeedsUpdateInternal(layer, layer_is_drawn, tree);
1203 } 1202 }
1204 1203
1205 gfx::Transform DrawTransform(const LayerImpl* layer, 1204 gfx::Transform DrawTransform(const LayerImpl* layer,
1206 const TransformTree& transform_tree, 1205 const TransformTree& transform_tree,
1207 const EffectTree& effect_tree) { 1206 const EffectTree& effect_tree) {
1208 gfx::Transform xform; 1207 gfx::Transform xform;
1209 const bool owns_non_root_surface = 1208 const bool owns_non_root_surface =
1210 !IsRootLayer(layer) && layer->has_render_surface(); 1209 !IsRootLayer(layer) && layer->render_surface();
1211 if (!owns_non_root_surface) { 1210 if (!owns_non_root_surface) {
1212 // If you're not the root, or you don't own a surface, you need to apply 1211 // If you're not the root, or you don't own a surface, you need to apply
1213 // your local offset. 1212 // your local offset.
1214 xform = transform_tree.ToTarget(layer->transform_tree_index(), 1213 xform =
1215 layer->render_target_effect_tree_index()); 1214 transform_tree.property_trees()->non_root_surfaces_enabled
1215 ? transform_tree.ToTarget(layer->transform_tree_index(),
1216 layer->render_target_effect_tree_index())
1217 : transform_tree.ToScreen(layer->transform_tree_index());
1216 if (layer->should_flatten_transform_from_property_tree()) 1218 if (layer->should_flatten_transform_from_property_tree())
1217 xform.FlattenTo2d(); 1219 xform.FlattenTo2d();
1218 xform.Translate(layer->offset_to_transform_parent().x(), 1220 xform.Translate(layer->offset_to_transform_parent().x(),
1219 layer->offset_to_transform_parent().y()); 1221 layer->offset_to_transform_parent().y());
1220 } else { 1222 } else {
1221 // Surfaces need to apply their surface contents scale. 1223 // Surfaces need to apply their surface contents scale.
1222 const EffectNode* effect_node = 1224 const EffectNode* effect_node =
1223 effect_tree.Node(layer->effect_tree_index()); 1225 effect_tree.Node(layer->effect_tree_index());
1224 xform.Scale(effect_node->surface_contents_scale.x(), 1226 xform.Scale(effect_node->surface_contents_scale.x(),
1225 effect_node->surface_contents_scale.y()); 1227 effect_node->surface_contents_scale.y());
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
1435 1437
1436 void ComputeLayerDrawProperties(LayerImpl* layer, 1438 void ComputeLayerDrawProperties(LayerImpl* layer,
1437 const PropertyTrees* property_trees) { 1439 const PropertyTrees* property_trees) {
1438 const TransformNode* transform_node = 1440 const TransformNode* transform_node =
1439 property_trees->transform_tree.Node(layer->transform_tree_index()); 1441 property_trees->transform_tree.Node(layer->transform_tree_index());
1440 const ClipNode* clip_node = 1442 const ClipNode* clip_node =
1441 property_trees->clip_tree.Node(layer->clip_tree_index()); 1443 property_trees->clip_tree.Node(layer->clip_tree_index());
1442 1444
1443 layer->draw_properties().screen_space_transform = 1445 layer->draw_properties().screen_space_transform =
1444 ScreenSpaceTransformInternal(layer, property_trees->transform_tree); 1446 ScreenSpaceTransformInternal(layer, property_trees->transform_tree);
1445 if (property_trees->non_root_surfaces_enabled) { 1447 if (property_trees->non_root_surfaces_enabled) {
ajuma 2016/08/04 19:58:30 Do we still need this branch if DrawTransform now
sunxd 2016/08/04 21:27:23 I think we can get rid of it.
1446 layer->draw_properties().target_space_transform = DrawTransform( 1448 layer->draw_properties().target_space_transform = DrawTransform(
1447 layer, property_trees->transform_tree, property_trees->effect_tree); 1449 layer, property_trees->transform_tree, property_trees->effect_tree);
1448 } else { 1450 } else {
1449 layer->draw_properties().target_space_transform = 1451 layer->draw_properties().target_space_transform =
1450 layer->draw_properties().screen_space_transform; 1452 layer->draw_properties().screen_space_transform;
1451 } 1453 }
1452 layer->draw_properties().screen_space_transform_is_animating = 1454 layer->draw_properties().screen_space_transform_is_animating =
1453 transform_node->to_screen_is_potentially_animated; 1455 transform_node->to_screen_is_potentially_animated;
1454 1456
1455 layer->draw_properties().opacity = 1457 layer->draw_properties().opacity =
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
1604 void UpdateElasticOverscroll(PropertyTrees* property_trees, 1606 void UpdateElasticOverscroll(PropertyTrees* property_trees,
1605 const Layer* overscroll_elasticity_layer, 1607 const Layer* overscroll_elasticity_layer,
1606 const gfx::Vector2dF& elastic_overscroll) { 1608 const gfx::Vector2dF& elastic_overscroll) {
1607 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, 1609 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer,
1608 elastic_overscroll); 1610 elastic_overscroll);
1609 } 1611 }
1610 1612
1611 } // namespace draw_property_utils 1613 } // namespace draw_property_utils
1612 1614
1613 } // namespace cc 1615 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698