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 |