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 434 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |