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

Side by Side Diff: cc/trees/property_tree_builder.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/property_tree_builder.h" 5 #include "cc/trees/property_tree_builder.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <map> 9 #include <map>
10 #include <set> 10 #include <set>
(...skipping 30 matching lines...) Expand all
41 const LayerType* outer_viewport_scroll_layer; 41 const LayerType* outer_viewport_scroll_layer;
42 const LayerType* overscroll_elasticity_layer; 42 const LayerType* overscroll_elasticity_layer;
43 gfx::Vector2dF elastic_overscroll; 43 gfx::Vector2dF elastic_overscroll;
44 float page_scale_factor; 44 float page_scale_factor;
45 bool in_subtree_of_page_scale_layer; 45 bool in_subtree_of_page_scale_layer;
46 bool affected_by_inner_viewport_bounds_delta; 46 bool affected_by_inner_viewport_bounds_delta;
47 bool affected_by_outer_viewport_bounds_delta; 47 bool affected_by_outer_viewport_bounds_delta;
48 bool should_flatten; 48 bool should_flatten;
49 bool target_is_clipped; 49 bool target_is_clipped;
50 bool is_hidden; 50 bool is_hidden;
51 bool contributes_to_copy_request;
51 const gfx::Transform* device_transform; 52 const gfx::Transform* device_transform;
52 gfx::Vector2dF scroll_compensation_adjustment; 53 gfx::Vector2dF scroll_compensation_adjustment;
53 gfx::Transform compound_transform_since_render_target; 54 gfx::Transform compound_transform_since_render_target;
54 bool axis_align_since_render_target; 55 bool axis_align_since_render_target;
55 int sequence_number; 56 int sequence_number;
56 }; 57 };
57 58
58 template <typename LayerType> 59 template <typename LayerType>
59 struct DataForRecursionFromChild { 60 struct DataForRecursionFromChild {
60 int num_copy_requests_in_subtree; 61 int num_copy_requests_in_subtree;
(...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 data_for_children->compound_transform_since_render_target *= 568 data_for_children->compound_transform_since_render_target *=
568 layer->transform(); 569 layer->transform();
569 return false; 570 return false;
570 } 571 }
571 572
572 EffectNode node; 573 EffectNode node;
573 node.owner_id = layer->id(); 574 node.owner_id = layer->id();
574 node.data.opacity = layer->opacity(); 575 node.data.opacity = layer->opacity();
575 node.data.screen_space_opacity = layer->opacity(); 576 node.data.screen_space_opacity = layer->opacity();
576 node.data.has_render_surface = should_create_render_surface; 577 node.data.has_render_surface = should_create_render_surface;
578 // A node contributes to copy request when it is in the subtree of a layer
579 // with a copy request and is visible inside the copy request.
580 data_for_children->contributes_to_copy_request =
581 layer->HasCopyRequest() ||
582 (data_from_ancestor.contributes_to_copy_request &&
583 layer->opacity() != 0.f);
584 node.data.contributes_to_copy_request =
ajuma 2016/01/15 15:02:47 Does this value need to get updated on the composi
jaydasika 2016/01/19 20:02:49 Done.
585 data_for_children->contributes_to_copy_request;
577 586
578 if (!is_root) { 587 if (!is_root) {
579 // The effect node's transform id is used only when we create a render 588 // The effect node's transform id is used only when we create a render
580 // surface. So, we can leave the default value when we don't create a render 589 // surface. So, we can leave the default value when we don't create a render
581 // surface. 590 // surface.
582 if (should_create_render_surface) { 591 if (should_create_render_surface) {
583 // In this case, we will create a transform node, so it's safe to use the 592 // In this case, we will create a transform node, so it's safe to use the
584 // next available id from the transform tree as this effect node's 593 // next available id from the transform tree as this effect node's
585 // transform id. 594 // transform id.
586 node.data.transform_id = 595 node.data.transform_id =
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 layer->set_draw_blend_mode(SkXfermode::kSrcOver_Mode); 639 layer->set_draw_blend_mode(SkXfermode::kSrcOver_Mode);
631 } else { 640 } else {
632 layer->set_draw_blend_mode(layer->blend_mode()); 641 layer->set_draw_blend_mode(layer->blend_mode());
633 } 642 }
634 643
635 bool created_transform_node = AddTransformNodeIfNeeded( 644 bool created_transform_node = AddTransformNodeIfNeeded(
636 data_from_parent, layer, created_render_surface, &data_for_children); 645 data_from_parent, layer, created_render_surface, &data_for_children);
637 AddClipNodeIfNeeded(data_from_parent, layer, created_render_surface, 646 AddClipNodeIfNeeded(data_from_parent, layer, created_render_surface,
638 created_transform_node, &data_for_children); 647 created_transform_node, &data_for_children);
639 648
640 data_for_children.is_hidden =
641 layer->hide_layer_and_subtree() || data_from_parent.is_hidden;
642 layer->set_is_hidden_from_property_trees(data_for_children.is_hidden);
643
644 for (size_t i = 0; i < layer->children().size(); ++i) { 649 for (size_t i = 0; i < layer->children().size(); ++i) {
645 if (!layer->child_at(i)->scroll_parent()) { 650 if (!layer->child_at(i)->scroll_parent()) {
646 DataForRecursionFromChild<LayerType> data_from_child; 651 DataForRecursionFromChild<LayerType> data_from_child;
647 BuildPropertyTreesInternal(layer->child_at(i), data_for_children, 652 BuildPropertyTreesInternal(layer->child_at(i), data_for_children,
648 &data_from_child); 653 &data_from_child);
649 data_to_parent->Merge(data_from_child); 654 data_to_parent->Merge(data_from_child);
650 } else { 655 } else {
651 // The child should be included in its scroll parent's list of scroll 656 // The child should be included in its scroll parent's list of scroll
652 // children. 657 // children.
653 DCHECK(layer->child_at(i)->scroll_parent()->scroll_children()->count( 658 DCHECK(layer->child_at(i)->scroll_parent()->scroll_children()->count(
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
725 data_for_recursion.outer_viewport_scroll_layer = outer_viewport_scroll_layer; 730 data_for_recursion.outer_viewport_scroll_layer = outer_viewport_scroll_layer;
726 data_for_recursion.overscroll_elasticity_layer = overscroll_elasticity_layer; 731 data_for_recursion.overscroll_elasticity_layer = overscroll_elasticity_layer;
727 data_for_recursion.elastic_overscroll = elastic_overscroll; 732 data_for_recursion.elastic_overscroll = elastic_overscroll;
728 data_for_recursion.page_scale_factor = page_scale_factor; 733 data_for_recursion.page_scale_factor = page_scale_factor;
729 data_for_recursion.in_subtree_of_page_scale_layer = false; 734 data_for_recursion.in_subtree_of_page_scale_layer = false;
730 data_for_recursion.affected_by_inner_viewport_bounds_delta = false; 735 data_for_recursion.affected_by_inner_viewport_bounds_delta = false;
731 data_for_recursion.affected_by_outer_viewport_bounds_delta = false; 736 data_for_recursion.affected_by_outer_viewport_bounds_delta = false;
732 data_for_recursion.should_flatten = false; 737 data_for_recursion.should_flatten = false;
733 data_for_recursion.target_is_clipped = false; 738 data_for_recursion.target_is_clipped = false;
734 data_for_recursion.is_hidden = false; 739 data_for_recursion.is_hidden = false;
740 data_for_recursion.contributes_to_copy_request = false;
735 data_for_recursion.device_transform = &device_transform; 741 data_for_recursion.device_transform = &device_transform;
736 742
737 data_for_recursion.transform_tree->clear(); 743 data_for_recursion.transform_tree->clear();
738 data_for_recursion.clip_tree->clear(); 744 data_for_recursion.clip_tree->clear();
739 data_for_recursion.effect_tree->clear(); 745 data_for_recursion.effect_tree->clear();
740 data_for_recursion.compound_transform_since_render_target = gfx::Transform(); 746 data_for_recursion.compound_transform_since_render_target = gfx::Transform();
741 data_for_recursion.axis_align_since_render_target = true; 747 data_for_recursion.axis_align_since_render_target = true;
742 data_for_recursion.sequence_number = property_trees->sequence_number; 748 data_for_recursion.sequence_number = property_trees->sequence_number;
743 data_for_recursion.transform_tree->set_device_scale_factor( 749 data_for_recursion.transform_tree->set_device_scale_factor(
744 device_scale_factor); 750 device_scale_factor);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
795 const gfx::Transform& device_transform, 801 const gfx::Transform& device_transform,
796 PropertyTrees* property_trees) { 802 PropertyTrees* property_trees) {
797 BuildPropertyTreesTopLevelInternal( 803 BuildPropertyTreesTopLevelInternal(
798 root_layer, page_scale_layer, inner_viewport_scroll_layer, 804 root_layer, page_scale_layer, inner_viewport_scroll_layer,
799 outer_viewport_scroll_layer, overscroll_elasticity_layer, 805 outer_viewport_scroll_layer, overscroll_elasticity_layer,
800 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, 806 elastic_overscroll, page_scale_factor, device_scale_factor, viewport,
801 device_transform, property_trees); 807 device_transform, property_trees);
802 } 808 }
803 809
804 } // namespace cc 810 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698