| 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 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 static inline void ClearMaskLayersAreDrawnRenderSurfaceLayerListMembers( | 205 static inline void ClearMaskLayersAreDrawnRenderSurfaceLayerListMembers( |
| 206 RenderSurfaceImpl* surface) { | 206 RenderSurfaceImpl* surface) { |
| 207 LayerImpl* mask_layer = surface->MaskLayer(); | 207 LayerImpl* mask_layer = surface->MaskLayer(); |
| 208 if (mask_layer) | 208 if (mask_layer) |
| 209 mask_layer->set_is_drawn_render_surface_layer_list_member(false); | 209 mask_layer->set_is_drawn_render_surface_layer_list_member(false); |
| 210 } | 210 } |
| 211 | 211 |
| 212 static inline void ClearIsDrawnRenderSurfaceLayerListMember( | 212 static inline void ClearIsDrawnRenderSurfaceLayerListMember( |
| 213 LayerImplList* layer_list, | 213 LayerImplList* layer_list, |
| 214 ScrollTree* scroll_tree) { | 214 ScrollTree* scroll_tree) { |
| 215 for (LayerImpl* layer : *layer_list) { | 215 for (LayerImpl* layer : *layer_list) |
| 216 if (layer->is_drawn_render_surface_layer_list_member()) { | |
| 217 DCHECK_GT( | |
| 218 scroll_tree->Node(layer->scroll_tree_index())->num_drawn_descendants, | |
| 219 0); | |
| 220 scroll_tree->Node(layer->scroll_tree_index())->num_drawn_descendants--; | |
| 221 } | |
| 222 layer->set_is_drawn_render_surface_layer_list_member(false); | 216 layer->set_is_drawn_render_surface_layer_list_member(false); |
| 223 } | |
| 224 } | 217 } |
| 225 | 218 |
| 226 static bool CdpPerfTracingEnabled() { | 219 static bool CdpPerfTracingEnabled() { |
| 227 bool tracing_enabled; | 220 bool tracing_enabled; |
| 228 TRACE_EVENT_CATEGORY_GROUP_ENABLED("cdp.perf", &tracing_enabled); | 221 TRACE_EVENT_CATEGORY_GROUP_ENABLED("cdp.perf", &tracing_enabled); |
| 229 return tracing_enabled; | 222 return tracing_enabled; |
| 230 } | 223 } |
| 231 | 224 |
| 232 static float TranslationFromActiveTreeLayerScreenSpaceTransform( | 225 static float TranslationFromActiveTreeLayerScreenSpaceTransform( |
| 233 LayerImpl* pending_tree_layer) { | 226 LayerImpl* pending_tree_layer) { |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 286 } | 279 } |
| 287 } | 280 } |
| 288 return jitter; | 281 return jitter; |
| 289 } | 282 } |
| 290 | 283 |
| 291 enum PropertyTreeOption { | 284 enum PropertyTreeOption { |
| 292 BUILD_PROPERTY_TREES_IF_NEEDED, | 285 BUILD_PROPERTY_TREES_IF_NEEDED, |
| 293 DONT_BUILD_PROPERTY_TREES | 286 DONT_BUILD_PROPERTY_TREES |
| 294 }; | 287 }; |
| 295 | 288 |
| 296 static void ComputeLayerScrollsDrawnDescendants(LayerTreeImpl* layer_tree_impl, | |
| 297 ScrollTree* scroll_tree) { | |
| 298 for (int i = static_cast<int>(scroll_tree->size()) - 1; i > 0; --i) { | |
| 299 ScrollNode* node = scroll_tree->Node(i); | |
| 300 scroll_tree->parent(node)->num_drawn_descendants += | |
| 301 node->num_drawn_descendants; | |
| 302 } | |
| 303 for (LayerImpl* layer : *layer_tree_impl) { | |
| 304 bool scrolls_drawn_descendant = false; | |
| 305 if (layer->scrollable()) { | |
| 306 ScrollNode* node = scroll_tree->Node(layer->scroll_tree_index()); | |
| 307 if (node->num_drawn_descendants > 0) | |
| 308 scrolls_drawn_descendant = true; | |
| 309 } | |
| 310 layer->set_scrolls_drawn_descendant(scrolls_drawn_descendant); | |
| 311 } | |
| 312 } | |
| 313 | |
| 314 static void ComputeInitialRenderSurfaceLayerList( | 289 static void ComputeInitialRenderSurfaceLayerList( |
| 315 LayerTreeImpl* layer_tree_impl, | 290 LayerTreeImpl* layer_tree_impl, |
| 316 PropertyTrees* property_trees, | 291 PropertyTrees* property_trees, |
| 317 LayerImplList* render_surface_layer_list, | 292 LayerImplList* render_surface_layer_list, |
| 318 bool can_render_to_separate_surface) { | 293 bool can_render_to_separate_surface) { |
| 319 ScrollTree* scroll_tree = &property_trees->scroll_tree; | |
| 320 for (int i = 0; i < static_cast<int>(scroll_tree->size()); ++i) | |
| 321 scroll_tree->Node(i)->num_drawn_descendants = 0; | |
| 322 | |
| 323 // Add all non-skipped surfaces to the initial render surface layer list. Add | 294 // Add all non-skipped surfaces to the initial render surface layer list. Add |
| 324 // all non-skipped layers to the layer list of their target surface, and | 295 // all non-skipped layers to the layer list of their target surface, and |
| 325 // add their content rect to their target surface's accumulated content rect. | 296 // add their content rect to their target surface's accumulated content rect. |
| 326 for (LayerImpl* layer : *layer_tree_impl) { | 297 for (LayerImpl* layer : *layer_tree_impl) { |
| 327 if (layer->render_surface()) { | 298 if (layer->render_surface()) { |
| 328 layer->ClearRenderSurfaceLayerList(); | 299 layer->ClearRenderSurfaceLayerList(); |
| 329 ClearMaskLayersAreDrawnRenderSurfaceLayerListMembers( | 300 ClearMaskLayersAreDrawnRenderSurfaceLayerListMembers( |
| 330 layer->render_surface()); | 301 layer->render_surface()); |
| 331 } | 302 } |
| 332 layer->set_is_drawn_render_surface_layer_list_member(false); | 303 layer->set_is_drawn_render_surface_layer_list_member(false); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 384 } | 355 } |
| 385 } | 356 } |
| 386 bool layer_is_drawn = | 357 bool layer_is_drawn = |
| 387 property_trees->effect_tree.Node(layer->effect_tree_index())->is_drawn; | 358 property_trees->effect_tree.Node(layer->effect_tree_index())->is_drawn; |
| 388 bool layer_should_be_drawn = draw_property_utils::LayerNeedsUpdate( | 359 bool layer_should_be_drawn = draw_property_utils::LayerNeedsUpdate( |
| 389 layer, layer_is_drawn, property_trees); | 360 layer, layer_is_drawn, property_trees); |
| 390 if (!layer_should_be_drawn) | 361 if (!layer_should_be_drawn) |
| 391 continue; | 362 continue; |
| 392 | 363 |
| 393 layer->set_is_drawn_render_surface_layer_list_member(true); | 364 layer->set_is_drawn_render_surface_layer_list_member(true); |
| 394 scroll_tree->Node(layer->scroll_tree_index())->num_drawn_descendants++; | |
| 395 layer->render_target()->layer_list().push_back(layer); | 365 layer->render_target()->layer_list().push_back(layer); |
| 396 | 366 |
| 397 // The layer contributes its drawable content rect to its render target. | 367 // The layer contributes its drawable content rect to its render target. |
| 398 layer->render_target()->AccumulateContentRectFromContributingLayer(layer); | 368 layer->render_target()->AccumulateContentRectFromContributingLayer(layer); |
| 399 } | 369 } |
| 400 } | 370 } |
| 401 | 371 |
| 402 static void ComputeSurfaceContentRects(LayerTreeImpl* layer_tree_impl, | 372 static void ComputeSurfaceContentRects(LayerTreeImpl* layer_tree_impl, |
| 403 PropertyTrees* property_trees, | 373 PropertyTrees* property_trees, |
| 404 LayerImplList* render_surface_layer_list, | 374 LayerImplList* render_surface_layer_list, |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 480 // have an empty content rect. After surface content rects are computed, | 450 // have an empty content rect. After surface content rects are computed, |
| 481 // produce a final RSLL that omits empty surfaces. | 451 // produce a final RSLL that omits empty surfaces. |
| 482 ComputeInitialRenderSurfaceLayerList(layer_tree_impl, property_trees, | 452 ComputeInitialRenderSurfaceLayerList(layer_tree_impl, property_trees, |
| 483 &initial_render_surface_list, | 453 &initial_render_surface_list, |
| 484 can_render_to_separate_surface); | 454 can_render_to_separate_surface); |
| 485 ComputeSurfaceContentRects(layer_tree_impl, property_trees, | 455 ComputeSurfaceContentRects(layer_tree_impl, property_trees, |
| 486 &initial_render_surface_list, max_texture_size); | 456 &initial_render_surface_list, max_texture_size); |
| 487 ComputeListOfNonEmptySurfaces(layer_tree_impl, property_trees, | 457 ComputeListOfNonEmptySurfaces(layer_tree_impl, property_trees, |
| 488 &initial_render_surface_list, | 458 &initial_render_surface_list, |
| 489 render_surface_layer_list); | 459 render_surface_layer_list); |
| 490 | |
| 491 ComputeLayerScrollsDrawnDescendants(layer_tree_impl, | |
| 492 &property_trees->scroll_tree); | |
| 493 } | 460 } |
| 494 | 461 |
| 495 void CalculateDrawPropertiesInternal( | 462 void CalculateDrawPropertiesInternal( |
| 496 LayerTreeHostCommon::CalcDrawPropsImplInputs* inputs, | 463 LayerTreeHostCommon::CalcDrawPropsImplInputs* inputs, |
| 497 PropertyTreeOption property_tree_option) { | 464 PropertyTreeOption property_tree_option) { |
| 498 inputs->render_surface_layer_list->clear(); | 465 inputs->render_surface_layer_list->clear(); |
| 499 | 466 |
| 500 const bool should_measure_property_tree_performance = | 467 const bool should_measure_property_tree_performance = |
| 501 property_tree_option == BUILD_PROPERTY_TREES_IF_NEEDED; | 468 property_tree_option == BUILD_PROPERTY_TREES_IF_NEEDED; |
| 502 | 469 |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 684 | 651 |
| 685 PropertyTrees* GetPropertyTrees(Layer* layer) { | 652 PropertyTrees* GetPropertyTrees(Layer* layer) { |
| 686 return layer->GetLayerTree()->property_trees(); | 653 return layer->GetLayerTree()->property_trees(); |
| 687 } | 654 } |
| 688 | 655 |
| 689 PropertyTrees* GetPropertyTrees(LayerImpl* layer) { | 656 PropertyTrees* GetPropertyTrees(LayerImpl* layer) { |
| 690 return layer->layer_tree_impl()->property_trees(); | 657 return layer->layer_tree_impl()->property_trees(); |
| 691 } | 658 } |
| 692 | 659 |
| 693 } // namespace cc | 660 } // namespace cc |
| OLD | NEW |