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/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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |