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 903 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
914 layer->SetElementId(LayerIdToElementIdForTesting(layer->id())); | 914 layer->SetElementId(LayerIdToElementIdForTesting(layer->id())); |
915 } | 915 } |
916 | 916 |
917 void LayerTreeImpl::SetElementIdsForTesting() { | 917 void LayerTreeImpl::SetElementIdsForTesting() { |
918 LayerListIterator<LayerImpl> it(root_layer_for_testing_); | 918 LayerListIterator<LayerImpl> it(root_layer_for_testing_); |
919 for (; it != LayerListIterator<LayerImpl>(nullptr); ++it) { | 919 for (; it != LayerListIterator<LayerImpl>(nullptr); ++it) { |
920 SetElementIdForTesting(*it); | 920 SetElementIdForTesting(*it); |
921 } | 921 } |
922 } | 922 } |
923 | 923 |
924 bool LayerTreeImpl::UpdateDrawProperties(bool update_lcd_text) { | 924 bool LayerTreeImpl::UpdateDrawProperties( |
| 925 bool update_lcd_text, |
| 926 bool force_skip_verify_visible_rect_calculations) { |
925 if (!needs_update_draw_properties_) | 927 if (!needs_update_draw_properties_) |
926 return true; | 928 return true; |
927 | 929 |
928 // Calling UpdateDrawProperties must clear this flag, so there can be no | 930 // Calling UpdateDrawProperties must clear this flag, so there can be no |
929 // early outs before this. | 931 // early outs before this. |
930 needs_update_draw_properties_ = false; | 932 needs_update_draw_properties_ = false; |
931 | 933 |
932 // For max_texture_size. When a new output surface is received the needs | 934 // For max_texture_size. When a new output surface is received the needs |
933 // update draw properties flag is set again. | 935 // update draw properties flag is set again. |
934 if (!layer_tree_host_impl_->compositor_frame_sink()) | 936 if (!layer_tree_host_impl_->compositor_frame_sink()) |
935 return false; | 937 return false; |
936 | 938 |
937 // Clear this after the renderer early out, as it should still be | 939 // Clear this after the renderer early out, as it should still be |
938 // possible to hit test even without a renderer. | 940 // possible to hit test even without a renderer. |
939 render_surface_layer_list_.clear(); | 941 render_surface_layer_list_.clear(); |
940 | 942 |
941 if (layer_list_.empty()) | 943 if (layer_list_.empty()) |
942 return false; | 944 return false; |
943 | 945 |
944 { | 946 { |
945 base::ElapsedTimer timer; | 947 base::ElapsedTimer timer; |
946 TRACE_EVENT2( | 948 TRACE_EVENT2( |
947 "cc", "LayerTreeImpl::UpdateDrawProperties::CalculateDrawProperties", | 949 "cc", "LayerTreeImpl::UpdateDrawProperties::CalculateDrawProperties", |
948 "IsActive", IsActiveTree(), "SourceFrameNumber", source_frame_number_); | 950 "IsActive", IsActiveTree(), "SourceFrameNumber", source_frame_number_); |
949 bool can_render_to_separate_surface = | 951 bool can_render_to_separate_surface = |
950 (!is_in_resourceless_software_draw_mode()); | 952 (!is_in_resourceless_software_draw_mode()); |
951 | 953 |
| 954 // We verify visible rect calculations whenever we verify clip tree |
| 955 // calculations except when this function is explicitly passed a flag asking |
| 956 // us to skip it. |
| 957 bool verify_visible_rect_calculations = |
| 958 force_skip_verify_visible_rect_calculations |
| 959 ? false |
| 960 : settings().verify_clip_tree_calculations; |
952 LayerTreeHostCommon::CalcDrawPropsImplInputs inputs( | 961 LayerTreeHostCommon::CalcDrawPropsImplInputs inputs( |
953 layer_list_[0], DrawViewportSize(), | 962 layer_list_[0], DrawViewportSize(), |
954 layer_tree_host_impl_->DrawTransform(), device_scale_factor(), | 963 layer_tree_host_impl_->DrawTransform(), device_scale_factor(), |
955 current_page_scale_factor(), PageScaleLayer(), | 964 current_page_scale_factor(), PageScaleLayer(), |
956 InnerViewportScrollLayer(), OuterViewportScrollLayer(), | 965 InnerViewportScrollLayer(), OuterViewportScrollLayer(), |
957 elastic_overscroll()->Current(IsActiveTree()), | 966 elastic_overscroll()->Current(IsActiveTree()), |
958 OverscrollElasticityLayer(), resource_provider()->max_texture_size(), | 967 OverscrollElasticityLayer(), resource_provider()->max_texture_size(), |
959 can_render_to_separate_surface, | 968 can_render_to_separate_surface, |
960 settings().layer_transforms_should_scale_layer_contents, | 969 settings().layer_transforms_should_scale_layer_contents, |
961 settings().verify_clip_tree_calculations, | 970 settings().verify_clip_tree_calculations, |
| 971 verify_visible_rect_calculations, |
962 settings().verify_transform_tree_calculations, | 972 settings().verify_transform_tree_calculations, |
963 &render_surface_layer_list_, &property_trees_); | 973 &render_surface_layer_list_, &property_trees_); |
964 LayerTreeHostCommon::CalculateDrawProperties(&inputs); | 974 LayerTreeHostCommon::CalculateDrawProperties(&inputs); |
965 if (const char* client_name = GetClientNameForMetrics()) { | 975 if (const char* client_name = GetClientNameForMetrics()) { |
966 UMA_HISTOGRAM_COUNTS( | 976 UMA_HISTOGRAM_COUNTS( |
967 base::StringPrintf( | 977 base::StringPrintf( |
968 "Compositing.%s.LayerTreeImpl.CalculateDrawPropertiesUs", | 978 "Compositing.%s.LayerTreeImpl.CalculateDrawPropertiesUs", |
969 client_name), | 979 client_name), |
970 timer.Elapsed().InMicroseconds()); | 980 timer.Elapsed().InMicroseconds()); |
971 UMA_HISTOGRAM_COUNTS_100( | 981 UMA_HISTOGRAM_COUNTS_100( |
(...skipping 1101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2073 | 2083 |
2074 void LayerTreeImpl::ResetAllChangeTracking() { | 2084 void LayerTreeImpl::ResetAllChangeTracking() { |
2075 layers_that_should_push_properties_.clear(); | 2085 layers_that_should_push_properties_.clear(); |
2076 // Iterate over all layers, including masks and replicas. | 2086 // Iterate over all layers, including masks and replicas. |
2077 for (auto& layer : *layers_) | 2087 for (auto& layer : *layers_) |
2078 layer->ResetChangeTracking(); | 2088 layer->ResetChangeTracking(); |
2079 property_trees_.ResetAllChangeTracking(); | 2089 property_trees_.ResetAllChangeTracking(); |
2080 } | 2090 } |
2081 | 2091 |
2082 } // namespace cc | 2092 } // namespace cc |
OLD | NEW |