| 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 |