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

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

Issue 2087963003: cc: Stop creating unused 0 property tree nodes other than transform Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 5 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_impl.cc ('k') | cc/trees/property_tree.h » ('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_impl.h" 5 #include "cc/trees/layer_tree_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 // If pending tree topology changed and we still want to notify the pending 153 // If pending tree topology changed and we still want to notify the pending
154 // tree about scroll offset in the active tree, we may not find the 154 // tree about scroll offset in the active tree, we may not find the
155 // corresponding pending layer. 155 // corresponding pending layer.
156 if (LayerById(layer_id)) { 156 if (LayerById(layer_id)) {
157 transform_id = LayerById(layer_id)->transform_tree_index(); 157 transform_id = LayerById(layer_id)->transform_tree_index();
158 } else { 158 } else {
159 DCHECK(!IsActiveTree()); 159 DCHECK(!IsActiveTree());
160 return; 160 return;
161 } 161 }
162 162
163 if (transform_id != -1) { 163 if (transform_id != TransformTree::kInvalidNodeId) {
164 TransformNode* node = transform_tree.Node(transform_id); 164 TransformNode* node = transform_tree.Node(transform_id);
165 if (node->scroll_offset != scroll_tree.current_scroll_offset(layer_id)) { 165 if (node->scroll_offset != scroll_tree.current_scroll_offset(layer_id)) {
166 node->scroll_offset = scroll_tree.current_scroll_offset(layer_id); 166 node->scroll_offset = scroll_tree.current_scroll_offset(layer_id);
167 node->needs_local_transform_update = true; 167 node->needs_local_transform_update = true;
168 transform_tree.set_needs_update(true); 168 transform_tree.set_needs_update(true);
169 } 169 }
170 node->transform_changed = true; 170 node->transform_changed = true;
171 property_trees()->changed = true; 171 property_trees()->changed = true;
172 set_needs_update_draw_properties(); 172 set_needs_update_draw_properties();
173 } 173 }
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after
569 569
570 int LayerTreeImpl::LastScrolledLayerId() const { 570 int LayerTreeImpl::LastScrolledLayerId() const {
571 return last_scrolled_layer_id_; 571 return last_scrolled_layer_id_;
572 } 572 }
573 573
574 void LayerTreeImpl::SetCurrentlyScrollingLayer(LayerImpl* layer) { 574 void LayerTreeImpl::SetCurrentlyScrollingLayer(LayerImpl* layer) {
575 ScrollTree& scroll_tree = property_trees()->scroll_tree; 575 ScrollTree& scroll_tree = property_trees()->scroll_tree;
576 ScrollNode* scroll_node = scroll_tree.CurrentlyScrollingNode(); 576 ScrollNode* scroll_node = scroll_tree.CurrentlyScrollingNode();
577 int old_id = scroll_node ? scroll_node->owner_id : Layer::INVALID_ID; 577 int old_id = scroll_node ? scroll_node->owner_id : Layer::INVALID_ID;
578 int new_id = layer ? layer->id() : Layer::INVALID_ID; 578 int new_id = layer ? layer->id() : Layer::INVALID_ID;
579 int new_scroll_node_id = layer ? layer->scroll_tree_index() : -1; 579 int new_scroll_node_id =
580 layer ? layer->scroll_tree_index() : ScrollTree::kInvalidNodeId;
580 if (layer) 581 if (layer)
581 last_scrolled_layer_id_ = new_id; 582 last_scrolled_layer_id_ = new_id;
582 583
583 if (old_id == new_id) 584 if (old_id == new_id)
584 return; 585 return;
585 586
586 ScrollbarAnimationController* old_animation_controller = 587 ScrollbarAnimationController* old_animation_controller =
587 layer_tree_host_impl_->ScrollbarAnimationControllerForId(old_id); 588 layer_tree_host_impl_->ScrollbarAnimationControllerForId(old_id);
588 ScrollbarAnimationController* new_animation_controller = 589 ScrollbarAnimationController* new_animation_controller =
589 layer_tree_host_impl_->ScrollbarAnimationControllerForId(new_id); 590 layer_tree_host_impl_->ScrollbarAnimationControllerForId(new_id);
(...skipping 1064 matching lines...) Expand 10 before | Expand all | Expand 10 after
1654 const ClipTree& clip_tree, 1655 const ClipTree& clip_tree,
1655 const TransformTree& transform_tree) { 1656 const TransformTree& transform_tree) {
1656 // We need to visit all ancestor clip nodes to check this. Checking with just 1657 // We need to visit all ancestor clip nodes to check this. Checking with just
1657 // the combined clip stored at a clip node is not enough because parent 1658 // the combined clip stored at a clip node is not enough because parent
1658 // combined clip can sometimes be smaller than current combined clip. This can 1659 // combined clip can sometimes be smaller than current combined clip. This can
1659 // happen when we have transforms like rotation that inflate the combined 1660 // happen when we have transforms like rotation that inflate the combined
1660 // clip's bounds. Also, the point can be clipped by the content rect of an 1661 // clip's bounds. Also, the point can be clipped by the content rect of an
1661 // ancestor render surface. 1662 // ancestor render surface.
1662 1663
1663 // We first check if the point is clipped by viewport. 1664 // We first check if the point is clipped by viewport.
1664 const ClipNode* clip_node = clip_tree.Node(1); 1665 const ClipNode* clip_node = clip_tree.Node(ClipTree::kViewportNodeId);
1665 gfx::Rect combined_clip_in_target_space = 1666 gfx::Rect combined_clip_in_target_space =
1666 gfx::ToEnclosingRect(clip_node->combined_clip_in_target_space); 1667 gfx::ToEnclosingRect(clip_node->combined_clip_in_target_space);
1667 if (!PointHitsRect(screen_space_point, gfx::Transform(), 1668 if (!PointHitsRect(screen_space_point, gfx::Transform(),
1668 combined_clip_in_target_space, NULL)) 1669 combined_clip_in_target_space, NULL))
1669 return true; 1670 return true;
1670 1671
1671 for (const ClipNode* clip_node = clip_tree.Node(layer->clip_tree_index()); 1672 for (const ClipNode* clip_node = clip_tree.Node(layer->clip_tree_index());
1672 clip_node->id > 1; clip_node = clip_tree.parent(clip_node)) { 1673 clip_node->id > ClipTree::kViewportNodeId;
1674 clip_node = clip_tree.parent(clip_node)) {
1673 if (clip_node->applies_local_clip) { 1675 if (clip_node->applies_local_clip) {
1674 const TransformNode* transform_node = 1676 const TransformNode* transform_node =
1675 transform_tree.Node(clip_node->target_transform_id); 1677 transform_tree.Node(clip_node->target_transform_id);
1676 gfx::Rect combined_clip_in_target_space = 1678 gfx::Rect combined_clip_in_target_space =
1677 gfx::ToEnclosingRect(clip_node->combined_clip_in_target_space); 1679 gfx::ToEnclosingRect(clip_node->combined_clip_in_target_space);
1678 1680
1679 const LayerImpl* target_layer = 1681 const LayerImpl* target_layer =
1680 layer->layer_tree_impl()->LayerById(transform_node->owner_id); 1682 layer->layer_tree_impl()->LayerById(transform_node->owner_id);
1681 DCHECK(transform_node->id == 0 || target_layer->render_surface() || 1683 DCHECK(transform_node->id == TransformTree::kDeviceNodeId ||
1684 target_layer->render_surface() ||
1682 layer->layer_tree_impl()->is_in_resourceless_software_draw_mode()); 1685 layer->layer_tree_impl()->is_in_resourceless_software_draw_mode());
1683 gfx::Transform surface_screen_space_transform = 1686 gfx::Transform surface_screen_space_transform =
1684 transform_node->id == 0 || 1687 transform_node->id == TransformTree::kDeviceNodeId ||
1685 (layer->layer_tree_impl() 1688 (layer->layer_tree_impl()
1686 ->is_in_resourceless_software_draw_mode()) 1689 ->is_in_resourceless_software_draw_mode())
1687 ? gfx::Transform() 1690 ? gfx::Transform()
1688 : SurfaceScreenSpaceTransform(target_layer, transform_tree); 1691 : SurfaceScreenSpaceTransform(target_layer, transform_tree);
1689 if (!PointHitsRect(screen_space_point, surface_screen_space_transform, 1692 if (!PointHitsRect(screen_space_point, surface_screen_space_transform,
1690 combined_clip_in_target_space, NULL)) { 1693 combined_clip_in_target_space, NULL)) {
1691 return true; 1694 return true;
1692 } 1695 }
1693 } 1696 }
1694 const LayerImpl* clip_node_owner = 1697 const LayerImpl* clip_node_owner =
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
1992 1995
1993 void LayerTreeImpl::ResetAllChangeTracking() { 1996 void LayerTreeImpl::ResetAllChangeTracking() {
1994 layers_that_should_push_properties_.clear(); 1997 layers_that_should_push_properties_.clear();
1995 // Iterate over all layers, including masks and replicas. 1998 // Iterate over all layers, including masks and replicas.
1996 for (auto& layer : *layers_) 1999 for (auto& layer : *layers_)
1997 layer->ResetChangeTracking(); 2000 layer->ResetChangeTracking();
1998 property_trees_.ResetAllChangeTracking(); 2001 property_trees_.ResetAllChangeTracking();
1999 } 2002 }
2000 2003
2001 } // namespace cc 2004 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl.cc ('k') | cc/trees/property_tree.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698