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" |
(...skipping 12 matching lines...) Expand all Loading... |
23 #include "cc/quads/tile_draw_quad.h" | 23 #include "cc/quads/tile_draw_quad.h" |
24 #include "cc/quads/yuv_video_draw_quad.h" | 24 #include "cc/quads/yuv_video_draw_quad.h" |
25 | 25 |
26 namespace { | 26 namespace { |
27 const size_t kDefaultNumSharedQuadStatesToReserve = 32; | 27 const size_t kDefaultNumSharedQuadStatesToReserve = 32; |
28 const size_t kDefaultNumQuadsToReserve = 128; | 28 const size_t kDefaultNumQuadsToReserve = 128; |
29 } | 29 } |
30 | 30 |
31 namespace cc { | 31 namespace cc { |
32 | 32 |
33 void* RenderPass::Id::AsTracingId() const { | |
34 COMPILE_ASSERT(sizeof(size_t) <= sizeof(void*), // NOLINT | |
35 size_t_bigger_than_pointer); | |
36 return reinterpret_cast<void*>(base::HashPair(layer_id, index)); | |
37 } | |
38 | |
39 scoped_ptr<RenderPass> RenderPass::Create() { | 33 scoped_ptr<RenderPass> RenderPass::Create() { |
40 return make_scoped_ptr(new RenderPass()); | 34 return make_scoped_ptr(new RenderPass()); |
41 } | 35 } |
42 | 36 |
43 scoped_ptr<RenderPass> RenderPass::Create(size_t num_layers) { | 37 scoped_ptr<RenderPass> RenderPass::Create(size_t num_layers) { |
44 return make_scoped_ptr(new RenderPass(num_layers)); | 38 return make_scoped_ptr(new RenderPass(num_layers)); |
45 } | 39 } |
46 | 40 |
47 RenderPass::RenderPass() : id(Id(-1, -1)), has_transparent_background(true) { | 41 RenderPass::RenderPass() |
| 42 : id(RenderPassId(-1, -1)), has_transparent_background(true) { |
48 shared_quad_state_list.reserve(kDefaultNumSharedQuadStatesToReserve); | 43 shared_quad_state_list.reserve(kDefaultNumSharedQuadStatesToReserve); |
49 quad_list.reserve(kDefaultNumQuadsToReserve); | 44 quad_list.reserve(kDefaultNumQuadsToReserve); |
50 } | 45 } |
51 | 46 |
52 RenderPass::RenderPass(size_t num_layers) | 47 RenderPass::RenderPass(size_t num_layers) |
53 : id(Id(-1, -1)), has_transparent_background(true) { | 48 : id(RenderPassId(-1, -1)), has_transparent_background(true) { |
54 // Each layer usually produces one shared quad state, so the number of layers | 49 // Each layer usually produces one shared quad state, so the number of layers |
55 // is a good hint for what to reserve here. | 50 // is a good hint for what to reserve here. |
56 shared_quad_state_list.reserve(num_layers); | 51 shared_quad_state_list.reserve(num_layers); |
57 quad_list.reserve(kDefaultNumQuadsToReserve); | 52 quad_list.reserve(kDefaultNumQuadsToReserve); |
58 } | 53 } |
59 | 54 |
60 RenderPass::~RenderPass() { | 55 RenderPass::~RenderPass() { |
61 TRACE_EVENT_OBJECT_DELETED_WITH_ID( | 56 TRACE_EVENT_OBJECT_DELETED_WITH_ID( |
62 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"), | 57 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"), |
63 "cc::RenderPass", id.AsTracingId()); | 58 "cc::RenderPass", id.AsTracingId()); |
64 } | 59 } |
65 | 60 |
66 scoped_ptr<RenderPass> RenderPass::Copy(Id new_id) const { | 61 scoped_ptr<RenderPass> RenderPass::Copy(RenderPassId new_id) const { |
67 scoped_ptr<RenderPass> copy_pass(Create()); | 62 scoped_ptr<RenderPass> copy_pass(Create()); |
68 copy_pass->SetAll(new_id, | 63 copy_pass->SetAll(new_id, |
69 output_rect, | 64 output_rect, |
70 damage_rect, | 65 damage_rect, |
71 transform_to_root_target, | 66 transform_to_root_target, |
72 has_transparent_background); | 67 has_transparent_background); |
73 return copy_pass.Pass(); | 68 return copy_pass.Pass(); |
74 } | 69 } |
75 | 70 |
76 // static | 71 // static |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 pass_quad->render_pass_id); | 109 pass_quad->render_pass_id); |
115 } else { | 110 } else { |
116 copy_pass->CopyFromAndAppendDrawQuad( | 111 copy_pass->CopyFromAndAppendDrawQuad( |
117 quad, copy_pass->shared_quad_state_list[sqs_i]); | 112 quad, copy_pass->shared_quad_state_list[sqs_i]); |
118 } | 113 } |
119 } | 114 } |
120 out->push_back(copy_pass.Pass()); | 115 out->push_back(copy_pass.Pass()); |
121 } | 116 } |
122 } | 117 } |
123 | 118 |
124 void RenderPass::SetNew(Id id, | 119 void RenderPass::SetNew(RenderPassId id, |
125 const gfx::Rect& output_rect, | 120 const gfx::Rect& output_rect, |
126 const gfx::Rect& damage_rect, | 121 const gfx::Rect& damage_rect, |
127 const gfx::Transform& transform_to_root_target) { | 122 const gfx::Transform& transform_to_root_target) { |
128 DCHECK_GT(id.layer_id, 0); | 123 DCHECK_GT(id.layer_id, 0); |
129 DCHECK_GE(id.index, 0); | 124 DCHECK_GE(id.index, 0); |
130 DCHECK(damage_rect.IsEmpty() || output_rect.Contains(damage_rect)) | 125 DCHECK(damage_rect.IsEmpty() || output_rect.Contains(damage_rect)) |
131 << "damage_rect: " << damage_rect.ToString() | 126 << "damage_rect: " << damage_rect.ToString() |
132 << " output_rect: " << output_rect.ToString(); | 127 << " output_rect: " << output_rect.ToString(); |
133 | 128 |
134 this->id = id; | 129 this->id = id; |
135 this->output_rect = output_rect; | 130 this->output_rect = output_rect; |
136 this->damage_rect = damage_rect; | 131 this->damage_rect = damage_rect; |
137 this->transform_to_root_target = transform_to_root_target; | 132 this->transform_to_root_target = transform_to_root_target; |
138 | 133 |
139 DCHECK(quad_list.empty()); | 134 DCHECK(quad_list.empty()); |
140 DCHECK(shared_quad_state_list.empty()); | 135 DCHECK(shared_quad_state_list.empty()); |
141 } | 136 } |
142 | 137 |
143 void RenderPass::SetAll(Id id, | 138 void RenderPass::SetAll(RenderPassId id, |
144 const gfx::Rect& output_rect, | 139 const gfx::Rect& output_rect, |
145 const gfx::Rect& damage_rect, | 140 const gfx::Rect& damage_rect, |
146 const gfx::Transform& transform_to_root_target, | 141 const gfx::Transform& transform_to_root_target, |
147 bool has_transparent_background) { | 142 bool has_transparent_background) { |
148 DCHECK_GT(id.layer_id, 0); | 143 DCHECK_GT(id.layer_id, 0); |
149 DCHECK_GE(id.index, 0); | 144 DCHECK_GE(id.index, 0); |
150 | 145 |
151 this->id = id; | 146 this->id = id; |
152 this->output_rect = output_rect; | 147 this->output_rect = output_rect; |
153 this->damage_rect = damage_rect; | 148 this->damage_rect = damage_rect; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 } | 189 } |
195 | 190 |
196 SharedQuadState* RenderPass::CreateAndAppendSharedQuadState() { | 191 SharedQuadState* RenderPass::CreateAndAppendSharedQuadState() { |
197 shared_quad_state_list.push_back(make_scoped_ptr(new SharedQuadState)); | 192 shared_quad_state_list.push_back(make_scoped_ptr(new SharedQuadState)); |
198 return shared_quad_state_list.back(); | 193 return shared_quad_state_list.back(); |
199 } | 194 } |
200 | 195 |
201 RenderPassDrawQuad* RenderPass::CopyFromAndAppendRenderPassDrawQuad( | 196 RenderPassDrawQuad* RenderPass::CopyFromAndAppendRenderPassDrawQuad( |
202 const RenderPassDrawQuad* quad, | 197 const RenderPassDrawQuad* quad, |
203 const SharedQuadState* shared_quad_state, | 198 const SharedQuadState* shared_quad_state, |
204 RenderPass::Id render_pass_id) { | 199 RenderPassId render_pass_id) { |
205 RenderPassDrawQuad* copy_quad = | 200 RenderPassDrawQuad* copy_quad = |
206 CopyFromAndAppendTypedDrawQuad<RenderPassDrawQuad>(quad); | 201 CopyFromAndAppendTypedDrawQuad<RenderPassDrawQuad>(quad); |
207 copy_quad->shared_quad_state = shared_quad_state; | 202 copy_quad->shared_quad_state = shared_quad_state; |
208 copy_quad->render_pass_id = render_pass_id; | 203 copy_quad->render_pass_id = render_pass_id; |
209 return copy_quad; | 204 return copy_quad; |
210 } | 205 } |
211 | 206 |
212 DrawQuad* RenderPass::CopyFromAndAppendDrawQuad( | 207 DrawQuad* RenderPass::CopyFromAndAppendDrawQuad( |
213 const DrawQuad* quad, | 208 const DrawQuad* quad, |
214 const SharedQuadState* shared_quad_state) { | 209 const SharedQuadState* shared_quad_state) { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
247 case DrawQuad::RENDER_PASS: | 242 case DrawQuad::RENDER_PASS: |
248 case DrawQuad::INVALID: | 243 case DrawQuad::INVALID: |
249 LOG(FATAL) << "Invalid DrawQuad material " << quad->material; | 244 LOG(FATAL) << "Invalid DrawQuad material " << quad->material; |
250 break; | 245 break; |
251 } | 246 } |
252 quad_list.back()->shared_quad_state = shared_quad_state; | 247 quad_list.back()->shared_quad_state = shared_quad_state; |
253 return quad_list.back(); | 248 return quad_list.back(); |
254 } | 249 } |
255 | 250 |
256 } // namespace cc | 251 } // namespace cc |
OLD | NEW |