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 <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 881 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
892 | 892 |
893 occlusion_tracker.LeaveLayer(it); | 893 occlusion_tracker.LeaveLayer(it); |
894 } | 894 } |
895 | 895 |
896 if (have_copy_request || | 896 if (have_copy_request || |
897 output_surface_->capabilities().draw_and_swap_full_viewport_every_frame) | 897 output_surface_->capabilities().draw_and_swap_full_viewport_every_frame) |
898 draw_result = DRAW_SUCCESS; | 898 draw_result = DRAW_SUCCESS; |
899 | 899 |
900 #if DCHECK_IS_ON | 900 #if DCHECK_IS_ON |
901 for (size_t i = 0; i < frame->render_passes.size(); ++i) { | 901 for (size_t i = 0; i < frame->render_passes.size(); ++i) { |
902 for (size_t j = 0; j < frame->render_passes[i]->quad_list.size(); ++j) | 902 for (QuadList::Iterator iter = frame->render_passes[i]->quad_list.begin(); |
903 DCHECK(frame->render_passes[i]->quad_list[j]->shared_quad_state); | 903 iter != frame->render_passes[i]->quad_list.end(); |
| 904 ++iter) |
| 905 DCHECK(iter->shared_quad_state); |
904 DCHECK(frame->render_passes_by_id.find(frame->render_passes[i]->id) | 906 DCHECK(frame->render_passes_by_id.find(frame->render_passes[i]->id) |
905 != frame->render_passes_by_id.end()); | 907 != frame->render_passes_by_id.end()); |
906 } | 908 } |
907 #endif | 909 #endif |
908 DCHECK(frame->render_passes.back()->output_rect.origin().IsOrigin()); | 910 DCHECK(frame->render_passes.back()->output_rect.origin().IsOrigin()); |
909 | 911 |
910 if (!active_tree_->has_transparent_background()) { | 912 if (!active_tree_->has_transparent_background()) { |
911 frame->render_passes.back()->has_transparent_background = false; | 913 frame->render_passes.back()->has_transparent_background = false; |
912 AppendQuadsToFillScreen( | 914 AppendQuadsToFillScreen( |
913 ResourceIdForUIResource(overhang_ui_resource_id_), | 915 ResourceIdForUIResource(overhang_ui_resource_id_), |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1015 frame->render_passes.erase(to_remove); | 1017 frame->render_passes.erase(to_remove); |
1016 frame->render_passes_by_id.erase(remove_render_pass_id); | 1018 frame->render_passes_by_id.erase(remove_render_pass_id); |
1017 | 1019 |
1018 // Now follow up for all RenderPass quads and remove their RenderPasses | 1020 // Now follow up for all RenderPass quads and remove their RenderPasses |
1019 // recursively. | 1021 // recursively. |
1020 const QuadList& quad_list = removed_pass->quad_list; | 1022 const QuadList& quad_list = removed_pass->quad_list; |
1021 QuadList::ConstBackToFrontIterator quad_list_iterator = | 1023 QuadList::ConstBackToFrontIterator quad_list_iterator = |
1022 quad_list.BackToFrontBegin(); | 1024 quad_list.BackToFrontBegin(); |
1023 for (; quad_list_iterator != quad_list.BackToFrontEnd(); | 1025 for (; quad_list_iterator != quad_list.BackToFrontEnd(); |
1024 ++quad_list_iterator) { | 1026 ++quad_list_iterator) { |
1025 DrawQuad* current_quad = (*quad_list_iterator); | 1027 const DrawQuad* current_quad = &*quad_list_iterator; |
1026 if (current_quad->material != DrawQuad::RENDER_PASS) | 1028 if (current_quad->material != DrawQuad::RENDER_PASS) |
1027 continue; | 1029 continue; |
1028 | 1030 |
1029 RenderPassId next_remove_render_pass_id = | 1031 RenderPassId next_remove_render_pass_id = |
1030 RenderPassDrawQuad::MaterialCast(current_quad)->render_pass_id; | 1032 RenderPassDrawQuad::MaterialCast(current_quad)->render_pass_id; |
1031 RemoveRenderPassesRecursive(next_remove_render_pass_id, frame); | 1033 RemoveRenderPassesRecursive(next_remove_render_pass_id, frame); |
1032 } | 1034 } |
1033 } | 1035 } |
1034 | 1036 |
1035 bool LayerTreeHostImpl::CullRenderPassesWithNoQuads::ShouldRemoveRenderPass( | 1037 bool LayerTreeHostImpl::CullRenderPassesWithNoQuads::ShouldRemoveRenderPass( |
1036 const RenderPassDrawQuad& quad, const FrameData& frame) const { | 1038 const RenderPassDrawQuad& quad, const FrameData& frame) const { |
1037 const RenderPass* render_pass = | 1039 const RenderPass* render_pass = |
1038 FindRenderPassById(quad.render_pass_id, frame); | 1040 FindRenderPassById(quad.render_pass_id, frame); |
1039 if (!render_pass) | 1041 if (!render_pass) |
1040 return false; | 1042 return false; |
1041 | 1043 |
1042 // If any quad or RenderPass draws into this RenderPass, then keep it. | 1044 // If any quad or RenderPass draws into this RenderPass, then keep it. |
1043 const QuadList& quad_list = render_pass->quad_list; | 1045 const QuadList& quad_list = render_pass->quad_list; |
1044 for (QuadList::ConstBackToFrontIterator quad_list_iterator = | 1046 for (QuadList::ConstBackToFrontIterator quad_list_iterator = |
1045 quad_list.BackToFrontBegin(); | 1047 quad_list.BackToFrontBegin(); |
1046 quad_list_iterator != quad_list.BackToFrontEnd(); | 1048 quad_list_iterator != quad_list.BackToFrontEnd(); |
1047 ++quad_list_iterator) { | 1049 ++quad_list_iterator) { |
1048 DrawQuad* current_quad = *quad_list_iterator; | 1050 const DrawQuad* current_quad = &*quad_list_iterator; |
1049 | 1051 |
1050 if (current_quad->material != DrawQuad::RENDER_PASS) | 1052 if (current_quad->material != DrawQuad::RENDER_PASS) |
1051 return false; | 1053 return false; |
1052 | 1054 |
1053 const RenderPass* contributing_pass = FindRenderPassById( | 1055 const RenderPass* contributing_pass = FindRenderPassById( |
1054 RenderPassDrawQuad::MaterialCast(current_quad)->render_pass_id, frame); | 1056 RenderPassDrawQuad::MaterialCast(current_quad)->render_pass_id, frame); |
1055 if (contributing_pass) | 1057 if (contributing_pass) |
1056 return false; | 1058 return false; |
1057 } | 1059 } |
1058 return true; | 1060 return true; |
(...skipping 11 matching lines...) Expand all Loading... |
1070 for (size_t it = culler.RenderPassListBegin(frame->render_passes); | 1072 for (size_t it = culler.RenderPassListBegin(frame->render_passes); |
1071 it != culler.RenderPassListEnd(frame->render_passes); | 1073 it != culler.RenderPassListEnd(frame->render_passes); |
1072 it = culler.RenderPassListNext(it)) { | 1074 it = culler.RenderPassListNext(it)) { |
1073 const RenderPass* current_pass = frame->render_passes[it]; | 1075 const RenderPass* current_pass = frame->render_passes[it]; |
1074 const QuadList& quad_list = current_pass->quad_list; | 1076 const QuadList& quad_list = current_pass->quad_list; |
1075 QuadList::ConstBackToFrontIterator quad_list_iterator = | 1077 QuadList::ConstBackToFrontIterator quad_list_iterator = |
1076 quad_list.BackToFrontBegin(); | 1078 quad_list.BackToFrontBegin(); |
1077 | 1079 |
1078 for (; quad_list_iterator != quad_list.BackToFrontEnd(); | 1080 for (; quad_list_iterator != quad_list.BackToFrontEnd(); |
1079 ++quad_list_iterator) { | 1081 ++quad_list_iterator) { |
1080 DrawQuad* current_quad = *quad_list_iterator; | 1082 const DrawQuad* current_quad = &*quad_list_iterator; |
1081 | 1083 |
1082 if (current_quad->material != DrawQuad::RENDER_PASS) | 1084 if (current_quad->material != DrawQuad::RENDER_PASS) |
1083 continue; | 1085 continue; |
1084 | 1086 |
1085 const RenderPassDrawQuad* render_pass_quad = | 1087 const RenderPassDrawQuad* render_pass_quad = |
1086 RenderPassDrawQuad::MaterialCast(current_quad); | 1088 RenderPassDrawQuad::MaterialCast(current_quad); |
1087 if (!culler.ShouldRemoveRenderPass(*render_pass_quad, *frame)) | 1089 if (!culler.ShouldRemoveRenderPass(*render_pass_quad, *frame)) |
1088 continue; | 1090 continue; |
1089 | 1091 |
1090 // We are changing the vector in the middle of iteration. Because we | 1092 // We are changing the vector in the middle of iteration. Because we |
(...skipping 2287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3378 } | 3380 } |
3379 | 3381 |
3380 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { | 3382 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { |
3381 std::vector<PictureLayerImpl*>::iterator it = | 3383 std::vector<PictureLayerImpl*>::iterator it = |
3382 std::find(picture_layers_.begin(), picture_layers_.end(), layer); | 3384 std::find(picture_layers_.begin(), picture_layers_.end(), layer); |
3383 DCHECK(it != picture_layers_.end()); | 3385 DCHECK(it != picture_layers_.end()); |
3384 picture_layers_.erase(it); | 3386 picture_layers_.erase(it); |
3385 } | 3387 } |
3386 | 3388 |
3387 } // namespace cc | 3389 } // namespace cc |
OLD | NEW |