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