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

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

Issue 2042573002: cc : Fix hit testing bug in resourceless software draw mode (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2743
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
« no previous file with comments | « cc/trees/layer_tree_impl.h ('k') | no next file » | 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 812 matching lines...) Expand 10 before | Expand all | Expand 10 after
823 823
824 if (!root_layer()) 824 if (!root_layer())
825 return false; 825 return false;
826 826
827 { 827 {
828 base::ElapsedTimer timer; 828 base::ElapsedTimer timer;
829 TRACE_EVENT2( 829 TRACE_EVENT2(
830 "cc", "LayerTreeImpl::UpdateDrawProperties::CalculateDrawProperties", 830 "cc", "LayerTreeImpl::UpdateDrawProperties::CalculateDrawProperties",
831 "IsActive", IsActiveTree(), "SourceFrameNumber", source_frame_number_); 831 "IsActive", IsActiveTree(), "SourceFrameNumber", source_frame_number_);
832 bool can_render_to_separate_surface = 832 bool can_render_to_separate_surface =
833 (layer_tree_host_impl_->GetDrawMode() != 833 (!is_in_resourceless_software_draw_mode());
834 DRAW_MODE_RESOURCELESS_SOFTWARE);
835 834
836 LayerTreeHostCommon::CalcDrawPropsImplInputs inputs( 835 LayerTreeHostCommon::CalcDrawPropsImplInputs inputs(
837 root_layer(), DrawViewportSize(), 836 root_layer(), DrawViewportSize(),
838 layer_tree_host_impl_->DrawTransform(), device_scale_factor(), 837 layer_tree_host_impl_->DrawTransform(), device_scale_factor(),
839 current_page_scale_factor(), PageScaleLayer(), 838 current_page_scale_factor(), PageScaleLayer(),
840 InnerViewportScrollLayer(), OuterViewportScrollLayer(), 839 InnerViewportScrollLayer(), OuterViewportScrollLayer(),
841 elastic_overscroll()->Current(IsActiveTree()), 840 elastic_overscroll()->Current(IsActiveTree()),
842 OverscrollElasticityLayer(), resource_provider()->max_texture_size(), 841 OverscrollElasticityLayer(), resource_provider()->max_texture_size(),
843 settings().can_use_lcd_text, settings().layers_always_allowed_lcd_text, 842 settings().can_use_lcd_text, settings().layers_always_allowed_lcd_text,
844 can_render_to_separate_surface, 843 can_render_to_separate_surface,
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
937 : layer_tree_host_impl_->pending_tree(); 936 : layer_tree_host_impl_->pending_tree();
938 // If this is not the sync tree, then it is not safe to update lcd text 937 // If this is not the sync tree, then it is not safe to update lcd text
939 // as it causes invalidations and the tiles may be in use. 938 // as it causes invalidations and the tiles may be in use.
940 DCHECK_EQ(this, sync_tree); 939 DCHECK_EQ(this, sync_tree);
941 for (const auto& layer : picture_layers_) 940 for (const auto& layer : picture_layers_)
942 layer->UpdateCanUseLCDTextAfterCommit(); 941 layer->UpdateCanUseLCDTextAfterCommit();
943 } 942 }
944 943
945 // Resourceless draw do not need tiles and should not affect existing tile 944 // Resourceless draw do not need tiles and should not affect existing tile
946 // priorities. 945 // priorities.
947 if (layer_tree_host_impl_->GetDrawMode() != DRAW_MODE_RESOURCELESS_SOFTWARE) { 946 if (!is_in_resourceless_software_draw_mode()) {
948 TRACE_EVENT_BEGIN2("cc", "LayerTreeImpl::UpdateDrawProperties::UpdateTiles", 947 TRACE_EVENT_BEGIN2("cc", "LayerTreeImpl::UpdateDrawProperties::UpdateTiles",
949 "IsActive", IsActiveTree(), "SourceFrameNumber", 948 "IsActive", IsActiveTree(), "SourceFrameNumber",
950 source_frame_number_); 949 source_frame_number_);
951 size_t layers_updated_count = 0; 950 size_t layers_updated_count = 0;
952 bool tile_priorities_updated = false; 951 bool tile_priorities_updated = false;
953 for (PictureLayerImpl* layer : picture_layers_) { 952 for (PictureLayerImpl* layer : picture_layers_) {
954 if (!layer->is_drawn_render_surface_layer_list_member()) 953 if (!layer->is_drawn_render_surface_layer_list_member())
955 continue; 954 continue;
956 ++layers_updated_count; 955 ++layers_updated_count;
957 tile_priorities_updated |= layer->UpdateTiles(); 956 tile_priorities_updated |= layer->UpdateTiles();
(...skipping 691 matching lines...) Expand 10 before | Expand all | Expand 10 after
1649 for (const ClipNode* clip_node = clip_tree.Node(layer->clip_tree_index()); 1648 for (const ClipNode* clip_node = clip_tree.Node(layer->clip_tree_index());
1650 clip_node->id > 1; clip_node = clip_tree.parent(clip_node)) { 1649 clip_node->id > 1; clip_node = clip_tree.parent(clip_node)) {
1651 if (clip_node->data.applies_local_clip) { 1650 if (clip_node->data.applies_local_clip) {
1652 const TransformNode* transform_node = 1651 const TransformNode* transform_node =
1653 transform_tree.Node(clip_node->data.target_id); 1652 transform_tree.Node(clip_node->data.target_id);
1654 gfx::Rect combined_clip_in_target_space = 1653 gfx::Rect combined_clip_in_target_space =
1655 gfx::ToEnclosingRect(clip_node->data.combined_clip_in_target_space); 1654 gfx::ToEnclosingRect(clip_node->data.combined_clip_in_target_space);
1656 1655
1657 const LayerImpl* target_layer = 1656 const LayerImpl* target_layer =
1658 layer->layer_tree_impl()->LayerById(transform_node->owner_id); 1657 layer->layer_tree_impl()->LayerById(transform_node->owner_id);
1659 DCHECK(transform_node->id == 0 || target_layer->render_surface()); 1658 DCHECK(transform_node->id == 0 || target_layer->render_surface() ||
1659 layer->layer_tree_impl()->is_in_resourceless_software_draw_mode());
1660 gfx::Transform surface_screen_space_transform = 1660 gfx::Transform surface_screen_space_transform =
1661 transform_node->id == 0 1661 transform_node->id == 0 ||
1662 (layer->layer_tree_impl()
1663 ->is_in_resourceless_software_draw_mode())
1662 ? gfx::Transform() 1664 ? gfx::Transform()
1663 : SurfaceScreenSpaceTransform(target_layer, transform_tree); 1665 : SurfaceScreenSpaceTransform(target_layer, transform_tree);
1664 if (!PointHitsRect(screen_space_point, surface_screen_space_transform, 1666 if (!PointHitsRect(screen_space_point, surface_screen_space_transform,
1665 combined_clip_in_target_space, NULL)) { 1667 combined_clip_in_target_space, NULL)) {
1666 return true; 1668 return true;
1667 } 1669 }
1668 } 1670 }
1669 const LayerImpl* clip_node_owner = 1671 const LayerImpl* clip_node_owner =
1670 layer->layer_tree_impl()->LayerById(clip_node->owner_id); 1672 layer->layer_tree_impl()->LayerById(clip_node->owner_id);
1671 if (clip_node_owner->render_surface() && 1673 if (clip_node_owner->render_surface() &&
(...skipping 422 matching lines...) Expand 10 before | Expand all | Expand 10 after
2094 } 2096 }
2095 2097
2096 void LayerTreeImpl::ResetAllChangeTracking() { 2098 void LayerTreeImpl::ResetAllChangeTracking() {
2097 layers_that_should_push_properties_.clear(); 2099 layers_that_should_push_properties_.clear();
2098 for (auto* layer : *this) 2100 for (auto* layer : *this)
2099 layer->ResetChangeTracking(); 2101 layer->ResetChangeTracking();
2100 property_trees_.ResetAllChangeTracking(); 2102 property_trees_.ResetAllChangeTracking();
2101 } 2103 }
2102 2104
2103 } // namespace cc 2105 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698