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

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: Created 4 years, 6 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 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 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 // If pending tree topology changed and we still want to notify the pending 138 // If pending tree topology changed and we still want to notify the pending
139 // tree about scroll offset in the active tree, we may not find the 139 // tree about scroll offset in the active tree, we may not find the
140 // corresponding pending layer. 140 // corresponding pending layer.
141 if (LayerById(layer_id)) { 141 if (LayerById(layer_id)) {
142 transform_id = LayerById(layer_id)->transform_tree_index(); 142 transform_id = LayerById(layer_id)->transform_tree_index();
143 } else { 143 } else {
144 DCHECK(!IsActiveTree()); 144 DCHECK(!IsActiveTree());
145 return; 145 return;
146 } 146 }
147 147
148 if (transform_id != -1) { 148 if (transform_id != TransformTree::kInvalidNodeId) {
149 TransformNode* node = transform_tree.Node(transform_id); 149 TransformNode* node = transform_tree.Node(transform_id);
150 if (node->data.scroll_offset != 150 if (node->data.scroll_offset !=
151 scroll_tree.current_scroll_offset(layer_id)) { 151 scroll_tree.current_scroll_offset(layer_id)) {
152 node->data.scroll_offset = scroll_tree.current_scroll_offset(layer_id); 152 node->data.scroll_offset = scroll_tree.current_scroll_offset(layer_id);
153 node->data.needs_local_transform_update = true; 153 node->data.needs_local_transform_update = true;
154 transform_tree.set_needs_update(true); 154 transform_tree.set_needs_update(true);
155 } 155 }
156 node->data.transform_changed = true; 156 node->data.transform_changed = true;
157 property_trees()->changed = true; 157 property_trees()->changed = true;
158 set_needs_update_draw_properties(); 158 set_needs_update_draw_properties();
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after
550 550
551 int LayerTreeImpl::LastScrolledLayerId() const { 551 int LayerTreeImpl::LastScrolledLayerId() const {
552 return last_scrolled_layer_id_; 552 return last_scrolled_layer_id_;
553 } 553 }
554 554
555 void LayerTreeImpl::SetCurrentlyScrollingLayer(LayerImpl* layer) { 555 void LayerTreeImpl::SetCurrentlyScrollingLayer(LayerImpl* layer) {
556 ScrollTree& scroll_tree = property_trees()->scroll_tree; 556 ScrollTree& scroll_tree = property_trees()->scroll_tree;
557 ScrollNode* scroll_node = scroll_tree.CurrentlyScrollingNode(); 557 ScrollNode* scroll_node = scroll_tree.CurrentlyScrollingNode();
558 int old_id = scroll_node ? scroll_node->owner_id : Layer::INVALID_ID; 558 int old_id = scroll_node ? scroll_node->owner_id : Layer::INVALID_ID;
559 int new_id = layer ? layer->id() : Layer::INVALID_ID; 559 int new_id = layer ? layer->id() : Layer::INVALID_ID;
560 int new_scroll_node_id = layer ? layer->scroll_tree_index() : -1; 560 int new_scroll_node_id =
561 layer ? layer->scroll_tree_index() : ScrollTree::kInvalidNodeId;
561 if (layer) 562 if (layer)
562 last_scrolled_layer_id_ = new_id; 563 last_scrolled_layer_id_ = new_id;
563 564
564 if (old_id == new_id) 565 if (old_id == new_id)
565 return; 566 return;
566 567
567 ScrollbarAnimationController* old_animation_controller = 568 ScrollbarAnimationController* old_animation_controller =
568 layer_tree_host_impl_->ScrollbarAnimationControllerForId(old_id); 569 layer_tree_host_impl_->ScrollbarAnimationControllerForId(old_id);
569 ScrollbarAnimationController* new_animation_controller = 570 ScrollbarAnimationController* new_animation_controller =
570 layer_tree_host_impl_->ScrollbarAnimationControllerForId(new_id); 571 layer_tree_host_impl_->ScrollbarAnimationControllerForId(new_id);
(...skipping 1046 matching lines...) Expand 10 before | Expand all | Expand 10 after
1617 const ClipTree& clip_tree, 1618 const ClipTree& clip_tree,
1618 const TransformTree& transform_tree) { 1619 const TransformTree& transform_tree) {
1619 // We need to visit all ancestor clip nodes to check this. Checking with just 1620 // We need to visit all ancestor clip nodes to check this. Checking with just
1620 // the combined clip stored at a clip node is not enough because parent 1621 // the combined clip stored at a clip node is not enough because parent
1621 // combined clip can sometimes be smaller than current combined clip. This can 1622 // combined clip can sometimes be smaller than current combined clip. This can
1622 // happen when we have transforms like rotation that inflate the combined 1623 // happen when we have transforms like rotation that inflate the combined
1623 // clip's bounds. Also, the point can be clipped by the content rect of an 1624 // clip's bounds. Also, the point can be clipped by the content rect of an
1624 // ancestor render surface. 1625 // ancestor render surface.
1625 1626
1626 // We first check if the point is clipped by viewport. 1627 // We first check if the point is clipped by viewport.
1627 const ClipNode* clip_node = clip_tree.Node(1); 1628 const ClipNode* clip_node = clip_tree.Node(ClipTree::kViewportNodeId);
1628 gfx::Rect combined_clip_in_target_space = 1629 gfx::Rect combined_clip_in_target_space =
1629 gfx::ToEnclosingRect(clip_node->data.combined_clip_in_target_space); 1630 gfx::ToEnclosingRect(clip_node->data.combined_clip_in_target_space);
1630 if (!PointHitsRect(screen_space_point, gfx::Transform(), 1631 if (!PointHitsRect(screen_space_point, gfx::Transform(),
1631 combined_clip_in_target_space, NULL)) 1632 combined_clip_in_target_space, NULL))
1632 return true; 1633 return true;
1633 1634
1634 for (const ClipNode* clip_node = clip_tree.Node(layer->clip_tree_index()); 1635 for (const ClipNode* clip_node = clip_tree.Node(layer->clip_tree_index());
1635 clip_node->id > 1; clip_node = clip_tree.parent(clip_node)) { 1636 clip_node->id > ClipTree::kViewportNodeId;
1637 clip_node = clip_tree.parent(clip_node)) {
1636 if (clip_node->data.applies_local_clip) { 1638 if (clip_node->data.applies_local_clip) {
1637 const TransformNode* transform_node = 1639 const TransformNode* transform_node =
1638 transform_tree.Node(clip_node->data.target_id); 1640 transform_tree.Node(clip_node->data.target_id);
1639 gfx::Rect combined_clip_in_target_space = 1641 gfx::Rect combined_clip_in_target_space =
1640 gfx::ToEnclosingRect(clip_node->data.combined_clip_in_target_space); 1642 gfx::ToEnclosingRect(clip_node->data.combined_clip_in_target_space);
1641 1643
1642 const LayerImpl* target_layer = 1644 const LayerImpl* target_layer =
1643 layer->layer_tree_impl()->LayerById(transform_node->owner_id); 1645 layer->layer_tree_impl()->LayerById(transform_node->owner_id);
1644 DCHECK(transform_node->id == 0 || target_layer->render_surface() || 1646 DCHECK(transform_node->id == TransformTree::kDeviceNodeId ||
1647 target_layer->render_surface() ||
1645 layer->layer_tree_impl()->is_in_resourceless_software_draw_mode()); 1648 layer->layer_tree_impl()->is_in_resourceless_software_draw_mode());
1646 gfx::Transform surface_screen_space_transform = 1649 gfx::Transform surface_screen_space_transform =
1647 transform_node->id == 0 || 1650 transform_node->id == TransformTree::kDeviceNodeId ||
1648 (layer->layer_tree_impl() 1651 (layer->layer_tree_impl()
1649 ->is_in_resourceless_software_draw_mode()) 1652 ->is_in_resourceless_software_draw_mode())
1650 ? gfx::Transform() 1653 ? gfx::Transform()
1651 : SurfaceScreenSpaceTransform(target_layer, transform_tree); 1654 : SurfaceScreenSpaceTransform(target_layer, transform_tree);
1652 if (!PointHitsRect(screen_space_point, surface_screen_space_transform, 1655 if (!PointHitsRect(screen_space_point, surface_screen_space_transform,
1653 combined_clip_in_target_space, NULL)) { 1656 combined_clip_in_target_space, NULL)) {
1654 return true; 1657 return true;
1655 } 1658 }
1656 } 1659 }
1657 const LayerImpl* clip_node_owner = 1660 const LayerImpl* clip_node_owner =
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after
2078 2081
2079 void LayerTreeImpl::ResetAllChangeTracking() { 2082 void LayerTreeImpl::ResetAllChangeTracking() {
2080 layers_that_should_push_properties_.clear(); 2083 layers_that_should_push_properties_.clear();
2081 // Iterate over all layers, including masks and replicas. 2084 // Iterate over all layers, including masks and replicas.
2082 for (auto& layer : *layers_) 2085 for (auto& layer : *layers_)
2083 layer->ResetChangeTracking(); 2086 layer->ResetChangeTracking();
2084 property_trees_.ResetAllChangeTracking(); 2087 property_trees_.ResetAllChangeTracking();
2085 } 2088 }
2086 2089
2087 } // namespace cc 2090 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698