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

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: Fix ASAN unittest crashes 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
« no previous file with comments | « cc/trees/damage_tracker_unittest.cc ('k') | cc/trees/layer_tree_host_common_unittest.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 435 matching lines...) Expand 10 before | Expand all | Expand 10 after
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> 455 template <typename LayerType>
456 void UpdateRenderSurfacesWithEffectTreeInternal(EffectTree* effect_tree, 456 void UpdateRenderSurfaceForLayer(EffectTree* effect_tree,
457 LayerType* layer) { 457 bool non_root_surfaces_enabled,
458 LayerType* layer) {
459 if (!non_root_surfaces_enabled) {
460 layer->SetHasRenderSurface(!layer->parent());
461 return;
462 }
458 EffectNode* node = effect_tree->Node(layer->effect_tree_index()); 463 EffectNode* node = effect_tree->Node(layer->effect_tree_index());
459 464
460 if (node->owner_id == layer->id() && node->data.has_render_surface) 465 if (node->owner_id == layer->id() && node->data.has_render_surface)
461 layer->SetHasRenderSurface(true); 466 layer->SetHasRenderSurface(true);
462 else 467 else
463 layer->SetHasRenderSurface(false); 468 layer->SetHasRenderSurface(false);
469 }
470
471 void UpdateRenderSurfacesForLayersRecursive(EffectTree* effect_tree,
472 Layer* layer) {
473 UpdateRenderSurfaceForLayer(effect_tree, true, layer);
464 474
465 for (size_t i = 0; i < layer->children().size(); ++i) { 475 for (size_t i = 0; i < layer->children().size(); ++i) {
466 UpdateRenderSurfacesWithEffectTreeInternal<LayerType>(effect_tree, 476 UpdateRenderSurfacesForLayersRecursive(effect_tree, layer->child_at(i));
467 layer->child_at(i));
468 } 477 }
469 } 478 }
470 479
471 void UpdateRenderSurfacesWithEffectTree(EffectTree* effect_tree, Layer* layer) {
472 UpdateRenderSurfacesWithEffectTreeInternal<Layer>(effect_tree, layer);
473 }
474
475 void UpdateRenderSurfacesNonRootSurfacesDisabled(LayerImpl* layer) {
476 // Only root layer has render surface, all other layers don't.
477 layer->SetHasRenderSurface(!layer->parent());
478
479 for (size_t i = 0; i < layer->children().size(); ++i)
480 UpdateRenderSurfacesNonRootSurfacesDisabled(layer->child_at(i));
481 }
482
483 void UpdateRenderSurfacesWithEffectTree(EffectTree* effect_tree,
484 bool non_root_surfaces_enabled,
485 LayerImpl* layer) {
486 if (!non_root_surfaces_enabled)
487 UpdateRenderSurfacesNonRootSurfacesDisabled(layer);
488 else
489 UpdateRenderSurfacesWithEffectTreeInternal<LayerImpl>(effect_tree, layer);
490 }
491
492 } // namespace 480 } // namespace
493 481
494 static void ResetIfHasNanCoordinate(gfx::RectF* rect) { 482 static void ResetIfHasNanCoordinate(gfx::RectF* rect) {
495 if (std::isnan(rect->x()) || std::isnan(rect->y()) || 483 if (std::isnan(rect->x()) || std::isnan(rect->y()) ||
496 std::isnan(rect->right()) || std::isnan(rect->bottom())) 484 std::isnan(rect->right()) || std::isnan(rect->bottom()))
497 *rect = gfx::RectF(); 485 *rect = gfx::RectF();
498 } 486 }
499 487
500 void ComputeClips(ClipTree* clip_tree, 488 void ComputeClips(ClipTree* clip_tree,
501 const TransformTree& transform_tree, 489 const TransformTree& transform_tree,
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
690 const gfx::Rect& viewport, 678 const gfx::Rect& viewport,
691 const gfx::Transform& device_transform, 679 const gfx::Transform& device_transform,
692 bool can_render_to_separate_surface, 680 bool can_render_to_separate_surface,
693 PropertyTrees* property_trees, 681 PropertyTrees* property_trees,
694 LayerList* update_layer_list) { 682 LayerList* update_layer_list) {
695 PropertyTreeBuilder::BuildPropertyTrees( 683 PropertyTreeBuilder::BuildPropertyTrees(
696 root_layer, page_scale_layer, inner_viewport_scroll_layer, 684 root_layer, page_scale_layer, inner_viewport_scroll_layer,
697 outer_viewport_scroll_layer, overscroll_elasticity_layer, 685 outer_viewport_scroll_layer, overscroll_elasticity_layer,
698 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, 686 elastic_overscroll, page_scale_factor, device_scale_factor, viewport,
699 device_transform, property_trees); 687 device_transform, property_trees);
700 UpdateRenderSurfacesWithEffectTree(&property_trees->effect_tree, root_layer); 688 UpdateRenderSurfacesForLayersRecursive(&property_trees->effect_tree,
689 root_layer);
701 ValidateRenderSurfaces(root_layer); 690 ValidateRenderSurfaces(root_layer);
702 ComputeVisibleRects(root_layer, property_trees, 691 ComputeVisibleRects(root_layer, property_trees,
703 can_render_to_separate_surface, update_layer_list); 692 can_render_to_separate_surface, update_layer_list);
704 } 693 }
705 694
706 void BuildPropertyTreesAndComputeVisibleRects( 695 void BuildPropertyTreesAndComputeVisibleRects(
707 LayerImpl* root_layer, 696 LayerImpl* root_layer,
708 const LayerImpl* page_scale_layer, 697 const LayerImpl* page_scale_layer,
709 const LayerImpl* inner_viewport_scroll_layer, 698 const LayerImpl* inner_viewport_scroll_layer,
710 const LayerImpl* outer_viewport_scroll_layer, 699 const LayerImpl* outer_viewport_scroll_layer,
(...skipping 22 matching lines...) Expand all
733 std::vector<Layer*> visible_layer_list; 722 std::vector<Layer*> visible_layer_list;
734 ComputeVisibleRectsInternal(root_layer, property_trees, 723 ComputeVisibleRectsInternal(root_layer, property_trees,
735 can_render_to_separate_surface, update_layer_list, 724 can_render_to_separate_surface, update_layer_list,
736 &visible_layer_list); 725 &visible_layer_list);
737 } 726 }
738 727
739 void ComputeVisibleRects(LayerImpl* root_layer, 728 void ComputeVisibleRects(LayerImpl* root_layer,
740 PropertyTrees* property_trees, 729 PropertyTrees* property_trees,
741 bool can_render_to_separate_surface, 730 bool can_render_to_separate_surface,
742 LayerImplList* visible_layer_list) { 731 LayerImplList* visible_layer_list) {
743 UpdateRenderSurfacesWithEffectTree( 732 for (auto* layer : *root_layer->layer_tree_impl())
744 &property_trees->effect_tree, can_render_to_separate_surface, root_layer); 733 UpdateRenderSurfaceForLayer(&property_trees->effect_tree,
734 can_render_to_separate_surface, layer);
745 if (can_render_to_separate_surface) 735 if (can_render_to_separate_surface)
746 ValidateRenderSurfaces(root_layer); 736 ValidateRenderSurfaces(root_layer);
747 LayerImplList update_layer_list; 737 LayerImplList update_layer_list;
748 ComputeVisibleRectsInternal(root_layer, property_trees, 738 ComputeVisibleRectsInternal(root_layer, property_trees,
749 can_render_to_separate_surface, 739 can_render_to_separate_surface,
750 &update_layer_list, visible_layer_list); 740 &update_layer_list, visible_layer_list);
751 } 741 }
752 742
753 template <typename LayerType> 743 template <typename LayerType>
754 static gfx::Transform DrawTransformInternal(const LayerType* layer, 744 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, 1120 void UpdateElasticOverscroll(PropertyTrees* property_trees,
1131 const Layer* overscroll_elasticity_layer, 1121 const Layer* overscroll_elasticity_layer,
1132 const gfx::Vector2dF& elastic_overscroll) { 1122 const gfx::Vector2dF& elastic_overscroll) {
1133 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, 1123 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer,
1134 elastic_overscroll); 1124 elastic_overscroll);
1135 } 1125 }
1136 1126
1137 } // namespace draw_property_utils 1127 } // namespace draw_property_utils
1138 1128
1139 } // namespace cc 1129 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/damage_tracker_unittest.cc ('k') | cc/trees/layer_tree_host_common_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698