Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(287)

Side by Side Diff: cc/trees/layer_tree_host_impl.cc

Issue 448303002: Use custom ListContainer to allocate DrawQuads (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@perftest
Patch Set: use at() for cc message unittest Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698