| 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 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 284 | 284 |
| 285 static void ComputeInitialRenderSurfaceLayerList( | 285 static void ComputeInitialRenderSurfaceLayerList( |
| 286 LayerTreeImpl* layer_tree_impl, | 286 LayerTreeImpl* layer_tree_impl, |
| 287 PropertyTrees* property_trees, | 287 PropertyTrees* property_trees, |
| 288 LayerImplList* render_surface_layer_list, | 288 LayerImplList* render_surface_layer_list, |
| 289 bool can_render_to_separate_surface) { | 289 bool can_render_to_separate_surface) { |
| 290 // Add all non-skipped surfaces to the initial render surface layer list. Add | 290 // Add all non-skipped surfaces to the initial render surface layer list. Add |
| 291 // all non-skipped layers to the layer list of their target surface, and | 291 // all non-skipped layers to the layer list of their target surface, and |
| 292 // add their content rect to their target surface's accumulated content rect. | 292 // add their content rect to their target surface's accumulated content rect. |
| 293 for (LayerImpl* layer : *layer_tree_impl) { | 293 for (LayerImpl* layer : *layer_tree_impl) { |
| 294 RenderSurfaceImpl* render_surface = layer->render_surface(); | 294 RenderSurfaceImpl* render_surface = layer->GetRenderSurface(); |
| 295 if (render_surface) { | 295 if (render_surface) { |
| 296 render_surface->ClearLayerLists(); | 296 render_surface->ClearLayerLists(); |
| 297 ClearMaskLayersAreDrawnRenderSurfaceLayerListMembers(render_surface); | 297 ClearMaskLayersAreDrawnRenderSurfaceLayerListMembers(render_surface); |
| 298 } | 298 } |
| 299 layer->set_is_drawn_render_surface_layer_list_member(false); | 299 layer->set_is_drawn_render_surface_layer_list_member(false); |
| 300 | 300 |
| 301 bool is_root = layer_tree_impl->IsRootLayer(layer); | 301 bool is_root = layer_tree_impl->IsRootLayer(layer); |
| 302 bool skip_layer = !is_root && draw_property_utils::LayerShouldBeSkipped( | 302 bool skip_layer = !is_root && draw_property_utils::LayerShouldBeSkipped( |
| 303 layer, property_trees->transform_tree, | 303 layer, property_trees->transform_tree, |
| 304 property_trees->effect_tree); | 304 property_trees->effect_tree); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 365 } | 365 } |
| 366 } | 366 } |
| 367 | 367 |
| 368 static void ComputeSurfaceContentRects(LayerTreeImpl* layer_tree_impl, | 368 static void ComputeSurfaceContentRects(LayerTreeImpl* layer_tree_impl, |
| 369 PropertyTrees* property_trees, | 369 PropertyTrees* property_trees, |
| 370 LayerImplList* render_surface_layer_list, | 370 LayerImplList* render_surface_layer_list, |
| 371 int max_texture_size) { | 371 int max_texture_size) { |
| 372 // Walk the list backwards, accumulating each surface's content rect into its | 372 // Walk the list backwards, accumulating each surface's content rect into its |
| 373 // target's content rect. | 373 // target's content rect. |
| 374 for (LayerImpl* layer : base::Reversed(*render_surface_layer_list)) { | 374 for (LayerImpl* layer : base::Reversed(*render_surface_layer_list)) { |
| 375 RenderSurfaceImpl* render_surface = layer->render_surface(); | 375 RenderSurfaceImpl* render_surface = layer->GetRenderSurface(); |
| 376 if (layer_tree_impl->IsRootLayer(layer)) { | 376 if (layer_tree_impl->IsRootLayer(layer)) { |
| 377 // The root layer's surface content rect is always the entire viewport. | 377 // The root layer's surface content rect is always the entire viewport. |
| 378 render_surface->SetContentRectToViewport(); | 378 render_surface->SetContentRectToViewport(); |
| 379 continue; | 379 continue; |
| 380 } | 380 } |
| 381 | 381 |
| 382 // Now all contributing drawable content rect has been accumulated to this | 382 // Now all contributing drawable content rect has been accumulated to this |
| 383 // render surface, calculate the content rect. | 383 // render surface, calculate the content rect. |
| 384 render_surface->CalculateContentRectFromAccumulatedContentRect( | 384 render_surface->CalculateContentRectFromAccumulatedContentRect( |
| 385 max_texture_size); | 385 max_texture_size); |
| 386 | 386 |
| 387 // Now the render surface's content rect is calculated correctly, it could | 387 // Now the render surface's content rect is calculated correctly, it could |
| 388 // contribute to its render target. | 388 // contribute to its render target. |
| 389 render_surface->render_target() | 389 render_surface->render_target() |
| 390 ->AccumulateContentRectFromContributingRenderSurface(render_surface); | 390 ->AccumulateContentRectFromContributingRenderSurface(render_surface); |
| 391 } | 391 } |
| 392 } | 392 } |
| 393 | 393 |
| 394 static void ComputeListOfNonEmptySurfaces(LayerTreeImpl* layer_tree_impl, | 394 static void ComputeListOfNonEmptySurfaces(LayerTreeImpl* layer_tree_impl, |
| 395 PropertyTrees* property_trees, | 395 PropertyTrees* property_trees, |
| 396 LayerImplList* initial_surface_list, | 396 LayerImplList* initial_surface_list, |
| 397 LayerImplList* final_surface_list) { | 397 LayerImplList* final_surface_list) { |
| 398 // Walk the initial surface list forwards. The root surface and each | 398 // Walk the initial surface list forwards. The root surface and each |
| 399 // surface with a non-empty content rect go into the final render surface | 399 // surface with a non-empty content rect go into the final render surface |
| 400 // layer list. Surfaces with empty content rects or whose target isn't in | 400 // layer list. Surfaces with empty content rects or whose target isn't in |
| 401 // the final list do not get added to the final list. | 401 // the final list do not get added to the final list. |
| 402 for (LayerImpl* layer : *initial_surface_list) { | 402 for (LayerImpl* layer : *initial_surface_list) { |
| 403 bool is_root = layer_tree_impl->IsRootLayer(layer); | 403 bool is_root = layer_tree_impl->IsRootLayer(layer); |
| 404 RenderSurfaceImpl* surface = layer->render_surface(); | 404 RenderSurfaceImpl* surface = layer->GetRenderSurface(); |
| 405 RenderSurfaceImpl* target_surface = surface->render_target(); | 405 RenderSurfaceImpl* target_surface = surface->render_target(); |
| 406 if (!is_root && (surface->content_rect().IsEmpty() || | 406 if (!is_root && (surface->content_rect().IsEmpty() || |
| 407 target_surface->layer_list().empty())) { | 407 target_surface->layer_list().empty())) { |
| 408 ClearIsDrawnRenderSurfaceLayerListMember(&surface->layer_list(), | 408 ClearIsDrawnRenderSurfaceLayerListMember(&surface->layer_list(), |
| 409 &property_trees->scroll_tree); | 409 &property_trees->scroll_tree); |
| 410 surface->ClearLayerLists(); | 410 surface->ClearLayerLists(); |
| 411 if (!is_root) { | 411 if (!is_root) { |
| 412 LayerImplList& target_list = target_surface->layer_list(); | 412 LayerImplList& target_list = target_surface->layer_list(); |
| 413 auto it = std::find(target_list.begin(), target_list.end(), layer); | 413 auto it = std::find(target_list.begin(), target_list.end(), layer); |
| 414 if (it != target_list.end()) { | 414 if (it != target_list.end()) { |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 560 draw_property_utils::VerifyVisibleRectsCalculations(visible_layer_list, | 560 draw_property_utils::VerifyVisibleRectsCalculations(visible_layer_list, |
| 561 inputs->property_trees); | 561 inputs->property_trees); |
| 562 | 562 |
| 563 if (should_measure_property_tree_performance) { | 563 if (should_measure_property_tree_performance) { |
| 564 TRACE_EVENT_END0(TRACE_DISABLED_BY_DEFAULT("cc.debug.cdp-perf"), | 564 TRACE_EVENT_END0(TRACE_DISABLED_BY_DEFAULT("cc.debug.cdp-perf"), |
| 565 "LayerTreeHostCommon::CalculateDrawProperties"); | 565 "LayerTreeHostCommon::CalculateDrawProperties"); |
| 566 } | 566 } |
| 567 | 567 |
| 568 // A root layer render_surface should always exist after | 568 // A root layer render_surface should always exist after |
| 569 // CalculateDrawProperties. | 569 // CalculateDrawProperties. |
| 570 DCHECK(inputs->root_layer->render_surface()); | 570 DCHECK(inputs->root_layer->GetRenderSurface()); |
| 571 } | 571 } |
| 572 | 572 |
| 573 void LayerTreeHostCommon::CalculateDrawPropertiesForTesting( | 573 void LayerTreeHostCommon::CalculateDrawPropertiesForTesting( |
| 574 CalcDrawPropsMainInputsForTesting* inputs) { | 574 CalcDrawPropsMainInputsForTesting* inputs) { |
| 575 LayerList update_layer_list; | 575 LayerList update_layer_list; |
| 576 bool can_render_to_separate_surface = true; | 576 bool can_render_to_separate_surface = true; |
| 577 PropertyTrees* property_trees = | 577 PropertyTrees* property_trees = |
| 578 inputs->root_layer->layer_tree_host()->property_trees(); | 578 inputs->root_layer->layer_tree_host()->property_trees(); |
| 579 Layer* overscroll_elasticity_layer = nullptr; | 579 Layer* overscroll_elasticity_layer = nullptr; |
| 580 gfx::Vector2dF elastic_overscroll; | 580 gfx::Vector2dF elastic_overscroll; |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 650 | 650 |
| 651 PropertyTrees* GetPropertyTrees(Layer* layer) { | 651 PropertyTrees* GetPropertyTrees(Layer* layer) { |
| 652 return layer->layer_tree_host()->property_trees(); | 652 return layer->layer_tree_host()->property_trees(); |
| 653 } | 653 } |
| 654 | 654 |
| 655 PropertyTrees* GetPropertyTrees(LayerImpl* layer) { | 655 PropertyTrees* GetPropertyTrees(LayerImpl* layer) { |
| 656 return layer->layer_tree_impl()->property_trees(); | 656 return layer->layer_tree_impl()->property_trees(); |
| 657 } | 657 } |
| 658 | 658 |
| 659 } // namespace cc | 659 } // namespace cc |
| OLD | NEW |