OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |