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

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

Issue 1823833002: cc : Update render surfaces using LayerListIterator instead of treewalk (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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 434 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 if (LayerType* mask_layer = replica_layer->mask_layer()) 445 if (LayerType* mask_layer = replica_layer->mask_layer())
446 update_layer_list->push_back(mask_layer); 446 update_layer_list->push_back(mask_layer);
447 } 447 }
448 448
449 for (size_t i = 0; i < layer->children().size(); ++i) { 449 for (size_t i = 0; i < layer->children().size(); ++i) {
450 FindLayersThatNeedUpdates(layer->child_at(i), transform_tree, effect_tree, 450 FindLayersThatNeedUpdates(layer->child_at(i), transform_tree, effect_tree,
451 update_layer_list, visible_layer_list); 451 update_layer_list, visible_layer_list);
452 } 452 }
453 } 453 }
454 454
455 template <typename LayerType>
456 void UpdateRenderSurfacesWithEffectTreeInternal(EffectTree* effect_tree, 455 void UpdateRenderSurfacesWithEffectTreeInternal(EffectTree* effect_tree,
457 LayerType* layer) { 456 Layer* layer) {
458 EffectNode* node = effect_tree->Node(layer->effect_tree_index()); 457 EffectNode* node = effect_tree->Node(layer->effect_tree_index());
459 458
460 if (node->owner_id == layer->id() && node->data.has_render_surface) 459 if (node->owner_id == layer->id() && node->data.has_render_surface)
461 layer->SetHasRenderSurface(true); 460 layer->SetHasRenderSurface(true);
462 else 461 else
463 layer->SetHasRenderSurface(false); 462 layer->SetHasRenderSurface(false);
464 463
465 for (size_t i = 0; i < layer->children().size(); ++i) { 464 for (size_t i = 0; i < layer->children().size(); ++i) {
466 UpdateRenderSurfacesWithEffectTreeInternal<LayerType>(effect_tree, 465 UpdateRenderSurfacesWithEffectTreeInternal(effect_tree, layer->child_at(i));
467 layer->child_at(i));
468 } 466 }
469 } 467 }
470 468
471 void UpdateRenderSurfacesWithEffectTree(EffectTree* effect_tree, Layer* layer) { 469 void UpdateRenderSurfacesWithEffectTree(EffectTree* effect_tree, Layer* layer) {
472 UpdateRenderSurfacesWithEffectTreeInternal<Layer>(effect_tree, layer); 470 UpdateRenderSurfacesWithEffectTreeInternal(effect_tree, layer);
ajuma 2016/03/22 14:41:54 Since there's no templating anymore, can we remove
jaydasika 2016/03/22 20:48:36 Done.
473 } 471 }
474 472
475 void UpdateRenderSurfacesNonRootSurfacesDisabled(LayerImpl* layer) { 473 void UpdateRenderSurfacesNonRootSurfacesDisabled(LayerImpl* layer) {
ajuma 2016/03/22 14:41:54 Can this be deleted now?
jaydasika 2016/03/22 20:48:36 Done.
476 // Only root layer has render surface, all other layers don't. 474 // Only root layer has render surface, all other layers don't.
477 layer->SetHasRenderSurface(!layer->parent()); 475 layer->SetHasRenderSurface(!layer->parent());
478 476
479 for (size_t i = 0; i < layer->children().size(); ++i) 477 for (size_t i = 0; i < layer->children().size(); ++i)
480 UpdateRenderSurfacesNonRootSurfacesDisabled(layer->child_at(i)); 478 UpdateRenderSurfacesNonRootSurfacesDisabled(layer->child_at(i));
481 } 479 }
482 480
483 void UpdateRenderSurfacesWithEffectTree(EffectTree* effect_tree, 481 void UpdateRenderSurfacesWithEffectTree(EffectTree* effect_tree,
484 bool non_root_surfaces_enabled, 482 bool non_root_surfaces_enabled,
485 LayerImpl* layer) { 483 LayerImpl* layer) {
486 if (!non_root_surfaces_enabled) 484 if (!non_root_surfaces_enabled) {
487 UpdateRenderSurfacesNonRootSurfacesDisabled(layer); 485 layer->SetHasRenderSurface(!layer->parent());
486 return;
487 }
488 EffectNode* node = effect_tree->Node(layer->effect_tree_index());
489
490 if (node->owner_id == layer->id() && node->data.has_render_surface)
491 layer->SetHasRenderSurface(true);
488 else 492 else
489 UpdateRenderSurfacesWithEffectTreeInternal<LayerImpl>(effect_tree, layer); 493 layer->SetHasRenderSurface(false);
ajuma 2016/03/22 14:41:55 To avoid code duplication, how about turning this
jaydasika 2016/03/22 20:48:34 Done.
490 } 494 }
491 495
492 } // namespace 496 } // namespace
493 497
494 static void ResetIfHasNanCoordinate(gfx::RectF* rect) { 498 static void ResetIfHasNanCoordinate(gfx::RectF* rect) {
495 if (std::isnan(rect->x()) || std::isnan(rect->y()) || 499 if (std::isnan(rect->x()) || std::isnan(rect->y()) ||
496 std::isnan(rect->right()) || std::isnan(rect->bottom())) 500 std::isnan(rect->right()) || std::isnan(rect->bottom()))
497 *rect = gfx::RectF(); 501 *rect = gfx::RectF();
498 } 502 }
499 503
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
733 std::vector<Layer*> visible_layer_list; 737 std::vector<Layer*> visible_layer_list;
734 ComputeVisibleRectsInternal(root_layer, property_trees, 738 ComputeVisibleRectsInternal(root_layer, property_trees,
735 can_render_to_separate_surface, update_layer_list, 739 can_render_to_separate_surface, update_layer_list,
736 &visible_layer_list); 740 &visible_layer_list);
737 } 741 }
738 742
739 void ComputeVisibleRects(LayerImpl* root_layer, 743 void ComputeVisibleRects(LayerImpl* root_layer,
740 PropertyTrees* property_trees, 744 PropertyTrees* property_trees,
741 bool can_render_to_separate_surface, 745 bool can_render_to_separate_surface,
742 LayerImplList* visible_layer_list) { 746 LayerImplList* visible_layer_list) {
743 UpdateRenderSurfacesWithEffectTree( 747 for (auto* layer : *root_layer->layer_tree_impl())
744 &property_trees->effect_tree, can_render_to_separate_surface, root_layer); 748 UpdateRenderSurfacesWithEffectTree(&property_trees->effect_tree,
749 can_render_to_separate_surface, layer);
745 if (can_render_to_separate_surface) 750 if (can_render_to_separate_surface)
746 ValidateRenderSurfaces(root_layer); 751 ValidateRenderSurfaces(root_layer);
747 LayerImplList update_layer_list; 752 LayerImplList update_layer_list;
748 ComputeVisibleRectsInternal(root_layer, property_trees, 753 ComputeVisibleRectsInternal(root_layer, property_trees,
749 can_render_to_separate_surface, 754 can_render_to_separate_surface,
750 &update_layer_list, visible_layer_list); 755 &update_layer_list, visible_layer_list);
751 } 756 }
752 757
753 template <typename LayerType> 758 template <typename LayerType>
754 static gfx::Transform DrawTransformInternal(const LayerType* layer, 759 static gfx::Transform DrawTransformInternal(const LayerType* layer,
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
1130 void UpdateElasticOverscroll(PropertyTrees* property_trees, 1135 void UpdateElasticOverscroll(PropertyTrees* property_trees,
1131 const Layer* overscroll_elasticity_layer, 1136 const Layer* overscroll_elasticity_layer,
1132 const gfx::Vector2dF& elastic_overscroll) { 1137 const gfx::Vector2dF& elastic_overscroll) {
1133 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, 1138 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer,
1134 elastic_overscroll); 1139 elastic_overscroll);
1135 } 1140 }
1136 1141
1137 } // namespace draw_property_utils 1142 } // namespace draw_property_utils
1138 1143
1139 } // namespace cc 1144 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698