| 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 |