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

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: use at() for cc message unittest Created 6 years, 3 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/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/picture_draw_quad.h" 16 #include "cc/quads/picture_draw_quad.h"
17 #include "cc/quads/render_pass_draw_quad.h" 17 #include "cc/quads/render_pass_id.h"
18 #include "cc/quads/shared_quad_state.h" 18 #include "cc/quads/shared_quad_state.h"
19 #include "cc/quads/solid_color_draw_quad.h" 19 #include "cc/quads/solid_color_draw_quad.h"
20 #include "cc/quads/stream_video_draw_quad.h"
21 #include "cc/quads/surface_draw_quad.h" 20 #include "cc/quads/surface_draw_quad.h"
22 #include "cc/quads/texture_draw_quad.h" 21 #include "cc/quads/texture_draw_quad.h"
23 #include "cc/quads/tile_draw_quad.h" 22 #include "cc/quads/tile_draw_quad.h"
24 #include "cc/quads/yuv_video_draw_quad.h" 23 #include "cc/quads/yuv_video_draw_quad.h"
25 24
26 namespace { 25 namespace {
27 const size_t kDefaultNumSharedQuadStatesToReserve = 32; 26 const size_t kDefaultNumSharedQuadStatesToReserve = 32;
28 const size_t kDefaultNumQuadsToReserve = 128; 27 const size_t kDefaultNumQuadsToReserve = 128;
29 } 28 }
30 29
31 namespace cc { 30 namespace cc {
32 31
33 scoped_ptr<RenderPass> RenderPass::Create() { 32 scoped_ptr<RenderPass> RenderPass::Create() {
34 return make_scoped_ptr(new RenderPass()); 33 return make_scoped_ptr(new RenderPass());
35 } 34 }
36 35
37 scoped_ptr<RenderPass> RenderPass::Create(size_t num_layers) { 36 scoped_ptr<RenderPass> RenderPass::Create(size_t num_layers) {
38 return make_scoped_ptr(new RenderPass(num_layers)); 37 return make_scoped_ptr(new RenderPass(num_layers));
39 } 38 }
40 39
41 RenderPass::RenderPass() 40 RenderPass::RenderPass()
42 : id(RenderPassId(-1, -1)), has_transparent_background(true) { 41 : id(RenderPassId(-1, -1)),
42 has_transparent_background(true),
43 quad_list(kDefaultNumQuadsToReserve) {
43 shared_quad_state_list.reserve(kDefaultNumSharedQuadStatesToReserve); 44 shared_quad_state_list.reserve(kDefaultNumSharedQuadStatesToReserve);
44 quad_list.reserve(kDefaultNumQuadsToReserve);
45 } 45 }
46 46
47 RenderPass::RenderPass(size_t num_layers) 47 RenderPass::RenderPass(size_t num_layers)
48 : id(RenderPassId(-1, -1)), has_transparent_background(true) { 48 : id(RenderPassId(-1, -1)),
49 has_transparent_background(true),
50 quad_list(kDefaultNumQuadsToReserve) {
49 // Each layer usually produces one shared quad state, so the number of layers 51 // Each layer usually produces one shared quad state, so the number of layers
50 // is a good hint for what to reserve here. 52 // is a good hint for what to reserve here.
51 shared_quad_state_list.reserve(num_layers); 53 shared_quad_state_list.reserve(num_layers);
52 quad_list.reserve(kDefaultNumQuadsToReserve);
53 } 54 }
54 55
55 RenderPass::~RenderPass() { 56 RenderPass::~RenderPass() {
56 TRACE_EVENT_OBJECT_DELETED_WITH_ID( 57 TRACE_EVENT_OBJECT_DELETED_WITH_ID(
57 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"), 58 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"),
58 "cc::RenderPass", id.AsTracingId()); 59 "cc::RenderPass", id.AsTracingId());
59 } 60 }
60 61
61 scoped_ptr<RenderPass> RenderPass::Copy(RenderPassId new_id) const { 62 scoped_ptr<RenderPass> RenderPass::Copy(RenderPassId new_id) const {
62 scoped_ptr<RenderPass> copy_pass(Create()); 63 scoped_ptr<RenderPass> copy_pass(Create());
(...skipping 19 matching lines...) Expand all
82 copy_pass->SetAll(source->id, 83 copy_pass->SetAll(source->id,
83 source->output_rect, 84 source->output_rect,
84 source->damage_rect, 85 source->damage_rect,
85 source->transform_to_root_target, 86 source->transform_to_root_target,
86 source->has_transparent_background); 87 source->has_transparent_background);
87 for (size_t i = 0; i < source->shared_quad_state_list.size(); ++i) { 88 for (size_t i = 0; i < source->shared_quad_state_list.size(); ++i) {
88 SharedQuadState* copy_shared_quad_state = 89 SharedQuadState* copy_shared_quad_state =
89 copy_pass->CreateAndAppendSharedQuadState(); 90 copy_pass->CreateAndAppendSharedQuadState();
90 copy_shared_quad_state->CopyFrom(source->shared_quad_state_list[i]); 91 copy_shared_quad_state->CopyFrom(source->shared_quad_state_list[i]);
91 } 92 }
92 for (size_t i = 0, sqs_i = 0; i < source->quad_list.size(); ++i) { 93 size_t sqs_i = 0;
93 while (source->quad_list[i]->shared_quad_state != 94 for (QuadList::Iterator iter = source->quad_list.begin();
94 source->shared_quad_state_list[sqs_i]) { 95 iter != source->quad_list.end();
96 ++iter) {
97 while (iter->shared_quad_state != source->shared_quad_state_list[sqs_i]) {
95 ++sqs_i; 98 ++sqs_i;
96 DCHECK_LT(sqs_i, source->shared_quad_state_list.size()); 99 DCHECK_LT(sqs_i, source->shared_quad_state_list.size());
97 } 100 }
98 DCHECK(source->quad_list[i]->shared_quad_state == 101 DCHECK(iter->shared_quad_state == source->shared_quad_state_list[sqs_i]);
99 source->shared_quad_state_list[sqs_i]);
100 102
101 DrawQuad* quad = source->quad_list[i]; 103 DrawQuad* quad = &*iter;
102 104
103 if (quad->material == DrawQuad::RENDER_PASS) { 105 if (quad->material == DrawQuad::RENDER_PASS) {
104 const RenderPassDrawQuad* pass_quad = 106 const RenderPassDrawQuad* pass_quad =
105 RenderPassDrawQuad::MaterialCast(quad); 107 RenderPassDrawQuad::MaterialCast(quad);
106 copy_pass->CopyFromAndAppendRenderPassDrawQuad( 108 copy_pass->CopyFromAndAppendRenderPassDrawQuad(
107 pass_quad, 109 pass_quad,
108 copy_pass->shared_quad_state_list[sqs_i], 110 copy_pass->shared_quad_state_list[sqs_i],
109 pass_quad->render_pass_id); 111 pass_quad->render_pass_id);
110 } else { 112 } else {
111 copy_pass->CopyFromAndAppendDrawQuad( 113 copy_pass->CopyFromAndAppendDrawQuad(
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 169
168 value->BeginArray("shared_quad_state_list"); 170 value->BeginArray("shared_quad_state_list");
169 for (size_t i = 0; i < shared_quad_state_list.size(); ++i) { 171 for (size_t i = 0; i < shared_quad_state_list.size(); ++i) {
170 value->BeginDictionary(); 172 value->BeginDictionary();
171 shared_quad_state_list[i]->AsValueInto(value); 173 shared_quad_state_list[i]->AsValueInto(value);
172 value->EndDictionary(); 174 value->EndDictionary();
173 } 175 }
174 value->EndArray(); 176 value->EndArray();
175 177
176 value->BeginArray("quad_list"); 178 value->BeginArray("quad_list");
177 for (size_t i = 0; i < quad_list.size(); ++i) { 179 for (QuadList::ConstIterator iter = quad_list.begin();
180 iter != quad_list.end();
181 ++iter) {
178 value->BeginDictionary(); 182 value->BeginDictionary();
179 quad_list[i]->AsValueInto(value); 183 iter->AsValueInto(value);
180 value->EndDictionary(); 184 value->EndDictionary();
181 } 185 }
182 value->EndArray(); 186 value->EndArray();
183 187
184 TracedValue::MakeDictIntoImplicitSnapshotWithCategory( 188 TracedValue::MakeDictIntoImplicitSnapshotWithCategory(
185 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"), 189 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"),
186 value, 190 value,
187 "cc::RenderPass", 191 "cc::RenderPass",
188 id.AsTracingId()); 192 id.AsTracingId());
189 } 193 }
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 case DrawQuad::RENDER_PASS: 246 case DrawQuad::RENDER_PASS:
243 case DrawQuad::INVALID: 247 case DrawQuad::INVALID:
244 LOG(FATAL) << "Invalid DrawQuad material " << quad->material; 248 LOG(FATAL) << "Invalid DrawQuad material " << quad->material;
245 break; 249 break;
246 } 250 }
247 quad_list.back()->shared_quad_state = shared_quad_state; 251 quad_list.back()->shared_quad_state = shared_quad_state;
248 return quad_list.back(); 252 return quad_list.back();
249 } 253 }
250 254
251 } // namespace cc 255 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698