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

Side by Side Diff: cc/quads/render_pass.cc

Issue 448303002: Use custom ListContainer to allocate DrawQuads (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@perftest
Patch Set: change header files to try fix compile error 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
« no previous file with comments | « cc/quads/render_pass.h ('k') | cc/quads/render_pass_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/quads/render_pass.h" 5 #include "cc/quads/render_pass.h"
6 6
7 #include "base/debug/trace_event_argument.h" 7 #include "base/debug/trace_event_argument.h"
8 #include "base/values.h" 8 #include "base/values.h"
9 #include "cc/base/math_util.h" 9 #include "cc/base/math_util.h"
10 #include "cc/debug/traced_value.h" 10 #include "cc/debug/traced_value.h"
11 #include "cc/output/copy_output_request.h" 11 #include "cc/output/copy_output_request.h"
12 #include "cc/quads/checkerboard_draw_quad.h" 12 #include "cc/quads/checkerboard_draw_quad.h"
13 #include "cc/quads/debug_border_draw_quad.h" 13 #include "cc/quads/debug_border_draw_quad.h"
14 #include "cc/quads/draw_quad.h" 14 #include "cc/quads/draw_quad.h"
15 #include "cc/quads/io_surface_draw_quad.h" 15 #include "cc/quads/io_surface_draw_quad.h"
16 #include "cc/quads/largest_draw_quad.h"
16 #include "cc/quads/picture_draw_quad.h" 17 #include "cc/quads/picture_draw_quad.h"
17 #include "cc/quads/render_pass_draw_quad.h" 18 #include "cc/quads/render_pass_draw_quad.h"
18 #include "cc/quads/shared_quad_state.h" 19 #include "cc/quads/shared_quad_state.h"
19 #include "cc/quads/solid_color_draw_quad.h" 20 #include "cc/quads/solid_color_draw_quad.h"
20 #include "cc/quads/stream_video_draw_quad.h" 21 #include "cc/quads/stream_video_draw_quad.h"
21 #include "cc/quads/surface_draw_quad.h" 22 #include "cc/quads/surface_draw_quad.h"
22 #include "cc/quads/texture_draw_quad.h" 23 #include "cc/quads/texture_draw_quad.h"
23 #include "cc/quads/tile_draw_quad.h" 24 #include "cc/quads/tile_draw_quad.h"
24 #include "cc/quads/yuv_video_draw_quad.h" 25 #include "cc/quads/yuv_video_draw_quad.h"
25 26
26 namespace { 27 namespace {
27 const size_t kDefaultNumSharedQuadStatesToReserve = 32; 28 const size_t kDefaultNumSharedQuadStatesToReserve = 32;
28 const size_t kDefaultNumQuadsToReserve = 128; 29 const size_t kDefaultNumQuadsToReserve = 128;
29 } 30 }
30 31
31 namespace cc { 32 namespace cc {
32 33
34 QuadList::QuadList(size_t default_size_to_reserve)
35 : ListContainer<DrawQuad>(sizeof(kLargestDrawQuad),
36 default_size_to_reserve) {
37 }
38
33 scoped_ptr<RenderPass> RenderPass::Create() { 39 scoped_ptr<RenderPass> RenderPass::Create() {
34 return make_scoped_ptr(new RenderPass()); 40 return make_scoped_ptr(new RenderPass());
35 } 41 }
36 42
37 scoped_ptr<RenderPass> RenderPass::Create(size_t num_layers) { 43 scoped_ptr<RenderPass> RenderPass::Create(size_t num_layers) {
38 return make_scoped_ptr(new RenderPass(num_layers)); 44 return make_scoped_ptr(new RenderPass(num_layers));
39 } 45 }
40 46
41 RenderPass::RenderPass() 47 RenderPass::RenderPass()
42 : id(RenderPassId(-1, -1)), has_transparent_background(true) { 48 : id(RenderPassId(-1, -1)),
49 has_transparent_background(true),
50 quad_list(kDefaultNumQuadsToReserve) {
43 shared_quad_state_list.reserve(kDefaultNumSharedQuadStatesToReserve); 51 shared_quad_state_list.reserve(kDefaultNumSharedQuadStatesToReserve);
44 quad_list.reserve(kDefaultNumQuadsToReserve);
45 } 52 }
46 53
47 RenderPass::RenderPass(size_t num_layers) 54 RenderPass::RenderPass(size_t num_layers)
48 : id(RenderPassId(-1, -1)), has_transparent_background(true) { 55 : id(RenderPassId(-1, -1)),
56 has_transparent_background(true),
57 quad_list(kDefaultNumQuadsToReserve) {
49 // Each layer usually produces one shared quad state, so the number of layers 58 // Each layer usually produces one shared quad state, so the number of layers
50 // is a good hint for what to reserve here. 59 // is a good hint for what to reserve here.
51 shared_quad_state_list.reserve(num_layers); 60 shared_quad_state_list.reserve(num_layers);
52 quad_list.reserve(kDefaultNumQuadsToReserve);
53 } 61 }
54 62
55 RenderPass::~RenderPass() { 63 RenderPass::~RenderPass() {
56 TRACE_EVENT_OBJECT_DELETED_WITH_ID( 64 TRACE_EVENT_OBJECT_DELETED_WITH_ID(
57 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"), 65 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"),
58 "cc::RenderPass", id.AsTracingId()); 66 "cc::RenderPass", id.AsTracingId());
59 } 67 }
60 68
61 scoped_ptr<RenderPass> RenderPass::Copy(RenderPassId new_id) const { 69 scoped_ptr<RenderPass> RenderPass::Copy(RenderPassId new_id) const {
62 scoped_ptr<RenderPass> copy_pass(Create()); 70 scoped_ptr<RenderPass> copy_pass(Create());
(...skipping 19 matching lines...) Expand all
82 copy_pass->SetAll(source->id, 90 copy_pass->SetAll(source->id,
83 source->output_rect, 91 source->output_rect,
84 source->damage_rect, 92 source->damage_rect,
85 source->transform_to_root_target, 93 source->transform_to_root_target,
86 source->has_transparent_background); 94 source->has_transparent_background);
87 for (size_t i = 0; i < source->shared_quad_state_list.size(); ++i) { 95 for (size_t i = 0; i < source->shared_quad_state_list.size(); ++i) {
88 SharedQuadState* copy_shared_quad_state = 96 SharedQuadState* copy_shared_quad_state =
89 copy_pass->CreateAndAppendSharedQuadState(); 97 copy_pass->CreateAndAppendSharedQuadState();
90 copy_shared_quad_state->CopyFrom(source->shared_quad_state_list[i]); 98 copy_shared_quad_state->CopyFrom(source->shared_quad_state_list[i]);
91 } 99 }
92 for (size_t i = 0, sqs_i = 0; i < source->quad_list.size(); ++i) { 100 size_t sqs_i = 0;
93 while (source->quad_list[i]->shared_quad_state != 101 for (QuadList::Iterator iter = source->quad_list.begin();
94 source->shared_quad_state_list[sqs_i]) { 102 iter != source->quad_list.end();
103 ++iter) {
104 while (iter->shared_quad_state != source->shared_quad_state_list[sqs_i]) {
95 ++sqs_i; 105 ++sqs_i;
96 DCHECK_LT(sqs_i, source->shared_quad_state_list.size()); 106 DCHECK_LT(sqs_i, source->shared_quad_state_list.size());
97 } 107 }
98 DCHECK(source->quad_list[i]->shared_quad_state == 108 DCHECK(iter->shared_quad_state == source->shared_quad_state_list[sqs_i]);
99 source->shared_quad_state_list[sqs_i]);
100 109
101 DrawQuad* quad = source->quad_list[i]; 110 DrawQuad* quad = &*iter;
102 111
103 if (quad->material == DrawQuad::RENDER_PASS) { 112 if (quad->material == DrawQuad::RENDER_PASS) {
104 const RenderPassDrawQuad* pass_quad = 113 const RenderPassDrawQuad* pass_quad =
105 RenderPassDrawQuad::MaterialCast(quad); 114 RenderPassDrawQuad::MaterialCast(quad);
106 copy_pass->CopyFromAndAppendRenderPassDrawQuad( 115 copy_pass->CopyFromAndAppendRenderPassDrawQuad(
107 pass_quad, 116 pass_quad,
108 copy_pass->shared_quad_state_list[sqs_i], 117 copy_pass->shared_quad_state_list[sqs_i],
109 pass_quad->render_pass_id); 118 pass_quad->render_pass_id);
110 } else { 119 } else {
111 copy_pass->CopyFromAndAppendDrawQuad( 120 copy_pass->CopyFromAndAppendDrawQuad(
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 176
168 value->BeginArray("shared_quad_state_list"); 177 value->BeginArray("shared_quad_state_list");
169 for (size_t i = 0; i < shared_quad_state_list.size(); ++i) { 178 for (size_t i = 0; i < shared_quad_state_list.size(); ++i) {
170 value->BeginDictionary(); 179 value->BeginDictionary();
171 shared_quad_state_list[i]->AsValueInto(value); 180 shared_quad_state_list[i]->AsValueInto(value);
172 value->EndDictionary(); 181 value->EndDictionary();
173 } 182 }
174 value->EndArray(); 183 value->EndArray();
175 184
176 value->BeginArray("quad_list"); 185 value->BeginArray("quad_list");
177 for (size_t i = 0; i < quad_list.size(); ++i) { 186 for (QuadList::ConstIterator iter = quad_list.begin();
187 iter != quad_list.end();
188 ++iter) {
178 value->BeginDictionary(); 189 value->BeginDictionary();
179 quad_list[i]->AsValueInto(value); 190 iter->AsValueInto(value);
180 value->EndDictionary(); 191 value->EndDictionary();
181 } 192 }
182 value->EndArray(); 193 value->EndArray();
183 194
184 TracedValue::MakeDictIntoImplicitSnapshotWithCategory( 195 TracedValue::MakeDictIntoImplicitSnapshotWithCategory(
185 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"), 196 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"),
186 value, 197 value,
187 "cc::RenderPass", 198 "cc::RenderPass",
188 id.AsTracingId()); 199 id.AsTracingId());
189 } 200 }
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 case DrawQuad::RENDER_PASS: 253 case DrawQuad::RENDER_PASS:
243 case DrawQuad::INVALID: 254 case DrawQuad::INVALID:
244 LOG(FATAL) << "Invalid DrawQuad material " << quad->material; 255 LOG(FATAL) << "Invalid DrawQuad material " << quad->material;
245 break; 256 break;
246 } 257 }
247 quad_list.back()->shared_quad_state = shared_quad_state; 258 quad_list.back()->shared_quad_state = shared_quad_state;
248 return quad_list.back(); 259 return quad_list.back();
249 } 260 }
250 261
251 } // namespace cc 262 } // namespace cc
OLDNEW
« no previous file with comments | « cc/quads/render_pass.h ('k') | cc/quads/render_pass_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698