Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(528)

Side by Side Diff: cc/trees/layer_tree_host_common.cc

Issue 2693703010: cc: Remove support for disabling non-root render surfaces. (Closed)
Patch Set: softwaredraw-remove-no-surfaces: rebase Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/trees/layer_tree_host_common.h ('k') | cc/trees/layer_tree_host_common_perftest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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 bool verify_clip_tree_calculations, 82 bool verify_clip_tree_calculations,
84 bool verify_visible_rect_calculations, 83 bool verify_visible_rect_calculations,
85 LayerImplList* render_surface_layer_list, 84 LayerImplList* render_surface_layer_list,
86 PropertyTrees* property_trees) 85 PropertyTrees* property_trees)
87 : root_layer(root_layer), 86 : root_layer(root_layer),
88 device_viewport_size(device_viewport_size), 87 device_viewport_size(device_viewport_size),
89 device_transform(device_transform), 88 device_transform(device_transform),
90 device_scale_factor(device_scale_factor), 89 device_scale_factor(device_scale_factor),
91 page_scale_factor(page_scale_factor), 90 page_scale_factor(page_scale_factor),
92 page_scale_layer(page_scale_layer), 91 page_scale_layer(page_scale_layer),
93 inner_viewport_scroll_layer(inner_viewport_scroll_layer), 92 inner_viewport_scroll_layer(inner_viewport_scroll_layer),
94 outer_viewport_scroll_layer(outer_viewport_scroll_layer), 93 outer_viewport_scroll_layer(outer_viewport_scroll_layer),
95 elastic_overscroll(elastic_overscroll), 94 elastic_overscroll(elastic_overscroll),
96 elastic_overscroll_application_layer( 95 elastic_overscroll_application_layer(
97 elastic_overscroll_application_layer), 96 elastic_overscroll_application_layer),
98 max_texture_size(max_texture_size), 97 max_texture_size(max_texture_size),
99 can_render_to_separate_surface(can_render_to_separate_surface),
100 can_adjust_raster_scales(can_adjust_raster_scales), 98 can_adjust_raster_scales(can_adjust_raster_scales),
101 verify_clip_tree_calculations(verify_clip_tree_calculations), 99 verify_clip_tree_calculations(verify_clip_tree_calculations),
102 verify_visible_rect_calculations(verify_visible_rect_calculations), 100 verify_visible_rect_calculations(verify_visible_rect_calculations),
103 render_surface_layer_list(render_surface_layer_list), 101 render_surface_layer_list(render_surface_layer_list),
104 property_trees(property_trees) {} 102 property_trees(property_trees) {}
105 103
106 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting:: 104 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting::
107 CalcDrawPropsImplInputsForTesting(LayerImpl* root_layer, 105 CalcDrawPropsImplInputsForTesting(LayerImpl* root_layer,
108 const gfx::Size& device_viewport_size, 106 const gfx::Size& device_viewport_size,
109 const gfx::Transform& device_transform, 107 const gfx::Transform& device_transform,
110 float device_scale_factor, 108 float device_scale_factor,
111 LayerImplList* render_surface_layer_list) 109 LayerImplList* render_surface_layer_list)
112 : CalcDrawPropsImplInputs(root_layer, 110 : CalcDrawPropsImplInputs(root_layer,
113 device_viewport_size, 111 device_viewport_size,
114 device_transform, 112 device_transform,
115 device_scale_factor, 113 device_scale_factor,
116 1.f, 114 1.f,
117 NULL, 115 NULL,
118 NULL, 116 NULL,
119 NULL, 117 NULL,
120 gfx::Vector2dF(), 118 gfx::Vector2dF(),
121 NULL, 119 NULL,
122 std::numeric_limits<int>::max() / 2, 120 std::numeric_limits<int>::max() / 2,
123 true,
124 false, 121 false,
125 true, 122 true,
126 true, 123 true,
127 render_surface_layer_list, 124 render_surface_layer_list,
128 GetPropertyTrees(root_layer)) { 125 GetPropertyTrees(root_layer)) {
129 DCHECK(root_layer); 126 DCHECK(root_layer);
130 DCHECK(render_surface_layer_list); 127 DCHECK(render_surface_layer_list);
131 } 128 }
132 129
133 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting:: 130 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting::
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 } 275 }
279 276
280 enum PropertyTreeOption { 277 enum PropertyTreeOption {
281 BUILD_PROPERTY_TREES_IF_NEEDED, 278 BUILD_PROPERTY_TREES_IF_NEEDED,
282 DONT_BUILD_PROPERTY_TREES 279 DONT_BUILD_PROPERTY_TREES
283 }; 280 };
284 281
285 static void ComputeInitialRenderSurfaceLayerList( 282 static void ComputeInitialRenderSurfaceLayerList(
286 LayerTreeImpl* layer_tree_impl, 283 LayerTreeImpl* layer_tree_impl,
287 PropertyTrees* property_trees, 284 PropertyTrees* property_trees,
288 LayerImplList* render_surface_layer_list, 285 LayerImplList* render_surface_layer_list) {
289 bool can_render_to_separate_surface) {
290 // Add all non-skipped surfaces to the initial render surface layer list. Add 286 // 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 287 // 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. 288 // add their content rect to their target surface's accumulated content rect.
293 for (LayerImpl* layer : *layer_tree_impl) { 289 for (LayerImpl* layer : *layer_tree_impl) {
294 if (layer->render_surface()) { 290 if (layer->render_surface()) {
295 layer->ClearRenderSurfaceLayerList(); 291 layer->ClearRenderSurfaceLayerList();
296 ClearMaskLayersAreDrawnRenderSurfaceLayerListMembers( 292 ClearMaskLayersAreDrawnRenderSurfaceLayerListMembers(
297 layer->render_surface()); 293 layer->render_surface());
298 } 294 }
299 layer->set_is_drawn_render_surface_layer_list_member(false); 295 layer->set_is_drawn_render_surface_layer_list_member(false);
300 296
301 bool is_root = layer_tree_impl->IsRootLayer(layer); 297 bool is_root = layer_tree_impl->IsRootLayer(layer);
302 bool skip_layer = !is_root && draw_property_utils::LayerShouldBeSkipped( 298 bool skip_layer = !is_root && draw_property_utils::LayerShouldBeSkipped(
303 layer, property_trees->transform_tree, 299 layer, property_trees->transform_tree,
304 property_trees->effect_tree); 300 property_trees->effect_tree);
305 if (skip_layer) 301 if (skip_layer)
306 continue; 302 continue;
307 303
308 bool render_to_separate_surface = 304 bool render_to_separate_surface = is_root || layer->render_surface();
309 is_root || (can_render_to_separate_surface && layer->render_surface());
310
311 if (render_to_separate_surface) { 305 if (render_to_separate_surface) {
312 DCHECK(layer->render_surface()); 306 DCHECK(layer->render_surface());
313 DCHECK(layer->render_target() == layer->render_surface()); 307 DCHECK(layer->render_target() == layer->render_surface());
314 RenderSurfaceImpl* surface = layer->render_surface(); 308 RenderSurfaceImpl* surface = layer->render_surface();
315 surface->ClearAccumulatedContentRect(); 309 surface->ClearAccumulatedContentRect();
316 render_surface_layer_list->push_back(layer); 310 render_surface_layer_list->push_back(layer);
317 if (is_root) { 311 if (is_root) {
318 // The root surface does not contribute to any other surface, it has no 312 // The root surface does not contribute to any other surface, it has no
319 // target. 313 // target.
320 layer->render_surface()->set_contributes_to_drawn_surface(false); 314 layer->render_surface()->set_contributes_to_drawn_surface(false);
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 } 421 }
428 SetMaskLayersAreDrawnRenderSurfaceLayerListMembers(surface, property_trees); 422 SetMaskLayersAreDrawnRenderSurfaceLayerListMembers(surface, property_trees);
429 final_surface_list->push_back(layer); 423 final_surface_list->push_back(layer);
430 } 424 }
431 } 425 }
432 426
433 static void CalculateRenderSurfaceLayerList( 427 static void CalculateRenderSurfaceLayerList(
434 LayerTreeImpl* layer_tree_impl, 428 LayerTreeImpl* layer_tree_impl,
435 PropertyTrees* property_trees, 429 PropertyTrees* property_trees,
436 LayerImplList* render_surface_layer_list, 430 LayerImplList* render_surface_layer_list,
437 const bool can_render_to_separate_surface,
438 const int max_texture_size) { 431 const int max_texture_size) {
439 // This calculates top level Render Surface Layer List, and Layer List for all 432 // This calculates top level Render Surface Layer List, and Layer List for all
440 // Render Surfaces. 433 // Render Surfaces.
441 // |render_surface_layer_list| is the top level RenderSurfaceLayerList. 434 // |render_surface_layer_list| is the top level RenderSurfaceLayerList.
442 435
443 LayerImplList initial_render_surface_list; 436 LayerImplList initial_render_surface_list;
444 437
445 // First compute an RSLL that might include surfaces that later turn out to 438 // First compute an RSLL that might include surfaces that later turn out to
446 // have an empty content rect. After surface content rects are computed, 439 // have an empty content rect. After surface content rects are computed,
447 // produce a final RSLL that omits empty surfaces. 440 // produce a final RSLL that omits empty surfaces.
448 ComputeInitialRenderSurfaceLayerList(layer_tree_impl, property_trees, 441 ComputeInitialRenderSurfaceLayerList(layer_tree_impl, property_trees,
449 &initial_render_surface_list, 442 &initial_render_surface_list);
450 can_render_to_separate_surface);
451 ComputeSurfaceContentRects(layer_tree_impl, property_trees, 443 ComputeSurfaceContentRects(layer_tree_impl, property_trees,
452 &initial_render_surface_list, max_texture_size); 444 &initial_render_surface_list, max_texture_size);
453 ComputeListOfNonEmptySurfaces(layer_tree_impl, property_trees, 445 ComputeListOfNonEmptySurfaces(layer_tree_impl, property_trees,
454 &initial_render_surface_list, 446 &initial_render_surface_list,
455 render_surface_layer_list); 447 render_surface_layer_list);
456 } 448 }
457 449
458 void CalculateDrawPropertiesInternal( 450 void CalculateDrawPropertiesInternal(
459 LayerTreeHostCommon::CalcDrawPropsImplInputs* inputs, 451 LayerTreeHostCommon::CalcDrawPropsImplInputs* inputs,
460 PropertyTreeOption property_tree_option) { 452 PropertyTreeOption property_tree_option) {
(...skipping 14 matching lines...) Expand all
475 "LayerTreeHostCommon::ComputeVisibleRectsWithPropertyTrees"); 467 "LayerTreeHostCommon::ComputeVisibleRectsWithPropertyTrees");
476 } 468 }
477 469
478 draw_property_utils::BuildPropertyTreesAndComputeVisibleRects( 470 draw_property_utils::BuildPropertyTreesAndComputeVisibleRects(
479 inputs->root_layer, inputs->page_scale_layer, 471 inputs->root_layer, inputs->page_scale_layer,
480 inputs->inner_viewport_scroll_layer, 472 inputs->inner_viewport_scroll_layer,
481 inputs->outer_viewport_scroll_layer, 473 inputs->outer_viewport_scroll_layer,
482 inputs->elastic_overscroll_application_layer, 474 inputs->elastic_overscroll_application_layer,
483 inputs->elastic_overscroll, inputs->page_scale_factor, 475 inputs->elastic_overscroll, inputs->page_scale_factor,
484 inputs->device_scale_factor, gfx::Rect(inputs->device_viewport_size), 476 inputs->device_scale_factor, gfx::Rect(inputs->device_viewport_size),
485 inputs->device_transform, inputs->can_render_to_separate_surface, 477 inputs->device_transform, inputs->property_trees,
486 inputs->property_trees, &visible_layer_list); 478 &visible_layer_list);
487 479
488 // Property trees are normally constructed on the main thread and 480 // Property trees are normally constructed on the main thread and
489 // passed to compositor thread. Source to parent updates on them are not 481 // passed to compositor thread. Source to parent updates on them are not
490 // allowed in the compositor thread. Some tests build them on the 482 // allowed in the compositor thread. Some tests build them on the
491 // compositor thread, so we need to explicitly disallow source to parent 483 // compositor thread, so we need to explicitly disallow source to parent
492 // updates when they are built on compositor thread. 484 // updates when they are built on compositor thread.
493 inputs->property_trees->transform_tree 485 inputs->property_trees->transform_tree
494 .set_source_to_parent_updates_allowed(false); 486 .set_source_to_parent_updates_allowed(false);
495 if (should_measure_property_tree_performance) { 487 if (should_measure_property_tree_performance) {
496 TRACE_EVENT_END0( 488 TRACE_EVENT_END0(
(...skipping 24 matching lines...) Expand all
521 property_trees->clip_tree.SetViewportClip( 513 property_trees->clip_tree.SetViewportClip(
522 gfx::RectF(gfx::SizeF(inputs->device_viewport_size))); 514 gfx::RectF(gfx::SizeF(inputs->device_viewport_size)));
523 float page_scale_factor_for_root = 515 float page_scale_factor_for_root =
524 inputs->page_scale_layer == inputs->root_layer 516 inputs->page_scale_layer == inputs->root_layer
525 ? inputs->page_scale_factor 517 ? inputs->page_scale_factor
526 : 1.f; 518 : 1.f;
527 property_trees->transform_tree.SetRootTransformsAndScales( 519 property_trees->transform_tree.SetRootTransformsAndScales(
528 inputs->device_scale_factor, page_scale_factor_for_root, 520 inputs->device_scale_factor, page_scale_factor_for_root,
529 inputs->device_transform, inputs->root_layer->position()); 521 inputs->device_transform, inputs->root_layer->position());
530 draw_property_utils::ComputeVisibleRects( 522 draw_property_utils::ComputeVisibleRects(
531 inputs->root_layer, inputs->property_trees, 523 inputs->root_layer, inputs->property_trees, &visible_layer_list);
532 inputs->can_render_to_separate_surface, &visible_layer_list);
533 break; 524 break;
534 } 525 }
535 } 526 }
536 527
537 if (should_measure_property_tree_performance) { 528 if (should_measure_property_tree_performance) {
538 TRACE_EVENT_BEGIN0(TRACE_DISABLED_BY_DEFAULT("cc.debug.cdp-perf"), 529 TRACE_EVENT_BEGIN0(TRACE_DISABLED_BY_DEFAULT("cc.debug.cdp-perf"),
539 "LayerTreeHostCommon::CalculateDrawProperties"); 530 "LayerTreeHostCommon::CalculateDrawProperties");
540 } 531 }
541 532
542 DCHECK(inputs->can_render_to_separate_surface ==
543 inputs->property_trees->non_root_surfaces_enabled);
544 for (LayerImpl* layer : visible_layer_list) { 533 for (LayerImpl* layer : visible_layer_list) {
545 draw_property_utils::ComputeLayerDrawProperties(layer, 534 draw_property_utils::ComputeLayerDrawProperties(layer,
546 inputs->property_trees); 535 inputs->property_trees);
547 } 536 }
548 537
549 CalculateRenderSurfaceLayerList( 538 CalculateRenderSurfaceLayerList(
550 inputs->root_layer->layer_tree_impl(), inputs->property_trees, 539 inputs->root_layer->layer_tree_impl(), inputs->property_trees,
551 inputs->render_surface_layer_list, inputs->can_render_to_separate_surface, 540 inputs->render_surface_layer_list, inputs->max_texture_size);
552 inputs->max_texture_size);
553 541
554 if (inputs->verify_clip_tree_calculations) 542 if (inputs->verify_clip_tree_calculations)
555 draw_property_utils::VerifyClipTreeCalculations(visible_layer_list, 543 draw_property_utils::VerifyClipTreeCalculations(visible_layer_list,
556 inputs->property_trees); 544 inputs->property_trees);
557 if (inputs->verify_visible_rect_calculations) 545 if (inputs->verify_visible_rect_calculations)
558 draw_property_utils::VerifyVisibleRectsCalculations(visible_layer_list, 546 draw_property_utils::VerifyVisibleRectsCalculations(visible_layer_list,
559 inputs->property_trees); 547 inputs->property_trees);
560 548
561 if (should_measure_property_tree_performance) { 549 if (should_measure_property_tree_performance) {
562 TRACE_EVENT_END0(TRACE_DISABLED_BY_DEFAULT("cc.debug.cdp-perf"), 550 TRACE_EVENT_END0(TRACE_DISABLED_BY_DEFAULT("cc.debug.cdp-perf"),
563 "LayerTreeHostCommon::CalculateDrawProperties"); 551 "LayerTreeHostCommon::CalculateDrawProperties");
564 } 552 }
565 553
566 // A root layer render_surface should always exist after 554 // A root layer render_surface should always exist after
567 // CalculateDrawProperties. 555 // CalculateDrawProperties.
568 DCHECK(inputs->root_layer->render_surface()); 556 DCHECK(inputs->root_layer->render_surface());
569 } 557 }
570 558
571 void LayerTreeHostCommon::CalculateDrawPropertiesForTesting( 559 void LayerTreeHostCommon::CalculateDrawPropertiesForTesting(
572 CalcDrawPropsMainInputsForTesting* inputs) { 560 CalcDrawPropsMainInputsForTesting* inputs) {
573 LayerList update_layer_list; 561 LayerList update_layer_list;
574 bool can_render_to_separate_surface = true;
575 PropertyTrees* property_trees = 562 PropertyTrees* property_trees =
576 inputs->root_layer->layer_tree_host()->property_trees(); 563 inputs->root_layer->layer_tree_host()->property_trees();
577 Layer* overscroll_elasticity_layer = nullptr; 564 Layer* overscroll_elasticity_layer = nullptr;
578 gfx::Vector2dF elastic_overscroll; 565 gfx::Vector2dF elastic_overscroll;
579 PropertyTreeBuilder::BuildPropertyTrees( 566 PropertyTreeBuilder::BuildPropertyTrees(
580 inputs->root_layer, inputs->page_scale_layer, 567 inputs->root_layer, inputs->page_scale_layer,
581 inputs->inner_viewport_scroll_layer, inputs->outer_viewport_scroll_layer, 568 inputs->inner_viewport_scroll_layer, inputs->outer_viewport_scroll_layer,
582 overscroll_elasticity_layer, elastic_overscroll, 569 overscroll_elasticity_layer, elastic_overscroll,
583 inputs->page_scale_factor, inputs->device_scale_factor, 570 inputs->page_scale_factor, inputs->device_scale_factor,
584 gfx::Rect(inputs->device_viewport_size), inputs->device_transform, 571 gfx::Rect(inputs->device_viewport_size), inputs->device_transform,
585 property_trees); 572 property_trees);
586 draw_property_utils::UpdatePropertyTrees(property_trees, 573 draw_property_utils::UpdatePropertyTrees(property_trees);
587 can_render_to_separate_surface);
588 draw_property_utils::FindLayersThatNeedUpdates( 574 draw_property_utils::FindLayersThatNeedUpdates(
589 inputs->root_layer->layer_tree_host(), property_trees, 575 inputs->root_layer->layer_tree_host(), property_trees,
590 &update_layer_list); 576 &update_layer_list);
591 } 577 }
592 578
593 void LayerTreeHostCommon::CalculateDrawProperties( 579 void LayerTreeHostCommon::CalculateDrawProperties(
594 CalcDrawPropsImplInputs* inputs) { 580 CalcDrawPropsImplInputs* inputs) {
595 CalculateDrawPropertiesInternal(inputs, DONT_BUILD_PROPERTY_TREES); 581 CalculateDrawPropertiesInternal(inputs, DONT_BUILD_PROPERTY_TREES);
596 582
597 if (CdpPerfTracingEnabled()) { 583 if (CdpPerfTracingEnabled()) {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
648 634
649 PropertyTrees* GetPropertyTrees(Layer* layer) { 635 PropertyTrees* GetPropertyTrees(Layer* layer) {
650 return layer->layer_tree_host()->property_trees(); 636 return layer->layer_tree_host()->property_trees();
651 } 637 }
652 638
653 PropertyTrees* GetPropertyTrees(LayerImpl* layer) { 639 PropertyTrees* GetPropertyTrees(LayerImpl* layer) {
654 return layer->layer_tree_impl()->property_trees(); 640 return layer->layer_tree_impl()->property_trees();
655 } 641 }
656 642
657 } // namespace cc 643 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_common.h ('k') | cc/trees/layer_tree_host_common_perftest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698