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

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

Issue 2164833002: Use surface contents scale from effect tree (3) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: dead_code 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
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 1025 matching lines...) Expand 10 before | Expand all | Expand 10 after
1036 #if DCHECK_IS_ON() 1036 #if DCHECK_IS_ON()
1037 VerifySurfaceContentsScalesMatch(layer->effect_tree_index(), destination_id, 1037 VerifySurfaceContentsScalesMatch(layer->effect_tree_index(), destination_id,
1038 property_trees->effect_tree, 1038 property_trees->effect_tree,
1039 property_trees->transform_tree); 1039 property_trees->transform_tree);
1040 #endif 1040 #endif
1041 } 1041 }
1042 if (layer->should_flatten_transform_from_property_tree()) 1042 if (layer->should_flatten_transform_from_property_tree())
1043 draw_transform.FlattenTo2d(); 1043 draw_transform.FlattenTo2d();
1044 draw_transform.Translate(layer->offset_to_transform_parent().x(), 1044 draw_transform.Translate(layer->offset_to_transform_parent().x(),
1045 layer->offset_to_transform_parent().y()); 1045 layer->offset_to_transform_parent().y());
1046 DCHECK(draw_transform.ApproximatelyEqual( 1046 DCHECK(draw_transform.ApproximatelyEqual(DrawTransform(
1047 DrawTransform(layer, property_trees->transform_tree))) 1047 layer, property_trees->transform_tree, property_trees->effect_tree)))
1048 << " layer: " << layer->id() << " source transform id: " << source_id 1048 << " layer: " << layer->id() << " source transform id: " << source_id
1049 << " destination transform id: " << destination_id 1049 << " destination transform id: " << destination_id
1050 << " draw transform from transform tree: " 1050 << " draw transform from transform tree: "
1051 << DrawTransform(layer, property_trees->transform_tree).ToString() 1051 << DrawTransform(layer, property_trees->transform_tree,
1052 property_trees->effect_tree)
1053 .ToString()
1052 << " v.s." << draw_transform.ToString(); 1054 << " v.s." << draw_transform.ToString();
1053 } 1055 }
1054 1056
1055 static void ComputeVisibleRectsInternal( 1057 static void ComputeVisibleRectsInternal(
1056 LayerImpl* root_layer, 1058 LayerImpl* root_layer,
1057 PropertyTrees* property_trees, 1059 PropertyTrees* property_trees,
1058 bool can_render_to_separate_surface, 1060 bool can_render_to_separate_surface,
1059 std::vector<LayerImpl*>* visible_layer_list) { 1061 std::vector<LayerImpl*>* visible_layer_list) {
1060 if (property_trees->non_root_surfaces_enabled != 1062 if (property_trees->non_root_surfaces_enabled !=
1061 can_render_to_separate_surface) { 1063 can_render_to_separate_surface) {
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
1181 return LayerNeedsUpdateInternal(layer, layer_is_drawn, tree); 1183 return LayerNeedsUpdateInternal(layer, layer_is_drawn, tree);
1182 } 1184 }
1183 1185
1184 bool LayerNeedsUpdate(LayerImpl* layer, 1186 bool LayerNeedsUpdate(LayerImpl* layer,
1185 bool layer_is_drawn, 1187 bool layer_is_drawn,
1186 const TransformTree& tree) { 1188 const TransformTree& tree) {
1187 return LayerNeedsUpdateInternal(layer, layer_is_drawn, tree); 1189 return LayerNeedsUpdateInternal(layer, layer_is_drawn, tree);
1188 } 1190 }
1189 1191
1190 gfx::Transform DrawTransform(const LayerImpl* layer, 1192 gfx::Transform DrawTransform(const LayerImpl* layer,
1191 const TransformTree& tree) { 1193 const TransformTree& transform_tree,
1192 const TransformNode* node = tree.Node(layer->transform_tree_index()); 1194 const EffectTree& effect_tree) {
1193 gfx::Transform xform; 1195 gfx::Transform xform;
1194 const bool owns_non_root_surface = 1196 const bool owns_non_root_surface =
1195 !IsRootLayer(layer) && layer->has_render_surface(); 1197 !IsRootLayer(layer) && layer->has_render_surface();
1196 if (!owns_non_root_surface) { 1198 if (!owns_non_root_surface) {
1197 // If you're not the root, or you don't own a surface, you need to apply 1199 // If you're not the root, or you don't own a surface, you need to apply
1198 // your local offset. 1200 // your local offset.
1199 xform = tree.ToTarget(layer->transform_tree_index()); 1201 xform = transform_tree.ToTarget(layer->transform_tree_index());
1200 if (layer->should_flatten_transform_from_property_tree()) 1202 if (layer->should_flatten_transform_from_property_tree())
1201 xform.FlattenTo2d(); 1203 xform.FlattenTo2d();
1202 xform.Translate(layer->offset_to_transform_parent().x(), 1204 xform.Translate(layer->offset_to_transform_parent().x(),
1203 layer->offset_to_transform_parent().y()); 1205 layer->offset_to_transform_parent().y());
1204 } else { 1206 } else {
1205 // Surfaces need to apply their surface contents scale. 1207 // Surfaces need to apply their surface contents scale. we don't have to
ajuma 2016/07/19 21:59:58 Nit: capitalize 'w'
jaydasika 2016/07/19 22:56:12 Done.
1206 xform.Scale(node->surface_contents_scale.x(), 1208 // apply it for root.
1207 node->surface_contents_scale.y()); 1209 if (layer->transform_tree_index() != 0) {
ajuma 2016/07/19 21:59:58 Should this be checking for the root surface rathe
jaydasika 2016/07/19 22:56:12 this is inside the else (= owns_non_root_surface).
1210 const EffectNode* effect_node =
1211 effect_tree.Node(layer->effect_tree_index());
1212 xform.Scale(effect_node->surface_contents_scale.x(),
1213 effect_node->surface_contents_scale.y());
1214 #if DCHECK_IS_ON()
1215 VerifySurfaceContentsScalesMatch(layer->effect_tree_index(),
1216 layer->transform_tree_index(),
1217 effect_tree, transform_tree);
1218 #endif
1219 }
1208 } 1220 }
1209 return xform; 1221 return xform;
1210 } 1222 }
1211 1223
1212 static void SetSurfaceDrawTransform(const TransformTree& transform_tree, 1224 static void SetSurfaceDrawTransform(const TransformTree& transform_tree,
1213 const EffectTree& effect_tree, 1225 const EffectTree& effect_tree,
1214 RenderSurfaceImpl* render_surface) { 1226 RenderSurfaceImpl* render_surface) {
1215 const TransformNode* transform_node = 1227 const TransformNode* transform_node =
1216 transform_tree.Node(render_surface->TransformTreeIndex()); 1228 transform_tree.Node(render_surface->TransformTreeIndex());
1217 const EffectNode* effect_node = 1229 const EffectNode* effect_node =
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
1365 const gfx::Rect& layer_bounds_in_target_space, 1377 const gfx::Rect& layer_bounds_in_target_space,
1366 const gfx::Rect& clip_rect) { 1378 const gfx::Rect& clip_rect) {
1367 if (layer->is_clipped()) 1379 if (layer->is_clipped())
1368 return IntersectRects(layer_bounds_in_target_space, clip_rect); 1380 return IntersectRects(layer_bounds_in_target_space, clip_rect);
1369 1381
1370 return layer_bounds_in_target_space; 1382 return layer_bounds_in_target_space;
1371 } 1383 }
1372 1384
1373 static gfx::Transform ReplicaToSurfaceTransform( 1385 static gfx::Transform ReplicaToSurfaceTransform(
1374 const RenderSurfaceImpl* render_surface, 1386 const RenderSurfaceImpl* render_surface,
1375 const TransformTree& tree) { 1387 const TransformTree& transform_tree,
1388 const EffectTree& effect_tree) {
1376 gfx::Transform replica_to_surface; 1389 gfx::Transform replica_to_surface;
1377 if (!render_surface->HasReplica()) 1390 if (!render_surface->HasReplica())
1378 return replica_to_surface; 1391 return replica_to_surface;
1379 const LayerImpl* replica_layer = render_surface->ReplicaLayer(); 1392 const LayerImpl* replica_layer = render_surface->ReplicaLayer();
1380 const TransformNode* surface_transform_node = 1393 const EffectNode* surface_effect_node =
1381 tree.Node(render_surface->TransformTreeIndex()); 1394 effect_tree.Node(render_surface->EffectTreeIndex());
1382 replica_to_surface.Scale(surface_transform_node->surface_contents_scale.x(), 1395 if (render_surface->TransformTreeIndex() != 0) {
ajuma 2016/07/19 21:59:58 Checking the effect tree index might be cleaner he
jaydasika 2016/07/19 22:56:11 All callsites that apply surface content scale rig
ajuma 2016/07/19 23:08:38 Sounds good.
1383 surface_transform_node->surface_contents_scale.y()); 1396 replica_to_surface.Scale(surface_effect_node->surface_contents_scale.x(),
1397 surface_effect_node->surface_contents_scale.y());
1398 #if DCHECK_IS_ON()
1399 VerifySurfaceContentsScalesMatch(render_surface->EffectTreeIndex(),
1400 render_surface->TransformTreeIndex(),
1401 effect_tree, transform_tree);
1402 #endif
1403 }
1384 replica_to_surface.Translate(replica_layer->offset_to_transform_parent().x(), 1404 replica_to_surface.Translate(replica_layer->offset_to_transform_parent().x(),
1385 replica_layer->offset_to_transform_parent().y()); 1405 replica_layer->offset_to_transform_parent().y());
1386 gfx::Transform replica_transform_node_to_surface; 1406 gfx::Transform replica_transform_node_to_surface;
1387 tree.ComputeTransform(replica_layer->transform_tree_index(), 1407 transform_tree.ComputeTransform(replica_layer->transform_tree_index(),
1388 render_surface->TransformTreeIndex(), 1408 render_surface->TransformTreeIndex(),
1389 &replica_transform_node_to_surface); 1409 &replica_transform_node_to_surface);
1390 replica_to_surface.PreconcatTransform(replica_transform_node_to_surface); 1410 replica_to_surface.PreconcatTransform(replica_transform_node_to_surface);
1391 if (surface_transform_node->surface_contents_scale.x() != 0 && 1411 if (surface_effect_node->surface_contents_scale.x() != 0 &&
1392 surface_transform_node->surface_contents_scale.y() != 0) { 1412 surface_effect_node->surface_contents_scale.y() != 0) {
1393 replica_to_surface.Scale( 1413 replica_to_surface.Scale(
1394 1.0 / surface_transform_node->surface_contents_scale.x(), 1414 1.0 / surface_effect_node->surface_contents_scale.x(),
1395 1.0 / surface_transform_node->surface_contents_scale.y()); 1415 1.0 / surface_effect_node->surface_contents_scale.y());
1396 } 1416 }
1397 return replica_to_surface; 1417 return replica_to_surface;
1398 } 1418 }
1399 1419
1400 void ComputeLayerDrawProperties(LayerImpl* layer, 1420 void ComputeLayerDrawProperties(LayerImpl* layer,
1401 const PropertyTrees* property_trees) { 1421 const PropertyTrees* property_trees) {
1402 const TransformNode* transform_node = 1422 const TransformNode* transform_node =
1403 property_trees->transform_tree.Node(layer->transform_tree_index()); 1423 property_trees->transform_tree.Node(layer->transform_tree_index());
1404 const ClipNode* clip_node = 1424 const ClipNode* clip_node =
1405 property_trees->clip_tree.Node(layer->clip_tree_index()); 1425 property_trees->clip_tree.Node(layer->clip_tree_index());
1406 1426
1407 layer->draw_properties().screen_space_transform = 1427 layer->draw_properties().screen_space_transform =
1408 ScreenSpaceTransformInternal(layer, property_trees->transform_tree); 1428 ScreenSpaceTransformInternal(layer, property_trees->transform_tree);
1409 if (property_trees->non_root_surfaces_enabled) { 1429 if (property_trees->non_root_surfaces_enabled) {
1410 layer->draw_properties().target_space_transform = 1430 layer->draw_properties().target_space_transform = DrawTransform(
1411 DrawTransform(layer, property_trees->transform_tree); 1431 layer, property_trees->transform_tree, property_trees->effect_tree);
1412 } else { 1432 } else {
1413 layer->draw_properties().target_space_transform = 1433 layer->draw_properties().target_space_transform =
1414 layer->draw_properties().screen_space_transform; 1434 layer->draw_properties().screen_space_transform;
1415 } 1435 }
1416 layer->draw_properties().screen_space_transform_is_animating = 1436 layer->draw_properties().screen_space_transform_is_animating =
1417 transform_node->to_screen_is_potentially_animated; 1437 transform_node->to_screen_is_potentially_animated;
1418 1438
1419 layer->draw_properties().opacity = 1439 layer->draw_properties().opacity =
1420 LayerDrawOpacity(layer, property_trees->effect_tree); 1440 LayerDrawOpacity(layer, property_trees->effect_tree);
1421 if (property_trees->non_root_surfaces_enabled) { 1441 if (property_trees->non_root_surfaces_enabled) {
(...skipping 30 matching lines...) Expand all
1452 SetSurfaceDrawOpacity(property_trees->effect_tree, render_surface); 1472 SetSurfaceDrawOpacity(property_trees->effect_tree, render_surface);
1453 SetSurfaceDrawTransform(property_trees->transform_tree, 1473 SetSurfaceDrawTransform(property_trees->transform_tree,
1454 property_trees->effect_tree, render_surface); 1474 property_trees->effect_tree, render_surface);
1455 render_surface->SetScreenSpaceTransform( 1475 render_surface->SetScreenSpaceTransform(
1456 property_trees->transform_tree 1476 property_trees->transform_tree
1457 .ToScreenSpaceTransformWithoutSurfaceContentsScale( 1477 .ToScreenSpaceTransformWithoutSurfaceContentsScale(
1458 render_surface->TransformTreeIndex())); 1478 render_surface->TransformTreeIndex()));
1459 1479
1460 if (render_surface->HasReplica()) { 1480 if (render_surface->HasReplica()) {
1461 gfx::Transform replica_to_surface = ReplicaToSurfaceTransform( 1481 gfx::Transform replica_to_surface = ReplicaToSurfaceTransform(
1462 render_surface, property_trees->transform_tree); 1482 render_surface, property_trees->transform_tree,
1483 property_trees->effect_tree);
1463 render_surface->SetReplicaDrawTransform(render_surface->draw_transform() * 1484 render_surface->SetReplicaDrawTransform(render_surface->draw_transform() *
1464 replica_to_surface); 1485 replica_to_surface);
1465 render_surface->SetReplicaScreenSpaceTransform( 1486 render_surface->SetReplicaScreenSpaceTransform(
1466 render_surface->screen_space_transform() * replica_to_surface); 1487 render_surface->screen_space_transform() * replica_to_surface);
1467 } else { 1488 } else {
1468 render_surface->SetReplicaDrawTransform(gfx::Transform()); 1489 render_surface->SetReplicaDrawTransform(gfx::Transform());
1469 render_surface->SetReplicaScreenSpaceTransform(gfx::Transform()); 1490 render_surface->SetReplicaScreenSpaceTransform(gfx::Transform());
1470 } 1491 }
1471 1492
1472 SetSurfaceClipRect(property_trees->clip_tree.parent(clip_node), 1493 SetSurfaceClipRect(property_trees->clip_tree.parent(clip_node),
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
1569 void UpdateElasticOverscroll(PropertyTrees* property_trees, 1590 void UpdateElasticOverscroll(PropertyTrees* property_trees,
1570 const Layer* overscroll_elasticity_layer, 1591 const Layer* overscroll_elasticity_layer,
1571 const gfx::Vector2dF& elastic_overscroll) { 1592 const gfx::Vector2dF& elastic_overscroll) {
1572 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, 1593 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer,
1573 elastic_overscroll); 1594 elastic_overscroll);
1574 } 1595 }
1575 1596
1576 } // namespace draw_property_utils 1597 } // namespace draw_property_utils
1577 1598
1578 } // namespace cc 1599 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698