Chromium Code Reviews| 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 423 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 434 // backface is not visible. | 434 // backface is not visible. |
| 435 if (TransformToScreenIsKnown(layer, backface_transform_id, tree) && | 435 if (TransformToScreenIsKnown(layer, backface_transform_id, tree) && |
| 436 !HasSingularTransform(backface_transform_id, tree) && | 436 !HasSingularTransform(backface_transform_id, tree) && |
| 437 IsLayerBackFaceVisible(layer, backface_transform_id, tree)) | 437 IsLayerBackFaceVisible(layer, backface_transform_id, tree)) |
| 438 return false; | 438 return false; |
| 439 } | 439 } |
| 440 | 440 |
| 441 return true; | 441 return true; |
| 442 } | 442 } |
| 443 | 443 |
| 444 void FindLayersThatNeedUpdates(Layer* layer, | 444 static void FindLayersThatNeedUpdates(Layer* layer, |
| 445 const TransformTree& transform_tree, | 445 const TransformTree& transform_tree, |
| 446 const EffectTree& effect_tree, | 446 const EffectTree& effect_tree, |
| 447 LayerList* update_layer_list, | 447 LayerList* update_layer_list) { |
| 448 std::vector<Layer*>* visible_layer_list) { | |
| 449 DCHECK_GE(layer->effect_tree_index(), 0); | 448 DCHECK_GE(layer->effect_tree_index(), 0); |
| 450 bool layer_is_drawn = | 449 bool layer_is_drawn = |
| 451 effect_tree.Node(layer->effect_tree_index())->data.is_drawn; | 450 effect_tree.Node(layer->effect_tree_index())->data.is_drawn; |
| 452 | 451 |
| 453 if (!IsRootLayer(layer) && | 452 if (!IsRootLayer(layer) && |
| 454 SubtreeShouldBeSkipped(layer, layer_is_drawn, transform_tree)) | 453 SubtreeShouldBeSkipped(layer, layer_is_drawn, transform_tree)) |
| 455 return; | 454 return; |
| 456 | 455 |
| 457 if (LayerNeedsUpdate(layer, layer_is_drawn, transform_tree)) { | 456 if (LayerNeedsUpdate(layer, layer_is_drawn, transform_tree)) { |
| 458 visible_layer_list->push_back(layer); | |
| 459 update_layer_list->push_back(layer); | 457 update_layer_list->push_back(layer); |
| 460 } | 458 } |
| 461 | 459 |
| 462 // Append mask layers to the update layer list. They don't have valid visible | 460 // Append mask layers to the update layer list. They don't have valid visible |
| 463 // rects, so need to get added after the above calculation. Replica layers | 461 // rects, so need to get added after the above calculation. Replica layers |
| 464 // don't need to be updated. | 462 // don't need to be updated. |
| 465 if (Layer* mask_layer = layer->mask_layer()) | 463 if (Layer* mask_layer = layer->mask_layer()) |
| 466 update_layer_list->push_back(mask_layer); | 464 update_layer_list->push_back(mask_layer); |
| 467 if (Layer* replica_layer = layer->replica_layer()) { | 465 if (Layer* replica_layer = layer->replica_layer()) { |
| 468 if (Layer* mask_layer = replica_layer->mask_layer()) | 466 if (Layer* mask_layer = replica_layer->mask_layer()) |
| 469 update_layer_list->push_back(mask_layer); | 467 update_layer_list->push_back(mask_layer); |
| 470 } | 468 } |
| 471 | 469 |
| 472 for (size_t i = 0; i < layer->children().size(); ++i) { | 470 for (size_t i = 0; i < layer->children().size(); ++i) { |
| 473 FindLayersThatNeedUpdates(layer->child_at(i), transform_tree, effect_tree, | 471 FindLayersThatNeedUpdates(layer->child_at(i), transform_tree, effect_tree, |
| 474 update_layer_list, visible_layer_list); | 472 update_layer_list); |
| 475 } | 473 } |
| 476 } | 474 } |
| 477 | 475 |
| 478 void FindLayersThatNeedUpdates(LayerImpl* layer, | 476 void FindLayersThatNeedUpdates(LayerImpl* layer, |
| 479 const TransformTree& transform_tree, | 477 const TransformTree& transform_tree, |
| 480 const EffectTree& effect_tree, | 478 const EffectTree& effect_tree, |
| 481 LayerImplList* update_layer_list, | 479 LayerImplList* update_layer_list, |
| 482 std::vector<LayerImpl*>* visible_layer_list) { | 480 std::vector<LayerImpl*>* visible_layer_list) { |
| 483 DCHECK_GE(layer->effect_tree_index(), 0); | 481 DCHECK_GE(layer->effect_tree_index(), 0); |
| 484 for (auto* layer_impl : *layer->layer_tree_impl()) { | 482 for (auto* layer_impl : *layer->layer_tree_impl()) { |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 683 } | 681 } |
| 684 | 682 |
| 685 void ComputeEffects(EffectTree* effect_tree) { | 683 void ComputeEffects(EffectTree* effect_tree) { |
| 686 if (!effect_tree->needs_update()) | 684 if (!effect_tree->needs_update()) |
| 687 return; | 685 return; |
| 688 for (int i = 1; i < static_cast<int>(effect_tree->size()); ++i) | 686 for (int i = 1; i < static_cast<int>(effect_tree->size()); ++i) |
| 689 effect_tree->UpdateEffects(i); | 687 effect_tree->UpdateEffects(i); |
| 690 effect_tree->set_needs_update(false); | 688 effect_tree->set_needs_update(false); |
| 691 } | 689 } |
| 692 | 690 |
| 693 template <typename LayerType> | |
| 694 static void ComputeVisibleRectsInternal( | 691 static void ComputeVisibleRectsInternal( |
| 695 LayerType* root_layer, | 692 LayerImpl* root_layer, |
| 696 PropertyTrees* property_trees, | 693 PropertyTrees* property_trees, |
| 697 bool can_render_to_separate_surface, | 694 bool can_render_to_separate_surface, |
| 698 typename LayerType::LayerListType* update_layer_list, | 695 LayerImplList* update_layer_list, |
| 699 std::vector<LayerType*>* visible_layer_list) { | 696 std::vector<LayerImpl*>* visible_layer_list) { |
| 700 if (property_trees->non_root_surfaces_enabled != | 697 if (property_trees->non_root_surfaces_enabled != |
| 701 can_render_to_separate_surface) { | 698 can_render_to_separate_surface) { |
| 702 property_trees->non_root_surfaces_enabled = can_render_to_separate_surface; | 699 property_trees->non_root_surfaces_enabled = can_render_to_separate_surface; |
| 703 property_trees->transform_tree.set_needs_update(true); | 700 property_trees->transform_tree.set_needs_update(true); |
| 704 } | 701 } |
| 705 if (property_trees->transform_tree.needs_update()) | 702 if (property_trees->transform_tree.needs_update()) |
| 706 property_trees->clip_tree.set_needs_update(true); | 703 property_trees->clip_tree.set_needs_update(true); |
| 707 ComputeTransforms(&property_trees->transform_tree); | 704 ComputeTransforms(&property_trees->transform_tree); |
| 708 ComputeClips(&property_trees->clip_tree, property_trees->transform_tree, | 705 ComputeClips(&property_trees->clip_tree, property_trees->transform_tree, |
| 709 can_render_to_separate_surface); | 706 can_render_to_separate_surface); |
| 710 ComputeEffects(&property_trees->effect_tree); | 707 ComputeEffects(&property_trees->effect_tree); |
| 711 | 708 |
| 712 FindLayersThatNeedUpdates(root_layer, property_trees->transform_tree, | 709 FindLayersThatNeedUpdates(root_layer, property_trees->transform_tree, |
| 713 property_trees->effect_tree, update_layer_list, | 710 property_trees->effect_tree, update_layer_list, |
| 714 visible_layer_list); | 711 visible_layer_list); |
| 715 CalculateVisibleRects<LayerType>( | 712 CalculateVisibleRects(*visible_layer_list, property_trees->clip_tree, |
| 716 *visible_layer_list, property_trees->clip_tree, | 713 property_trees->transform_tree, |
| 717 property_trees->transform_tree, can_render_to_separate_surface); | 714 can_render_to_separate_surface); |
| 715 } | |
| 716 | |
| 717 void Update(Layer* root_layer, | |
| 718 PropertyTrees* property_trees, | |
| 719 bool can_render_to_separate_surface, | |
| 720 LayerList* update_layer_list) { | |
| 721 UpdateRenderSurfacesForLayersRecursive(&property_trees->effect_tree, | |
| 722 root_layer); | |
| 723 #if DCHECK_IS_ON() | |
| 724 ValidateRenderSurfacesRecursive(root_layer); | |
| 725 #endif | |
| 726 if (property_trees->non_root_surfaces_enabled != | |
| 727 can_render_to_separate_surface) { | |
| 728 property_trees->non_root_surfaces_enabled = can_render_to_separate_surface; | |
| 729 property_trees->transform_tree.set_needs_update(true); | |
| 730 } | |
| 731 if (property_trees->transform_tree.needs_update()) | |
| 732 property_trees->clip_tree.set_needs_update(true); | |
| 733 ComputeTransforms(&property_trees->transform_tree); | |
| 734 ComputeClips(&property_trees->clip_tree, property_trees->transform_tree, | |
| 735 can_render_to_separate_surface); | |
| 736 ComputeEffects(&property_trees->effect_tree); | |
| 737 FindLayersThatNeedUpdates(root_layer, property_trees->transform_tree, | |
| 738 property_trees->effect_tree, update_layer_list); | |
| 739 } | |
| 740 | |
| 741 void ComputeVisibleRectsForTesting(PropertyTrees* property_trees, | |
| 742 bool can_render_to_separate_surface, | |
| 743 LayerList* update_layer_list) { | |
| 744 std::vector<Layer*> visible_layer_list; | |
| 745 for (auto layer : *update_layer_list) { | |
| 746 visible_layer_list.push_back(layer.get()); | |
| 747 } | |
| 748 CalculateVisibleRects(visible_layer_list, property_trees->clip_tree, | |
| 749 property_trees->transform_tree, | |
| 750 can_render_to_separate_surface); | |
| 718 } | 751 } |
| 719 | 752 |
| 720 void BuildPropertyTreesAndComputeVisibleRects( | 753 void BuildPropertyTreesAndComputeVisibleRects( |
|
jaydasika
2016/04/02 02:54:10
Wanted to delete this function but calling the fun
ajuma
2016/04/04 14:15:05
It's probably just that PropertyTreeBuilder isn't
jaydasika
2016/04/04 18:41:09
That was the reason. Thanks
| |
| 721 Layer* root_layer, | 754 Layer* root_layer, |
| 722 const Layer* page_scale_layer, | 755 const Layer* page_scale_layer, |
| 723 const Layer* inner_viewport_scroll_layer, | 756 const Layer* inner_viewport_scroll_layer, |
| 724 const Layer* outer_viewport_scroll_layer, | 757 const Layer* outer_viewport_scroll_layer, |
| 725 const Layer* overscroll_elasticity_layer, | 758 const Layer* overscroll_elasticity_layer, |
| 726 const gfx::Vector2dF& elastic_overscroll, | 759 const gfx::Vector2dF& elastic_overscroll, |
| 727 float page_scale_factor, | 760 float page_scale_factor, |
| 728 float device_scale_factor, | 761 float device_scale_factor, |
| 729 const gfx::Rect& viewport, | 762 const gfx::Rect& viewport, |
| 730 const gfx::Transform& device_transform, | 763 const gfx::Transform& device_transform, |
| 731 bool can_render_to_separate_surface, | 764 PropertyTrees* property_trees) { |
| 732 PropertyTrees* property_trees, | |
| 733 LayerList* update_layer_list) { | |
| 734 PropertyTreeBuilder::BuildPropertyTrees( | 765 PropertyTreeBuilder::BuildPropertyTrees( |
| 735 root_layer, page_scale_layer, inner_viewport_scroll_layer, | 766 root_layer, page_scale_layer, inner_viewport_scroll_layer, |
| 736 outer_viewport_scroll_layer, overscroll_elasticity_layer, | 767 outer_viewport_scroll_layer, overscroll_elasticity_layer, |
| 737 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, | 768 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, |
| 738 device_transform, property_trees); | 769 device_transform, property_trees); |
| 739 UpdateRenderSurfacesForLayersRecursive(&property_trees->effect_tree, | |
| 740 root_layer); | |
| 741 #if DCHECK_IS_ON() | |
| 742 ValidateRenderSurfacesRecursive(root_layer); | |
| 743 #endif | |
| 744 ComputeVisibleRects(root_layer, property_trees, | |
| 745 can_render_to_separate_surface, update_layer_list); | |
| 746 } | 770 } |
| 747 | 771 |
| 748 void BuildPropertyTreesAndComputeVisibleRects( | 772 void BuildPropertyTreesAndComputeVisibleRects( |
| 749 LayerImpl* root_layer, | 773 LayerImpl* root_layer, |
| 750 const LayerImpl* page_scale_layer, | 774 const LayerImpl* page_scale_layer, |
| 751 const LayerImpl* inner_viewport_scroll_layer, | 775 const LayerImpl* inner_viewport_scroll_layer, |
| 752 const LayerImpl* outer_viewport_scroll_layer, | 776 const LayerImpl* outer_viewport_scroll_layer, |
| 753 const LayerImpl* overscroll_elasticity_layer, | 777 const LayerImpl* overscroll_elasticity_layer, |
| 754 const gfx::Vector2dF& elastic_overscroll, | 778 const gfx::Vector2dF& elastic_overscroll, |
| 755 float page_scale_factor, | 779 float page_scale_factor, |
| 756 float device_scale_factor, | 780 float device_scale_factor, |
| 757 const gfx::Rect& viewport, | 781 const gfx::Rect& viewport, |
| 758 const gfx::Transform& device_transform, | 782 const gfx::Transform& device_transform, |
| 759 bool can_render_to_separate_surface, | 783 bool can_render_to_separate_surface, |
| 760 PropertyTrees* property_trees, | 784 PropertyTrees* property_trees, |
| 761 LayerImplList* visible_layer_list) { | 785 LayerImplList* visible_layer_list) { |
| 762 PropertyTreeBuilder::BuildPropertyTrees( | 786 PropertyTreeBuilder::BuildPropertyTrees( |
| 763 root_layer, page_scale_layer, inner_viewport_scroll_layer, | 787 root_layer, page_scale_layer, inner_viewport_scroll_layer, |
| 764 outer_viewport_scroll_layer, overscroll_elasticity_layer, | 788 outer_viewport_scroll_layer, overscroll_elasticity_layer, |
| 765 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, | 789 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, |
| 766 device_transform, property_trees); | 790 device_transform, property_trees); |
| 767 ComputeVisibleRects(root_layer, property_trees, | 791 ComputeVisibleRects(root_layer, property_trees, |
| 768 can_render_to_separate_surface, visible_layer_list); | 792 can_render_to_separate_surface, visible_layer_list); |
| 769 } | 793 } |
| 770 | 794 |
| 771 void ComputeVisibleRects(Layer* root_layer, | |
| 772 PropertyTrees* property_trees, | |
| 773 bool can_render_to_separate_surface, | |
| 774 LayerList* update_layer_list) { | |
| 775 std::vector<Layer*> visible_layer_list; | |
| 776 ComputeVisibleRectsInternal(root_layer, property_trees, | |
| 777 can_render_to_separate_surface, update_layer_list, | |
| 778 &visible_layer_list); | |
| 779 } | |
| 780 | |
| 781 void ComputeVisibleRects(LayerImpl* root_layer, | 795 void ComputeVisibleRects(LayerImpl* root_layer, |
| 782 PropertyTrees* property_trees, | 796 PropertyTrees* property_trees, |
| 783 bool can_render_to_separate_surface, | 797 bool can_render_to_separate_surface, |
| 784 LayerImplList* visible_layer_list) { | 798 LayerImplList* visible_layer_list) { |
| 785 for (auto* layer : *root_layer->layer_tree_impl()) { | 799 for (auto* layer : *root_layer->layer_tree_impl()) { |
| 786 UpdateRenderSurfaceForLayer(&property_trees->effect_tree, | 800 UpdateRenderSurfaceForLayer(&property_trees->effect_tree, |
| 787 can_render_to_separate_surface, layer); | 801 can_render_to_separate_surface, layer); |
| 788 #if DCHECK_IS_ON() | 802 #if DCHECK_IS_ON() |
| 789 if (can_render_to_separate_surface) | 803 if (can_render_to_separate_surface) |
| 790 ValidateRenderSurfaceForLayer(layer); | 804 ValidateRenderSurfaceForLayer(layer); |
| (...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1176 void UpdateElasticOverscroll(PropertyTrees* property_trees, | 1190 void UpdateElasticOverscroll(PropertyTrees* property_trees, |
| 1177 const Layer* overscroll_elasticity_layer, | 1191 const Layer* overscroll_elasticity_layer, |
| 1178 const gfx::Vector2dF& elastic_overscroll) { | 1192 const gfx::Vector2dF& elastic_overscroll) { |
| 1179 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, | 1193 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, |
| 1180 elastic_overscroll); | 1194 elastic_overscroll); |
| 1181 } | 1195 } |
| 1182 | 1196 |
| 1183 } // namespace draw_property_utils | 1197 } // namespace draw_property_utils |
| 1184 | 1198 |
| 1185 } // namespace cc | 1199 } // namespace cc |
| OLD | NEW |