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

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

Issue 1588093004: Compute if a layer is drawn without LayerTree hierarchy (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/draw_property_utils.h" 5 #include "cc/trees/draw_property_utils.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <vector> 9 #include <vector>
10 10
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 TransformToScreenIsKnown(backface_test_layer, tree) && 423 TransformToScreenIsKnown(backface_test_layer, tree) &&
424 IsLayerBackFaceVisible(backface_test_layer, tree)) 424 IsLayerBackFaceVisible(backface_test_layer, tree))
425 return true; 425 return true;
426 426
427 return false; 427 return false;
428 } 428 }
429 429
430 template <typename LayerType> 430 template <typename LayerType>
431 void FindLayersThatNeedUpdates( 431 void FindLayersThatNeedUpdates(
432 LayerType* layer, 432 LayerType* layer,
433 const TransformTree& tree, 433 const TransformTree& transform_tree,
434 bool subtree_is_visible_from_ancestor, 434 const EffectTree& effect_tree,
435 typename LayerType::LayerListType* update_layer_list, 435 typename LayerType::LayerListType* update_layer_list,
436 std::vector<LayerType*>* visible_layer_list) { 436 std::vector<LayerType*>* visible_layer_list) {
437 DCHECK_GE(layer->effect_tree_index(), 0);
437 bool layer_is_drawn = 438 bool layer_is_drawn =
438 layer->HasCopyRequest() || 439 effect_tree.Node(layer->effect_tree_index())->data.is_drawn;
439 (subtree_is_visible_from_ancestor && !layer->hide_layer_and_subtree());
440 440
441 if (layer->parent() && SubtreeShouldBeSkipped(layer, layer_is_drawn, tree)) 441 if (layer->parent() &&
442 SubtreeShouldBeSkipped(layer, layer_is_drawn, transform_tree))
442 return; 443 return;
443 444
444 if (!LayerShouldBeSkipped(layer, layer_is_drawn, tree)) { 445 if (!LayerShouldBeSkipped(layer, layer_is_drawn, transform_tree)) {
445 visible_layer_list->push_back(layer); 446 visible_layer_list->push_back(layer);
446 update_layer_list->push_back(layer); 447 update_layer_list->push_back(layer);
447 } 448 }
448 449
449 // Append mask layers to the update layer list. They don't have valid visible 450 // Append mask layers to the update layer list. They don't have valid visible
450 // rects, so need to get added after the above calculation. Replica layers 451 // rects, so need to get added after the above calculation. Replica layers
451 // don't need to be updated. 452 // don't need to be updated.
452 if (LayerType* mask_layer = layer->mask_layer()) 453 if (LayerType* mask_layer = layer->mask_layer())
453 update_layer_list->push_back(mask_layer); 454 update_layer_list->push_back(mask_layer);
454 if (LayerType* replica_layer = layer->replica_layer()) { 455 if (LayerType* replica_layer = layer->replica_layer()) {
455 if (LayerType* mask_layer = replica_layer->mask_layer()) 456 if (LayerType* mask_layer = replica_layer->mask_layer())
456 update_layer_list->push_back(mask_layer); 457 update_layer_list->push_back(mask_layer);
457 } 458 }
458 459
459 for (size_t i = 0; i < layer->children().size(); ++i) { 460 for (size_t i = 0; i < layer->children().size(); ++i) {
460 FindLayersThatNeedUpdates(layer->child_at(i), tree, layer_is_drawn, 461 FindLayersThatNeedUpdates(layer->child_at(i), transform_tree, effect_tree,
461 update_layer_list, visible_layer_list); 462 update_layer_list, visible_layer_list);
462 } 463 }
463 } 464 }
464 465
465 template <typename LayerType> 466 template <typename LayerType>
466 void UpdateRenderSurfacesWithEffectTreeInternal(EffectTree* effect_tree, 467 void UpdateRenderSurfacesWithEffectTreeInternal(EffectTree* effect_tree,
467 LayerType* layer) { 468 LayerType* layer) {
468 EffectNode* node = effect_tree->Node(layer->effect_tree_index()); 469 EffectNode* node = effect_tree->Node(layer->effect_tree_index());
469 470
470 if (node->owner_id == layer->id() && node->data.has_render_surface) 471 if (node->owner_id == layer->id() && node->data.has_render_surface)
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
672 property_trees->non_root_surfaces_enabled = can_render_to_separate_surface; 673 property_trees->non_root_surfaces_enabled = can_render_to_separate_surface;
673 property_trees->transform_tree.set_needs_update(true); 674 property_trees->transform_tree.set_needs_update(true);
674 } 675 }
675 if (property_trees->transform_tree.needs_update()) 676 if (property_trees->transform_tree.needs_update())
676 property_trees->clip_tree.set_needs_update(true); 677 property_trees->clip_tree.set_needs_update(true);
677 ComputeTransforms(&property_trees->transform_tree); 678 ComputeTransforms(&property_trees->transform_tree);
678 ComputeClips(&property_trees->clip_tree, property_trees->transform_tree, 679 ComputeClips(&property_trees->clip_tree, property_trees->transform_tree,
679 can_render_to_separate_surface); 680 can_render_to_separate_surface);
680 ComputeEffects(&property_trees->effect_tree); 681 ComputeEffects(&property_trees->effect_tree);
681 682
682 const bool subtree_is_visible_from_ancestor = true;
683 FindLayersThatNeedUpdates(root_layer, property_trees->transform_tree, 683 FindLayersThatNeedUpdates(root_layer, property_trees->transform_tree,
684 subtree_is_visible_from_ancestor, update_layer_list, 684 property_trees->effect_tree, update_layer_list,
685 visible_layer_list); 685 visible_layer_list);
686 CalculateVisibleRects<LayerType>( 686 CalculateVisibleRects<LayerType>(
687 *visible_layer_list, property_trees->clip_tree, 687 *visible_layer_list, property_trees->clip_tree,
688 property_trees->transform_tree, can_render_to_separate_surface); 688 property_trees->transform_tree, can_render_to_separate_surface);
689 } 689 }
690 690
691 void BuildPropertyTreesAndComputeVisibleRects( 691 void BuildPropertyTreesAndComputeVisibleRects(
692 Layer* root_layer, 692 Layer* root_layer,
693 const Layer* page_scale_layer, 693 const Layer* page_scale_layer,
694 const Layer* inner_viewport_scroll_layer, 694 const Layer* inner_viewport_scroll_layer,
(...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after
1178 1178
1179 void UpdateElasticOverscrollInPropertyTrees( 1179 void UpdateElasticOverscrollInPropertyTrees(
1180 PropertyTrees* property_trees, 1180 PropertyTrees* property_trees,
1181 const Layer* overscroll_elasticity_layer, 1181 const Layer* overscroll_elasticity_layer,
1182 const gfx::Vector2dF& elastic_overscroll) { 1182 const gfx::Vector2dF& elastic_overscroll) {
1183 UpdateElasticOverscrollInPropertyTreesInternal( 1183 UpdateElasticOverscrollInPropertyTreesInternal(
1184 property_trees, overscroll_elasticity_layer, elastic_overscroll); 1184 property_trees, overscroll_elasticity_layer, elastic_overscroll);
1185 } 1185 }
1186 1186
1187 } // namespace cc 1187 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698