| 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 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 static inline void ClearMaskLayersAreDrawnRenderSurfaceLayerListMembers( | 258 static inline void ClearMaskLayersAreDrawnRenderSurfaceLayerListMembers( |
| 259 RenderSurfaceImpl* surface) { | 259 RenderSurfaceImpl* surface) { |
| 260 LayerImpl* mask_layer = surface->MaskLayer(); | 260 LayerImpl* mask_layer = surface->MaskLayer(); |
| 261 if (mask_layer) | 261 if (mask_layer) |
| 262 mask_layer->set_is_drawn_render_surface_layer_list_member(false); | 262 mask_layer->set_is_drawn_render_surface_layer_list_member(false); |
| 263 } | 263 } |
| 264 | 264 |
| 265 static inline void ClearIsDrawnRenderSurfaceLayerListMember( | 265 static inline void ClearIsDrawnRenderSurfaceLayerListMember( |
| 266 LayerImplList* layer_list, | 266 LayerImplList* layer_list, |
| 267 ScrollTree* scroll_tree) { | 267 ScrollTree* scroll_tree) { |
| 268 for (LayerImpl* layer : *layer_list) { | 268 for (LayerImpl* layer : *layer_list) |
| 269 if (layer->is_drawn_render_surface_layer_list_member()) { | |
| 270 DCHECK_GT( | |
| 271 scroll_tree->Node(layer->scroll_tree_index())->num_drawn_descendants, | |
| 272 0); | |
| 273 scroll_tree->Node(layer->scroll_tree_index())->num_drawn_descendants--; | |
| 274 } | |
| 275 layer->set_is_drawn_render_surface_layer_list_member(false); | 269 layer->set_is_drawn_render_surface_layer_list_member(false); |
| 276 } | |
| 277 } | 270 } |
| 278 | 271 |
| 279 static bool CdpPerfTracingEnabled() { | 272 static bool CdpPerfTracingEnabled() { |
| 280 bool tracing_enabled; | 273 bool tracing_enabled; |
| 281 TRACE_EVENT_CATEGORY_GROUP_ENABLED("cdp.perf", &tracing_enabled); | 274 TRACE_EVENT_CATEGORY_GROUP_ENABLED("cdp.perf", &tracing_enabled); |
| 282 return tracing_enabled; | 275 return tracing_enabled; |
| 283 } | 276 } |
| 284 | 277 |
| 285 static float TranslationFromActiveTreeLayerScreenSpaceTransform( | 278 static float TranslationFromActiveTreeLayerScreenSpaceTransform( |
| 286 LayerImpl* pending_tree_layer) { | 279 LayerImpl* pending_tree_layer) { |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 339 } | 332 } |
| 340 } | 333 } |
| 341 return jitter; | 334 return jitter; |
| 342 } | 335 } |
| 343 | 336 |
| 344 enum PropertyTreeOption { | 337 enum PropertyTreeOption { |
| 345 BUILD_PROPERTY_TREES_IF_NEEDED, | 338 BUILD_PROPERTY_TREES_IF_NEEDED, |
| 346 DONT_BUILD_PROPERTY_TREES | 339 DONT_BUILD_PROPERTY_TREES |
| 347 }; | 340 }; |
| 348 | 341 |
| 349 static void ComputeLayerScrollsDrawnDescendants(LayerTreeImpl* layer_tree_impl, | |
| 350 ScrollTree* scroll_tree) { | |
| 351 for (int i = static_cast<int>(scroll_tree->size()) - 1; i > 0; --i) { | |
| 352 ScrollNode* node = scroll_tree->Node(i); | |
| 353 scroll_tree->parent(node)->num_drawn_descendants += | |
| 354 node->num_drawn_descendants; | |
| 355 } | |
| 356 for (LayerImpl* layer : *layer_tree_impl) { | |
| 357 bool scrolls_drawn_descendant = false; | |
| 358 if (layer->scrollable()) { | |
| 359 ScrollNode* node = scroll_tree->Node(layer->scroll_tree_index()); | |
| 360 if (node->num_drawn_descendants > 0) | |
| 361 scrolls_drawn_descendant = true; | |
| 362 } | |
| 363 layer->set_scrolls_drawn_descendant(scrolls_drawn_descendant); | |
| 364 } | |
| 365 } | |
| 366 | |
| 367 static void ComputeInitialRenderSurfaceLayerList( | 342 static void ComputeInitialRenderSurfaceLayerList( |
| 368 LayerTreeImpl* layer_tree_impl, | 343 LayerTreeImpl* layer_tree_impl, |
| 369 PropertyTrees* property_trees, | 344 PropertyTrees* property_trees, |
| 370 LayerImplList* render_surface_layer_list, | 345 LayerImplList* render_surface_layer_list, |
| 371 bool can_render_to_separate_surface) { | 346 bool can_render_to_separate_surface) { |
| 372 ScrollTree* scroll_tree = &property_trees->scroll_tree; | |
| 373 for (int i = 0; i < static_cast<int>(scroll_tree->size()); ++i) | |
| 374 scroll_tree->Node(i)->num_drawn_descendants = 0; | |
| 375 | |
| 376 // Add all non-skipped surfaces to the initial render surface layer list. Add | 347 // Add all non-skipped surfaces to the initial render surface layer list. Add |
| 377 // all non-skipped layers to the layer list of their target surface, and | 348 // all non-skipped layers to the layer list of their target surface, and |
| 378 // add their content rect to their target surface's accumulated content rect. | 349 // add their content rect to their target surface's accumulated content rect. |
| 379 for (LayerImpl* layer : *layer_tree_impl) { | 350 for (LayerImpl* layer : *layer_tree_impl) { |
| 380 if (layer->render_surface()) { | 351 if (layer->render_surface()) { |
| 381 layer->ClearRenderSurfaceLayerList(); | 352 layer->ClearRenderSurfaceLayerList(); |
| 382 ClearMaskLayersAreDrawnRenderSurfaceLayerListMembers( | 353 ClearMaskLayersAreDrawnRenderSurfaceLayerListMembers( |
| 383 layer->render_surface()); | 354 layer->render_surface()); |
| 384 } | 355 } |
| 385 layer->set_is_drawn_render_surface_layer_list_member(false); | 356 layer->set_is_drawn_render_surface_layer_list_member(false); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 437 } | 408 } |
| 438 } | 409 } |
| 439 bool layer_is_drawn = | 410 bool layer_is_drawn = |
| 440 property_trees->effect_tree.Node(layer->effect_tree_index())->is_drawn; | 411 property_trees->effect_tree.Node(layer->effect_tree_index())->is_drawn; |
| 441 bool layer_should_be_drawn = draw_property_utils::LayerNeedsUpdate( | 412 bool layer_should_be_drawn = draw_property_utils::LayerNeedsUpdate( |
| 442 layer, layer_is_drawn, property_trees); | 413 layer, layer_is_drawn, property_trees); |
| 443 if (!layer_should_be_drawn) | 414 if (!layer_should_be_drawn) |
| 444 continue; | 415 continue; |
| 445 | 416 |
| 446 layer->set_is_drawn_render_surface_layer_list_member(true); | 417 layer->set_is_drawn_render_surface_layer_list_member(true); |
| 447 scroll_tree->Node(layer->scroll_tree_index())->num_drawn_descendants++; | |
| 448 layer->render_target()->layer_list().push_back(layer); | 418 layer->render_target()->layer_list().push_back(layer); |
| 449 | 419 |
| 450 // The layer contributes its drawable content rect to its render target. | 420 // The layer contributes its drawable content rect to its render target. |
| 451 layer->render_target()->AccumulateContentRectFromContributingLayer(layer); | 421 layer->render_target()->AccumulateContentRectFromContributingLayer(layer); |
| 452 } | 422 } |
| 453 } | 423 } |
| 454 | 424 |
| 455 static void ComputeSurfaceContentRects(LayerTreeImpl* layer_tree_impl, | 425 static void ComputeSurfaceContentRects(LayerTreeImpl* layer_tree_impl, |
| 456 PropertyTrees* property_trees, | 426 PropertyTrees* property_trees, |
| 457 LayerImplList* render_surface_layer_list, | 427 LayerImplList* render_surface_layer_list, |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 533 // have an empty content rect. After surface content rects are computed, | 503 // have an empty content rect. After surface content rects are computed, |
| 534 // produce a final RSLL that omits empty surfaces. | 504 // produce a final RSLL that omits empty surfaces. |
| 535 ComputeInitialRenderSurfaceLayerList(layer_tree_impl, property_trees, | 505 ComputeInitialRenderSurfaceLayerList(layer_tree_impl, property_trees, |
| 536 &initial_render_surface_list, | 506 &initial_render_surface_list, |
| 537 can_render_to_separate_surface); | 507 can_render_to_separate_surface); |
| 538 ComputeSurfaceContentRects(layer_tree_impl, property_trees, | 508 ComputeSurfaceContentRects(layer_tree_impl, property_trees, |
| 539 &initial_render_surface_list, max_texture_size); | 509 &initial_render_surface_list, max_texture_size); |
| 540 ComputeListOfNonEmptySurfaces(layer_tree_impl, property_trees, | 510 ComputeListOfNonEmptySurfaces(layer_tree_impl, property_trees, |
| 541 &initial_render_surface_list, | 511 &initial_render_surface_list, |
| 542 render_surface_layer_list); | 512 render_surface_layer_list); |
| 543 | |
| 544 ComputeLayerScrollsDrawnDescendants(layer_tree_impl, | |
| 545 &property_trees->scroll_tree); | |
| 546 } | 513 } |
| 547 | 514 |
| 548 void CalculateDrawPropertiesInternal( | 515 void CalculateDrawPropertiesInternal( |
| 549 LayerTreeHostCommon::CalcDrawPropsImplInputs* inputs, | 516 LayerTreeHostCommon::CalcDrawPropsImplInputs* inputs, |
| 550 PropertyTreeOption property_tree_option) { | 517 PropertyTreeOption property_tree_option) { |
| 551 inputs->render_surface_layer_list->clear(); | 518 inputs->render_surface_layer_list->clear(); |
| 552 | 519 |
| 553 const bool should_measure_property_tree_performance = | 520 const bool should_measure_property_tree_performance = |
| 554 property_tree_option == BUILD_PROPERTY_TREES_IF_NEEDED; | 521 property_tree_option == BUILD_PROPERTY_TREES_IF_NEEDED; |
| 555 | 522 |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 737 | 704 |
| 738 PropertyTrees* GetPropertyTrees(Layer* layer) { | 705 PropertyTrees* GetPropertyTrees(Layer* layer) { |
| 739 return layer->GetLayerTree()->property_trees(); | 706 return layer->GetLayerTree()->property_trees(); |
| 740 } | 707 } |
| 741 | 708 |
| 742 PropertyTrees* GetPropertyTrees(LayerImpl* layer) { | 709 PropertyTrees* GetPropertyTrees(LayerImpl* layer) { |
| 743 return layer->layer_tree_impl()->property_trees(); | 710 return layer->layer_tree_impl()->property_trees(); |
| 744 } | 711 } |
| 745 | 712 |
| 746 } // namespace cc | 713 } // namespace cc |
| OLD | NEW |