| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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/layer_tree_host_common.h" | 5 #include "cc/trees/layer_tree_host_common.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 const gfx::Size& device_viewport_size, | 71 const gfx::Size& device_viewport_size, |
| 72 const gfx::Transform& device_transform, | 72 const gfx::Transform& device_transform, |
| 73 float device_scale_factor, | 73 float device_scale_factor, |
| 74 float page_scale_factor, | 74 float page_scale_factor, |
| 75 const LayerImpl* page_scale_layer, | 75 const LayerImpl* page_scale_layer, |
| 76 const LayerImpl* inner_viewport_scroll_layer, | 76 const LayerImpl* inner_viewport_scroll_layer, |
| 77 const LayerImpl* outer_viewport_scroll_layer, | 77 const LayerImpl* outer_viewport_scroll_layer, |
| 78 const gfx::Vector2dF& elastic_overscroll, | 78 const gfx::Vector2dF& elastic_overscroll, |
| 79 const LayerImpl* elastic_overscroll_application_layer, | 79 const LayerImpl* elastic_overscroll_application_layer, |
| 80 int max_texture_size, | 80 int max_texture_size, |
| 81 bool can_render_to_separate_surface, | |
| 82 bool can_adjust_raster_scales, | 81 bool can_adjust_raster_scales, |
| 83 RenderSurfaceList* render_surface_list, | 82 RenderSurfaceList* render_surface_list, |
| 84 PropertyTrees* property_trees) | 83 PropertyTrees* property_trees) |
| 85 : root_layer(root_layer), | 84 : root_layer(root_layer), |
| 86 device_viewport_size(device_viewport_size), | 85 device_viewport_size(device_viewport_size), |
| 87 device_transform(device_transform), | 86 device_transform(device_transform), |
| 88 device_scale_factor(device_scale_factor), | 87 device_scale_factor(device_scale_factor), |
| 89 page_scale_factor(page_scale_factor), | 88 page_scale_factor(page_scale_factor), |
| 90 page_scale_layer(page_scale_layer), | 89 page_scale_layer(page_scale_layer), |
| 91 inner_viewport_scroll_layer(inner_viewport_scroll_layer), | 90 inner_viewport_scroll_layer(inner_viewport_scroll_layer), |
| 92 outer_viewport_scroll_layer(outer_viewport_scroll_layer), | 91 outer_viewport_scroll_layer(outer_viewport_scroll_layer), |
| 93 elastic_overscroll(elastic_overscroll), | 92 elastic_overscroll(elastic_overscroll), |
| 94 elastic_overscroll_application_layer( | 93 elastic_overscroll_application_layer( |
| 95 elastic_overscroll_application_layer), | 94 elastic_overscroll_application_layer), |
| 96 max_texture_size(max_texture_size), | 95 max_texture_size(max_texture_size), |
| 97 can_render_to_separate_surface(can_render_to_separate_surface), | |
| 98 can_adjust_raster_scales(can_adjust_raster_scales), | 96 can_adjust_raster_scales(can_adjust_raster_scales), |
| 99 render_surface_list(render_surface_list), | 97 render_surface_list(render_surface_list), |
| 100 property_trees(property_trees) {} | 98 property_trees(property_trees) {} |
| 101 | 99 |
| 102 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting:: | 100 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting:: |
| 103 CalcDrawPropsImplInputsForTesting(LayerImpl* root_layer, | 101 CalcDrawPropsImplInputsForTesting(LayerImpl* root_layer, |
| 104 const gfx::Size& device_viewport_size, | 102 const gfx::Size& device_viewport_size, |
| 105 const gfx::Transform& device_transform, | 103 const gfx::Transform& device_transform, |
| 106 float device_scale_factor, | 104 float device_scale_factor, |
| 107 RenderSurfaceList* render_surface_list) | 105 RenderSurfaceList* render_surface_list) |
| 108 : CalcDrawPropsImplInputs(root_layer, | 106 : CalcDrawPropsImplInputs(root_layer, |
| 109 device_viewport_size, | 107 device_viewport_size, |
| 110 device_transform, | 108 device_transform, |
| 111 device_scale_factor, | 109 device_scale_factor, |
| 112 1.f, | 110 1.f, |
| 113 NULL, | 111 NULL, |
| 114 NULL, | 112 NULL, |
| 115 NULL, | 113 NULL, |
| 116 gfx::Vector2dF(), | 114 gfx::Vector2dF(), |
| 117 NULL, | 115 NULL, |
| 118 std::numeric_limits<int>::max() / 2, | 116 std::numeric_limits<int>::max() / 2, |
| 119 true, | |
| 120 false, | 117 false, |
| 121 render_surface_list, | 118 render_surface_list, |
| 122 GetPropertyTrees(root_layer)) { | 119 GetPropertyTrees(root_layer)) { |
| 123 DCHECK(root_layer); | 120 DCHECK(root_layer); |
| 124 DCHECK(render_surface_list); | 121 DCHECK(render_surface_list); |
| 125 } | 122 } |
| 126 | 123 |
| 127 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting:: | 124 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting:: |
| 128 CalcDrawPropsImplInputsForTesting(LayerImpl* root_layer, | 125 CalcDrawPropsImplInputsForTesting(LayerImpl* root_layer, |
| 129 const gfx::Size& device_viewport_size, | 126 const gfx::Size& device_viewport_size, |
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 340 ? !property_trees->GetFromTarget( | 337 ? !property_trees->GetFromTarget( |
| 341 layer->transform_tree_index(), | 338 layer->transform_tree_index(), |
| 342 effect_node->closest_ancestor_with_copy_request_id, | 339 effect_node->closest_ancestor_with_copy_request_id, |
| 343 &from_target) | 340 &from_target) |
| 344 : !transform_node->ancestors_are_invertible; | 341 : !transform_node->ancestors_are_invertible; |
| 345 } | 342 } |
| 346 | 343 |
| 347 static void ComputeInitialRenderSurfaceList( | 344 static void ComputeInitialRenderSurfaceList( |
| 348 LayerTreeImpl* layer_tree_impl, | 345 LayerTreeImpl* layer_tree_impl, |
| 349 PropertyTrees* property_trees, | 346 PropertyTrees* property_trees, |
| 350 RenderSurfaceList* render_surface_list, | 347 RenderSurfaceList* render_surface_list) { |
| 351 bool can_render_to_separate_surface) { | |
| 352 EffectTree& effect_tree = property_trees->effect_tree; | 348 EffectTree& effect_tree = property_trees->effect_tree; |
| 353 for (int i = EffectTree::kContentsRootNodeId; | 349 for (int i = EffectTree::kContentsRootNodeId; |
| 354 i < static_cast<int>(effect_tree.size()); ++i) { | 350 i < static_cast<int>(effect_tree.size()); ++i) { |
| 355 if (RenderSurfaceImpl* render_surface = effect_tree.GetRenderSurface(i)) { | 351 if (RenderSurfaceImpl* render_surface = effect_tree.GetRenderSurface(i)) { |
| 356 render_surface->set_is_render_surface_list_member(false); | 352 render_surface->set_is_render_surface_list_member(false); |
| 357 render_surface->reset_num_contributors(); | 353 render_surface->reset_num_contributors(); |
| 358 ClearMaskLayersContributeToDrawnRenderSurface(render_surface); | 354 ClearMaskLayersContributeToDrawnRenderSurface(render_surface); |
| 359 } | 355 } |
| 360 } | 356 } |
| 361 | 357 |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 481 } | 477 } |
| 482 } | 478 } |
| 483 } | 479 } |
| 484 } | 480 } |
| 485 } | 481 } |
| 486 | 482 |
| 487 static void CalculateRenderSurfaceLayerList( | 483 static void CalculateRenderSurfaceLayerList( |
| 488 LayerTreeImpl* layer_tree_impl, | 484 LayerTreeImpl* layer_tree_impl, |
| 489 PropertyTrees* property_trees, | 485 PropertyTrees* property_trees, |
| 490 RenderSurfaceList* render_surface_list, | 486 RenderSurfaceList* render_surface_list, |
| 491 const bool can_render_to_separate_surface, | |
| 492 const int max_texture_size) { | 487 const int max_texture_size) { |
| 493 RenderSurfaceList initial_render_surface_list; | 488 RenderSurfaceList initial_render_surface_list; |
| 494 | 489 |
| 495 // First compute a list that might include surfaces that later turn out to | 490 // First compute a list that might include surfaces that later turn out to |
| 496 // have an empty content rect. After surface content rects are computed, | 491 // have an empty content rect. After surface content rects are computed, |
| 497 // produce a final list that omits empty surfaces. | 492 // produce a final list that omits empty surfaces. |
| 498 ComputeInitialRenderSurfaceList(layer_tree_impl, property_trees, | 493 ComputeInitialRenderSurfaceList(layer_tree_impl, property_trees, |
| 499 &initial_render_surface_list, | 494 &initial_render_surface_list); |
| 500 can_render_to_separate_surface); | |
| 501 ComputeSurfaceContentRects(layer_tree_impl, property_trees, | 495 ComputeSurfaceContentRects(layer_tree_impl, property_trees, |
| 502 &initial_render_surface_list, max_texture_size); | 496 &initial_render_surface_list, max_texture_size); |
| 503 ComputeListOfNonEmptySurfaces(layer_tree_impl, property_trees, | 497 ComputeListOfNonEmptySurfaces(layer_tree_impl, property_trees, |
| 504 &initial_render_surface_list, | 498 &initial_render_surface_list, |
| 505 render_surface_list); | 499 render_surface_list); |
| 506 } | 500 } |
| 507 | 501 |
| 508 void CalculateDrawPropertiesInternal( | 502 void CalculateDrawPropertiesInternal( |
| 509 LayerTreeHostCommon::CalcDrawPropsImplInputs* inputs, | 503 LayerTreeHostCommon::CalcDrawPropsImplInputs* inputs, |
| 510 PropertyTreeOption property_tree_option) { | 504 PropertyTreeOption property_tree_option) { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 528 PropertyTreeBuilder::BuildPropertyTrees( | 522 PropertyTreeBuilder::BuildPropertyTrees( |
| 529 inputs->root_layer, inputs->page_scale_layer, | 523 inputs->root_layer, inputs->page_scale_layer, |
| 530 inputs->inner_viewport_scroll_layer, | 524 inputs->inner_viewport_scroll_layer, |
| 531 inputs->outer_viewport_scroll_layer, | 525 inputs->outer_viewport_scroll_layer, |
| 532 inputs->elastic_overscroll_application_layer, | 526 inputs->elastic_overscroll_application_layer, |
| 533 inputs->elastic_overscroll, inputs->page_scale_factor, | 527 inputs->elastic_overscroll, inputs->page_scale_factor, |
| 534 inputs->device_scale_factor, gfx::Rect(inputs->device_viewport_size), | 528 inputs->device_scale_factor, gfx::Rect(inputs->device_viewport_size), |
| 535 inputs->device_transform, inputs->property_trees); | 529 inputs->device_transform, inputs->property_trees); |
| 536 draw_property_utils::UpdatePropertyTreesAndRenderSurfaces( | 530 draw_property_utils::UpdatePropertyTreesAndRenderSurfaces( |
| 537 inputs->root_layer, inputs->property_trees, | 531 inputs->root_layer, inputs->property_trees, |
| 538 inputs->can_render_to_separate_surface, | |
| 539 inputs->can_adjust_raster_scales); | 532 inputs->can_adjust_raster_scales); |
| 540 | 533 |
| 541 // Property trees are normally constructed on the main thread and | 534 // Property trees are normally constructed on the main thread and |
| 542 // passed to compositor thread. Source to parent updates on them are not | 535 // passed to compositor thread. Source to parent updates on them are not |
| 543 // allowed in the compositor thread. Some tests build them on the | 536 // allowed in the compositor thread. Some tests build them on the |
| 544 // compositor thread, so we need to explicitly disallow source to parent | 537 // compositor thread, so we need to explicitly disallow source to parent |
| 545 // updates when they are built on compositor thread. | 538 // updates when they are built on compositor thread. |
| 546 inputs->property_trees->transform_tree | 539 inputs->property_trees->transform_tree |
| 547 .set_source_to_parent_updates_allowed(false); | 540 .set_source_to_parent_updates_allowed(false); |
| 548 if (should_measure_property_tree_performance) { | 541 if (should_measure_property_tree_performance) { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 575 gfx::RectF(gfx::SizeF(inputs->device_viewport_size))); | 568 gfx::RectF(gfx::SizeF(inputs->device_viewport_size))); |
| 576 float page_scale_factor_for_root = | 569 float page_scale_factor_for_root = |
| 577 inputs->page_scale_layer == inputs->root_layer | 570 inputs->page_scale_layer == inputs->root_layer |
| 578 ? inputs->page_scale_factor | 571 ? inputs->page_scale_factor |
| 579 : 1.f; | 572 : 1.f; |
| 580 property_trees->transform_tree.SetRootTransformsAndScales( | 573 property_trees->transform_tree.SetRootTransformsAndScales( |
| 581 inputs->device_scale_factor, page_scale_factor_for_root, | 574 inputs->device_scale_factor, page_scale_factor_for_root, |
| 582 inputs->device_transform, inputs->root_layer->position()); | 575 inputs->device_transform, inputs->root_layer->position()); |
| 583 draw_property_utils::UpdatePropertyTreesAndRenderSurfaces( | 576 draw_property_utils::UpdatePropertyTreesAndRenderSurfaces( |
| 584 inputs->root_layer, inputs->property_trees, | 577 inputs->root_layer, inputs->property_trees, |
| 585 inputs->can_render_to_separate_surface, | |
| 586 inputs->can_adjust_raster_scales); | 578 inputs->can_adjust_raster_scales); |
| 587 break; | 579 break; |
| 588 } | 580 } |
| 589 } | 581 } |
| 590 | 582 |
| 591 if (should_measure_property_tree_performance) { | 583 if (should_measure_property_tree_performance) { |
| 592 TRACE_EVENT_BEGIN0(TRACE_DISABLED_BY_DEFAULT("cc.debug.cdp-perf"), | 584 TRACE_EVENT_BEGIN0(TRACE_DISABLED_BY_DEFAULT("cc.debug.cdp-perf"), |
| 593 "LayerTreeHostCommon::CalculateDrawProperties"); | 585 "LayerTreeHostCommon::CalculateDrawProperties"); |
| 594 } | 586 } |
| 595 | 587 |
| 596 draw_property_utils::FindLayersThatNeedUpdates( | 588 draw_property_utils::FindLayersThatNeedUpdates( |
| 597 inputs->root_layer->layer_tree_impl(), inputs->property_trees, | 589 inputs->root_layer->layer_tree_impl(), inputs->property_trees, |
| 598 &visible_layer_list); | 590 &visible_layer_list); |
| 599 DCHECK(inputs->can_render_to_separate_surface == | |
| 600 inputs->property_trees->non_root_surfaces_enabled); | |
| 601 draw_property_utils::ComputeDrawPropertiesOfVisibleLayers( | 591 draw_property_utils::ComputeDrawPropertiesOfVisibleLayers( |
| 602 &visible_layer_list, inputs->property_trees); | 592 &visible_layer_list, inputs->property_trees); |
| 603 | 593 |
| 604 CalculateRenderSurfaceLayerList( | 594 CalculateRenderSurfaceLayerList( |
| 605 inputs->root_layer->layer_tree_impl(), inputs->property_trees, | 595 inputs->root_layer->layer_tree_impl(), inputs->property_trees, |
| 606 inputs->render_surface_list, inputs->can_render_to_separate_surface, | 596 inputs->render_surface_list, inputs->max_texture_size); |
| 607 inputs->max_texture_size); | |
| 608 | 597 |
| 609 if (should_measure_property_tree_performance) { | 598 if (should_measure_property_tree_performance) { |
| 610 TRACE_EVENT_END0(TRACE_DISABLED_BY_DEFAULT("cc.debug.cdp-perf"), | 599 TRACE_EVENT_END0(TRACE_DISABLED_BY_DEFAULT("cc.debug.cdp-perf"), |
| 611 "LayerTreeHostCommon::CalculateDrawProperties"); | 600 "LayerTreeHostCommon::CalculateDrawProperties"); |
| 612 } | 601 } |
| 613 | 602 |
| 614 // A root layer render_surface should always exist after | 603 // A root layer render_surface should always exist after |
| 615 // CalculateDrawProperties. | 604 // CalculateDrawProperties. |
| 616 DCHECK(inputs->property_trees->effect_tree.GetRenderSurface( | 605 DCHECK(inputs->property_trees->effect_tree.GetRenderSurface( |
| 617 EffectTree::kContentsRootNodeId)); | 606 EffectTree::kContentsRootNodeId)); |
| 618 } | 607 } |
| 619 | 608 |
| 620 void LayerTreeHostCommon::CalculateDrawPropertiesForTesting( | 609 void LayerTreeHostCommon::CalculateDrawPropertiesForTesting( |
| 621 CalcDrawPropsMainInputsForTesting* inputs) { | 610 CalcDrawPropsMainInputsForTesting* inputs) { |
| 622 LayerList update_layer_list; | 611 LayerList update_layer_list; |
| 623 bool can_render_to_separate_surface = true; | |
| 624 PropertyTrees* property_trees = | 612 PropertyTrees* property_trees = |
| 625 inputs->root_layer->layer_tree_host()->property_trees(); | 613 inputs->root_layer->layer_tree_host()->property_trees(); |
| 626 Layer* overscroll_elasticity_layer = nullptr; | 614 Layer* overscroll_elasticity_layer = nullptr; |
| 627 gfx::Vector2dF elastic_overscroll; | 615 gfx::Vector2dF elastic_overscroll; |
| 628 PropertyTreeBuilder::BuildPropertyTrees( | 616 PropertyTreeBuilder::BuildPropertyTrees( |
| 629 inputs->root_layer, inputs->page_scale_layer, | 617 inputs->root_layer, inputs->page_scale_layer, |
| 630 inputs->inner_viewport_scroll_layer, inputs->outer_viewport_scroll_layer, | 618 inputs->inner_viewport_scroll_layer, inputs->outer_viewport_scroll_layer, |
| 631 overscroll_elasticity_layer, elastic_overscroll, | 619 overscroll_elasticity_layer, elastic_overscroll, |
| 632 inputs->page_scale_factor, inputs->device_scale_factor, | 620 inputs->page_scale_factor, inputs->device_scale_factor, |
| 633 gfx::Rect(inputs->device_viewport_size), inputs->device_transform, | 621 gfx::Rect(inputs->device_viewport_size), inputs->device_transform, |
| 634 property_trees); | 622 property_trees); |
| 635 draw_property_utils::UpdatePropertyTrees( | 623 draw_property_utils::UpdatePropertyTrees( |
| 636 inputs->root_layer->layer_tree_host(), property_trees, | 624 inputs->root_layer->layer_tree_host(), property_trees); |
| 637 can_render_to_separate_surface); | |
| 638 draw_property_utils::FindLayersThatNeedUpdates( | 625 draw_property_utils::FindLayersThatNeedUpdates( |
| 639 inputs->root_layer->layer_tree_host(), property_trees, | 626 inputs->root_layer->layer_tree_host(), property_trees, |
| 640 &update_layer_list); | 627 &update_layer_list); |
| 641 } | 628 } |
| 642 | 629 |
| 643 void LayerTreeHostCommon::CalculateDrawProperties( | 630 void LayerTreeHostCommon::CalculateDrawProperties( |
| 644 CalcDrawPropsImplInputs* inputs) { | 631 CalcDrawPropsImplInputs* inputs) { |
| 645 CalculateDrawPropertiesInternal(inputs, DONT_BUILD_PROPERTY_TREES); | 632 CalculateDrawPropertiesInternal(inputs, DONT_BUILD_PROPERTY_TREES); |
| 646 | 633 |
| 647 if (CdpPerfTracingEnabled()) { | 634 if (CdpPerfTracingEnabled()) { |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 694 | 681 |
| 695 PropertyTrees* GetPropertyTrees(Layer* layer) { | 682 PropertyTrees* GetPropertyTrees(Layer* layer) { |
| 696 return layer->layer_tree_host()->property_trees(); | 683 return layer->layer_tree_host()->property_trees(); |
| 697 } | 684 } |
| 698 | 685 |
| 699 PropertyTrees* GetPropertyTrees(LayerImpl* layer) { | 686 PropertyTrees* GetPropertyTrees(LayerImpl* layer) { |
| 700 return layer->layer_tree_impl()->property_trees(); | 687 return layer->layer_tree_impl()->property_trees(); |
| 701 } | 688 } |
| 702 | 689 |
| 703 } // namespace cc | 690 } // namespace cc |
| OLD | NEW |