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_host_impl.h" | 5 #include "cc/trees/layer_tree_host_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 19 matching lines...) Expand all Loading... |
30 #include "cc/benchmarks/benchmark_instrumentation.h" | 30 #include "cc/benchmarks/benchmark_instrumentation.h" |
31 #include "cc/debug/rendering_stats_instrumentation.h" | 31 #include "cc/debug/rendering_stats_instrumentation.h" |
32 #include "cc/debug/traced_value.h" | 32 #include "cc/debug/traced_value.h" |
33 #include "cc/input/browser_controls_offset_manager.h" | 33 #include "cc/input/browser_controls_offset_manager.h" |
34 #include "cc/input/main_thread_scrolling_reason.h" | 34 #include "cc/input/main_thread_scrolling_reason.h" |
35 #include "cc/input/page_scale_animation.h" | 35 #include "cc/input/page_scale_animation.h" |
36 #include "cc/input/scroll_elasticity_helper.h" | 36 #include "cc/input/scroll_elasticity_helper.h" |
37 #include "cc/input/scroll_state.h" | 37 #include "cc/input/scroll_state.h" |
38 #include "cc/input/scrollbar_animation_controller.h" | 38 #include "cc/input/scrollbar_animation_controller.h" |
39 #include "cc/layers/append_quads_data.h" | 39 #include "cc/layers/append_quads_data.h" |
| 40 #include "cc/layers/effect_tree_layer_list_iterator.h" |
40 #include "cc/layers/heads_up_display_layer_impl.h" | 41 #include "cc/layers/heads_up_display_layer_impl.h" |
41 #include "cc/layers/layer_impl.h" | 42 #include "cc/layers/layer_impl.h" |
42 #include "cc/layers/layer_iterator.h" | |
43 #include "cc/layers/painted_scrollbar_layer_impl.h" | 43 #include "cc/layers/painted_scrollbar_layer_impl.h" |
44 #include "cc/layers/render_surface_impl.h" | 44 #include "cc/layers/render_surface_impl.h" |
45 #include "cc/layers/scrollbar_layer_impl_base.h" | 45 #include "cc/layers/scrollbar_layer_impl_base.h" |
46 #include "cc/layers/surface_layer_impl.h" | 46 #include "cc/layers/surface_layer_impl.h" |
47 #include "cc/layers/viewport.h" | 47 #include "cc/layers/viewport.h" |
48 #include "cc/output/compositor_frame.h" | 48 #include "cc/output/compositor_frame.h" |
49 #include "cc/output/compositor_frame_metadata.h" | 49 #include "cc/output/compositor_frame_metadata.h" |
50 #include "cc/output/compositor_frame_sink.h" | 50 #include "cc/output/compositor_frame_sink.h" |
51 #include "cc/output/copy_output_request.h" | 51 #include "cc/output/copy_output_request.h" |
52 #include "cc/quads/render_pass_draw_quad.h" | 52 #include "cc/quads/render_pass_draw_quad.h" |
(...skipping 846 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
899 const DrawMode draw_mode = GetDrawMode(); | 899 const DrawMode draw_mode = GetDrawMode(); |
900 | 900 |
901 int num_missing_tiles = 0; | 901 int num_missing_tiles = 0; |
902 int num_incomplete_tiles = 0; | 902 int num_incomplete_tiles = 0; |
903 int64_t checkerboarded_no_recording_content_area = 0; | 903 int64_t checkerboarded_no_recording_content_area = 0; |
904 int64_t checkerboarded_needs_raster_content_area = 0; | 904 int64_t checkerboarded_needs_raster_content_area = 0; |
905 bool have_copy_request = | 905 bool have_copy_request = |
906 active_tree()->property_trees()->effect_tree.HasCopyRequests(); | 906 active_tree()->property_trees()->effect_tree.HasCopyRequests(); |
907 bool have_missing_animated_tiles = false; | 907 bool have_missing_animated_tiles = false; |
908 | 908 |
909 LayerIterator end = LayerIterator::End(frame->render_surface_layer_list); | 909 for (EffectTreeLayerListIterator it(active_tree()); |
910 for (LayerIterator it = | 910 it.state() != EffectTreeLayerListIterator::State::END; ++it) { |
911 LayerIterator::Begin(frame->render_surface_layer_list); | 911 auto target_render_pass_id = it.target_render_surface()->GetRenderPassId(); |
912 it != end; ++it) { | |
913 auto target_render_pass_id = | |
914 it.target_render_surface_layer()->GetRenderSurface()->GetRenderPassId(); | |
915 RenderPass* target_render_pass = | 912 RenderPass* target_render_pass = |
916 FindRenderPassById(frame->render_passes, target_render_pass_id); | 913 FindRenderPassById(frame->render_passes, target_render_pass_id); |
917 | 914 |
918 AppendQuadsData append_quads_data; | 915 AppendQuadsData append_quads_data; |
919 | 916 |
920 RenderSurfaceImpl* render_surface = it->GetRenderSurface(); | 917 if (it.state() == EffectTreeLayerListIterator::State::TARGET_SURFACE) { |
921 if (it.represents_target_render_surface()) { | 918 RenderSurfaceImpl* render_surface = it.target_render_surface(); |
922 if (render_surface->HasCopyRequest()) { | 919 if (render_surface->HasCopyRequest()) { |
923 active_tree() | 920 active_tree() |
924 ->property_trees() | 921 ->property_trees() |
925 ->effect_tree.TakeCopyRequestsAndTransformToSurface( | 922 ->effect_tree.TakeCopyRequestsAndTransformToSurface( |
926 render_surface->EffectTreeIndex(), | 923 render_surface->EffectTreeIndex(), |
927 &target_render_pass->copy_requests); | 924 &target_render_pass->copy_requests); |
928 } | 925 } |
929 } else if (it.represents_contributing_render_surface() && | 926 } else if (it.state() == |
930 render_surface->contributes_to_drawn_surface()) { | 927 EffectTreeLayerListIterator::State::CONTRIBUTING_SURFACE) { |
931 render_surface->AppendQuads(target_render_pass, &append_quads_data); | 928 RenderSurfaceImpl* render_surface = it.current_render_surface(); |
932 } else if (it.represents_itself() && !it->visible_layer_rect().IsEmpty()) { | 929 if (render_surface->contributes_to_drawn_surface()) |
| 930 render_surface->AppendQuads(target_render_pass, &append_quads_data); |
| 931 } else if (it.state() == EffectTreeLayerListIterator::State::LAYER && |
| 932 !it.current_layer()->visible_layer_rect().IsEmpty()) { |
| 933 LayerImpl* layer = it.current_layer(); |
933 bool occluded = | 934 bool occluded = |
934 it->draw_properties().occlusion_in_content_space.IsOccluded( | 935 layer->draw_properties().occlusion_in_content_space.IsOccluded( |
935 it->visible_layer_rect()); | 936 layer->visible_layer_rect()); |
936 if (!occluded && it->WillDraw(draw_mode, resource_provider_.get())) { | 937 if (!occluded && layer->WillDraw(draw_mode, resource_provider_.get())) { |
937 DCHECK_EQ(active_tree_.get(), it->layer_tree_impl()); | 938 DCHECK_EQ(active_tree_.get(), layer->layer_tree_impl()); |
938 | 939 |
939 frame->will_draw_layers.push_back(*it); | 940 frame->will_draw_layers.push_back(layer); |
940 if (it->may_contain_video()) | 941 if (layer->may_contain_video()) |
941 frame->may_contain_video = true; | 942 frame->may_contain_video = true; |
942 | 943 |
943 it->AppendQuads(target_render_pass, &append_quads_data); | 944 layer->AppendQuads(target_render_pass, &append_quads_data); |
944 } | 945 } |
945 | 946 |
946 ++layers_drawn; | 947 ++layers_drawn; |
947 } | |
948 | 948 |
949 rendering_stats_instrumentation_->AddVisibleContentArea( | 949 rendering_stats_instrumentation_->AddVisibleContentArea( |
950 append_quads_data.visible_layer_area); | 950 append_quads_data.visible_layer_area); |
951 rendering_stats_instrumentation_->AddApproximatedVisibleContentArea( | 951 rendering_stats_instrumentation_->AddApproximatedVisibleContentArea( |
952 append_quads_data.approximated_visible_content_area); | 952 append_quads_data.approximated_visible_content_area); |
953 rendering_stats_instrumentation_->AddCheckerboardedVisibleContentArea( | 953 rendering_stats_instrumentation_->AddCheckerboardedVisibleContentArea( |
954 append_quads_data.checkerboarded_visible_content_area); | 954 append_quads_data.checkerboarded_visible_content_area); |
955 rendering_stats_instrumentation_->AddCheckerboardedNoRecordingContentArea( | 955 rendering_stats_instrumentation_->AddCheckerboardedNoRecordingContentArea( |
956 append_quads_data.checkerboarded_no_recording_content_area); | 956 append_quads_data.checkerboarded_no_recording_content_area); |
957 rendering_stats_instrumentation_->AddCheckerboardedNeedsRasterContentArea( | 957 rendering_stats_instrumentation_->AddCheckerboardedNeedsRasterContentArea( |
958 append_quads_data.checkerboarded_needs_raster_content_area); | 958 append_quads_data.checkerboarded_needs_raster_content_area); |
959 | 959 |
960 num_missing_tiles += append_quads_data.num_missing_tiles; | 960 num_missing_tiles += append_quads_data.num_missing_tiles; |
961 num_incomplete_tiles += append_quads_data.num_incomplete_tiles; | 961 num_incomplete_tiles += append_quads_data.num_incomplete_tiles; |
962 checkerboarded_no_recording_content_area += | 962 checkerboarded_no_recording_content_area += |
963 append_quads_data.checkerboarded_no_recording_content_area; | 963 append_quads_data.checkerboarded_no_recording_content_area; |
964 checkerboarded_needs_raster_content_area += | 964 checkerboarded_needs_raster_content_area += |
965 append_quads_data.checkerboarded_needs_raster_content_area; | 965 append_quads_data.checkerboarded_needs_raster_content_area; |
966 if (append_quads_data.num_missing_tiles > 0) { | 966 if (append_quads_data.num_missing_tiles > 0) { |
967 have_missing_animated_tiles |= | 967 have_missing_animated_tiles |= |
968 !it->was_ever_ready_since_last_transform_animation() || | 968 !layer->was_ever_ready_since_last_transform_animation() || |
969 it->screen_space_transform_is_animating(); | 969 layer->screen_space_transform_is_animating(); |
970 } else { | 970 } else { |
971 it->set_was_ever_ready_since_last_transform_animation(true); | 971 layer->set_was_ever_ready_since_last_transform_animation(true); |
| 972 } |
972 } | 973 } |
973 } | 974 } |
974 | 975 |
975 // If CommitToActiveTree() is true, then we wait to draw until | 976 // If CommitToActiveTree() is true, then we wait to draw until |
976 // NotifyReadyToDraw. That means we're in as good shape as is possible now, | 977 // NotifyReadyToDraw. That means we're in as good shape as is possible now, |
977 // so there's no reason to stop the draw now (and this is not supported by | 978 // so there's no reason to stop the draw now (and this is not supported by |
978 // SingleThreadProxy). | 979 // SingleThreadProxy). |
979 if (have_missing_animated_tiles && !CommitToActiveTree()) | 980 if (have_missing_animated_tiles && !CommitToActiveTree()) |
980 draw_result = DRAW_ABORTED_CHECKERBOARD_ANIMATIONS; | 981 draw_result = DRAW_ABORTED_CHECKERBOARD_ANIMATIONS; |
981 | 982 |
(...skipping 3289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4271 } | 4272 } |
4272 | 4273 |
4273 void LayerTreeHostImpl::UpdateScrollSourceInfo(bool is_wheel_scroll) { | 4274 void LayerTreeHostImpl::UpdateScrollSourceInfo(bool is_wheel_scroll) { |
4274 if (is_wheel_scroll) | 4275 if (is_wheel_scroll) |
4275 has_scrolled_by_wheel_ = true; | 4276 has_scrolled_by_wheel_ = true; |
4276 else | 4277 else |
4277 has_scrolled_by_touch_ = true; | 4278 has_scrolled_by_touch_ = true; |
4278 } | 4279 } |
4279 | 4280 |
4280 } // namespace cc | 4281 } // namespace cc |
OLD | NEW |