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

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

Issue 2834123002: cc: Replace render surface layer list with a render surface list (Closed)
Patch Set: Address review comments Created 3 years, 7 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') | cc/trees/layer_tree_impl_unittest.cc » ('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 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 372
373 if (OuterViewportScrollLayer()) 373 if (OuterViewportScrollLayer())
374 offset += OuterViewportScrollLayer()->MaxScrollOffset(); 374 offset += OuterViewportScrollLayer()->MaxScrollOffset();
375 375
376 return offset; 376 return offset;
377 } 377 }
378 378
379 std::unique_ptr<OwnedLayerImplList> LayerTreeImpl::DetachLayers() { 379 std::unique_ptr<OwnedLayerImplList> LayerTreeImpl::DetachLayers() {
380 root_layer_for_testing_ = nullptr; 380 root_layer_for_testing_ = nullptr;
381 layer_list_.clear(); 381 layer_list_.clear();
382 render_surface_layer_list_.clear(); 382 render_surface_list_.clear();
383 set_needs_update_draw_properties(); 383 set_needs_update_draw_properties();
384 std::unique_ptr<OwnedLayerImplList> ret = std::move(layers_); 384 std::unique_ptr<OwnedLayerImplList> ret = std::move(layers_);
385 layers_.reset(new OwnedLayerImplList); 385 layers_.reset(new OwnedLayerImplList);
386 return ret; 386 return ret;
387 } 387 }
388 388
389 void LayerTreeImpl::SetPropertyTrees(PropertyTrees* property_trees) { 389 void LayerTreeImpl::SetPropertyTrees(PropertyTrees* property_trees) {
390 std::vector<std::unique_ptr<RenderSurfaceImpl>> old_render_surfaces; 390 std::vector<std::unique_ptr<RenderSurfaceImpl>> old_render_surfaces;
391 property_trees_.effect_tree.TakeRenderSurfaces(&old_render_surfaces); 391 property_trees_.effect_tree.TakeRenderSurfaces(&old_render_surfaces);
392 property_trees_ = *property_trees; 392 property_trees_ = *property_trees;
(...skipping 636 matching lines...) Expand 10 before | Expand all | Expand 10 after
1029 // early outs before this. 1029 // early outs before this.
1030 needs_update_draw_properties_ = false; 1030 needs_update_draw_properties_ = false;
1031 1031
1032 // For max_texture_size. When a new output surface is received the needs 1032 // For max_texture_size. When a new output surface is received the needs
1033 // update draw properties flag is set again. 1033 // update draw properties flag is set again.
1034 if (!layer_tree_host_impl_->compositor_frame_sink()) 1034 if (!layer_tree_host_impl_->compositor_frame_sink())
1035 return false; 1035 return false;
1036 1036
1037 // Clear this after the renderer early out, as it should still be 1037 // Clear this after the renderer early out, as it should still be
1038 // possible to hit test even without a renderer. 1038 // possible to hit test even without a renderer.
1039 render_surface_layer_list_.clear(); 1039 render_surface_list_.clear();
1040 1040
1041 if (layer_list_.empty()) 1041 if (layer_list_.empty())
1042 return false; 1042 return false;
1043 1043
1044 { 1044 {
1045 base::ElapsedTimer timer; 1045 base::ElapsedTimer timer;
1046 TRACE_EVENT2( 1046 TRACE_EVENT2(
1047 "cc", "LayerTreeImpl::UpdateDrawProperties::CalculateDrawProperties", 1047 "cc", "LayerTreeImpl::UpdateDrawProperties::CalculateDrawProperties",
1048 "IsActive", IsActiveTree(), "SourceFrameNumber", source_frame_number_); 1048 "IsActive", IsActiveTree(), "SourceFrameNumber", source_frame_number_);
1049 // TODO(crbug.com/692780): Remove this option entirely once this get to 1049 // TODO(crbug.com/692780): Remove this option entirely once this get to
1050 // stable and proves it works. 1050 // stable and proves it works.
1051 bool can_render_to_separate_surface = true; 1051 bool can_render_to_separate_surface = true;
1052 1052
1053 // We verify visible rect calculations whenever we verify clip tree 1053 // We verify visible rect calculations whenever we verify clip tree
1054 // calculations except when this function is explicitly passed a flag asking 1054 // calculations except when this function is explicitly passed a flag asking
1055 // us to skip it. 1055 // us to skip it.
1056 LayerTreeHostCommon::CalcDrawPropsImplInputs inputs( 1056 LayerTreeHostCommon::CalcDrawPropsImplInputs inputs(
1057 layer_list_[0], DrawViewportSize(), 1057 layer_list_[0], DrawViewportSize(),
1058 layer_tree_host_impl_->DrawTransform(), device_scale_factor(), 1058 layer_tree_host_impl_->DrawTransform(), device_scale_factor(),
1059 current_page_scale_factor(), PageScaleLayer(), 1059 current_page_scale_factor(), PageScaleLayer(),
1060 InnerViewportScrollLayer(), OuterViewportScrollLayer(), 1060 InnerViewportScrollLayer(), OuterViewportScrollLayer(),
1061 elastic_overscroll()->Current(IsActiveTree()), 1061 elastic_overscroll()->Current(IsActiveTree()),
1062 OverscrollElasticityLayer(), resource_provider()->max_texture_size(), 1062 OverscrollElasticityLayer(), resource_provider()->max_texture_size(),
1063 can_render_to_separate_surface, 1063 can_render_to_separate_surface,
1064 settings().layer_transforms_should_scale_layer_contents, 1064 settings().layer_transforms_should_scale_layer_contents,
1065 &render_surface_layer_list_, &property_trees_); 1065 &render_surface_list_, &property_trees_);
1066 LayerTreeHostCommon::CalculateDrawProperties(&inputs); 1066 LayerTreeHostCommon::CalculateDrawProperties(&inputs);
1067 if (const char* client_name = GetClientNameForMetrics()) { 1067 if (const char* client_name = GetClientNameForMetrics()) {
1068 UMA_HISTOGRAM_COUNTS( 1068 UMA_HISTOGRAM_COUNTS(
1069 base::StringPrintf( 1069 base::StringPrintf(
1070 "Compositing.%s.LayerTreeImpl.CalculateDrawPropertiesUs", 1070 "Compositing.%s.LayerTreeImpl.CalculateDrawPropertiesUs",
1071 client_name), 1071 client_name),
1072 timer.Elapsed().InMicroseconds()); 1072 timer.Elapsed().InMicroseconds());
1073 UMA_HISTOGRAM_COUNTS_100( 1073 UMA_HISTOGRAM_COUNTS_100(
1074 base::StringPrintf("Compositing.%s.NumRenderSurfaces", client_name), 1074 base::StringPrintf("Compositing.%s.NumRenderSurfaces", client_name),
1075 base::saturated_cast<int>(render_surface_layer_list_.size())); 1075 base::saturated_cast<int>(render_surface_list_.size()));
1076 } 1076 }
1077 } 1077 }
1078 1078
1079 { 1079 {
1080 TRACE_EVENT2("cc", "LayerTreeImpl::UpdateDrawProperties::Occlusion", 1080 TRACE_EVENT2("cc", "LayerTreeImpl::UpdateDrawProperties::Occlusion",
1081 "IsActive", IsActiveTree(), "SourceFrameNumber", 1081 "IsActive", IsActiveTree(), "SourceFrameNumber",
1082 source_frame_number_); 1082 source_frame_number_);
1083 OcclusionTracker occlusion_tracker( 1083 OcclusionTracker occlusion_tracker(
1084 layer_list_[0]->GetRenderSurface()->content_rect()); 1084 layer_list_[0]->GetRenderSurface()->content_rect());
1085 occlusion_tracker.set_minimum_tracking_size( 1085 occlusion_tracker.set_minimum_tracking_size(
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
1193 PropertyTreeBuilder::BuildPropertyTrees( 1193 PropertyTreeBuilder::BuildPropertyTrees(
1194 layer_list_[0], PageScaleLayer(), InnerViewportScrollLayer(), 1194 layer_list_[0], PageScaleLayer(), InnerViewportScrollLayer(),
1195 OuterViewportScrollLayer(), OverscrollElasticityLayer(), 1195 OuterViewportScrollLayer(), OverscrollElasticityLayer(),
1196 elastic_overscroll()->Current(IsActiveTree()), 1196 elastic_overscroll()->Current(IsActiveTree()),
1197 current_page_scale_factor(), device_scale_factor(), 1197 current_page_scale_factor(), device_scale_factor(),
1198 gfx::Rect(DrawViewportSize()), layer_tree_host_impl_->DrawTransform(), 1198 gfx::Rect(DrawViewportSize()), layer_tree_host_impl_->DrawTransform(),
1199 &property_trees_); 1199 &property_trees_);
1200 property_trees_.transform_tree.set_source_to_parent_updates_allowed(false); 1200 property_trees_.transform_tree.set_source_to_parent_updates_allowed(false);
1201 } 1201 }
1202 1202
1203 const LayerImplList& LayerTreeImpl::RenderSurfaceLayerList() const { 1203 const RenderSurfaceList& LayerTreeImpl::GetRenderSurfaceList() const {
1204 // If this assert triggers, then the list is dirty. 1204 // If this assert triggers, then the list is dirty.
1205 DCHECK(!needs_update_draw_properties_); 1205 DCHECK(!needs_update_draw_properties_);
1206 return render_surface_layer_list_; 1206 return render_surface_list_;
1207 } 1207 }
1208 1208
1209 const Region& LayerTreeImpl::UnoccludedScreenSpaceRegion() const { 1209 const Region& LayerTreeImpl::UnoccludedScreenSpaceRegion() const {
1210 // If this assert triggers, then the render_surface_layer_list_ is dirty, so 1210 // If this assert triggers, then the render_surface_list_ is dirty, so the
1211 // the unoccluded_screen_space_region_ is not valid anymore. 1211 // unoccluded_screen_space_region_ is not valid anymore.
1212 DCHECK(!needs_update_draw_properties_); 1212 DCHECK(!needs_update_draw_properties_);
1213 return unoccluded_screen_space_region_; 1213 return unoccluded_screen_space_region_;
1214 } 1214 }
1215 1215
1216 gfx::SizeF LayerTreeImpl::ScrollableSize() const { 1216 gfx::SizeF LayerTreeImpl::ScrollableSize() const {
1217 LayerImpl* root_scroll_layer = OuterViewportScrollLayer() 1217 LayerImpl* root_scroll_layer = OuterViewportScrollLayer()
1218 ? OuterViewportScrollLayer() 1218 ? OuterViewportScrollLayer()
1219 : InnerViewportScrollLayer(); 1219 : InnerViewportScrollLayer();
1220 if (!root_scroll_layer) 1220 if (!root_scroll_layer)
1221 return gfx::SizeF(); 1221 return gfx::SizeF();
(...skipping 921 matching lines...) Expand 10 before | Expand all | Expand 10 after
2143 2143
2144 void LayerTreeImpl::ResetAllChangeTracking() { 2144 void LayerTreeImpl::ResetAllChangeTracking() {
2145 layers_that_should_push_properties_.clear(); 2145 layers_that_should_push_properties_.clear();
2146 // Iterate over all layers, including masks. 2146 // Iterate over all layers, including masks.
2147 for (auto& layer : *layers_) 2147 for (auto& layer : *layers_)
2148 layer->ResetChangeTracking(); 2148 layer->ResetChangeTracking();
2149 property_trees_.ResetAllChangeTracking(); 2149 property_trees_.ResetAllChangeTracking();
2150 } 2150 }
2151 2151
2152 } // namespace cc 2152 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_impl.h ('k') | cc/trees/layer_tree_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698