OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |