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