Chromium Code Reviews| Index: cc/quads/render_pass.cc |
| diff --git a/cc/quads/render_pass.cc b/cc/quads/render_pass.cc |
| index e487c0963824d58f842e479f29c20711642c682c..c4a8a0644c801f06ed7390963c5f72ea7f7e7924 100644 |
| --- a/cc/quads/render_pass.cc |
| +++ b/cc/quads/render_pass.cc |
| @@ -4,6 +4,8 @@ |
| #include "cc/quads/render_pass.h" |
| +#include <algorithm> |
| + |
| #include "base/debug/trace_event_argument.h" |
| #include "base/values.h" |
| #include "cc/base/math_util.h" |
| @@ -44,20 +46,36 @@ scoped_ptr<RenderPass> RenderPass::Create(size_t num_layers) { |
| return make_scoped_ptr(new RenderPass(num_layers)); |
| } |
| +scoped_ptr<RenderPass> RenderPass::Create(size_t shared_quad_state_list_size, |
| + size_t quad_list_size) { |
| + return make_scoped_ptr( |
| + new RenderPass(shared_quad_state_list_size, quad_list_size)); |
| +} |
| + |
| RenderPass::RenderPass() |
| : id(RenderPassId(-1, -1)), |
| has_transparent_background(true), |
| - quad_list(kDefaultNumQuadsToReserve) { |
| - shared_quad_state_list.reserve(kDefaultNumSharedQuadStatesToReserve); |
| + quad_list(kDefaultNumQuadsToReserve), |
| + shared_quad_state_list(sizeof(SharedQuadState), |
| + kDefaultNumSharedQuadStatesToReserve) { |
| } |
| +// Each layer usually produces one shared quad state, so the number of layers |
| +// is a good hint for what to reserve here. |
| RenderPass::RenderPass(size_t num_layers) |
| : id(RenderPassId(-1, -1)), |
| has_transparent_background(true), |
| - quad_list(kDefaultNumQuadsToReserve) { |
| - // Each layer usually produces one shared quad state, so the number of layers |
| - // is a good hint for what to reserve here. |
| - shared_quad_state_list.reserve(num_layers); |
| + quad_list(kDefaultNumQuadsToReserve), |
| + shared_quad_state_list(sizeof(SharedQuadState), num_layers) { |
| +} |
| + |
| +RenderPass::RenderPass(size_t shared_quad_state_list_size, |
| + size_t quad_list_size) |
| + : id(RenderPassId(-1, -1)), |
| + has_transparent_background(true), |
| + quad_list(quad_list_size), |
| + shared_quad_state_list(sizeof(SharedQuadState), |
| + shared_quad_state_list_size) { |
| } |
| RenderPass::~RenderPass() { |
| @@ -67,7 +85,8 @@ RenderPass::~RenderPass() { |
| } |
| scoped_ptr<RenderPass> RenderPass::Copy(RenderPassId new_id) const { |
| - scoped_ptr<RenderPass> copy_pass(Create()); |
| + scoped_ptr<RenderPass> copy_pass( |
| + Create(shared_quad_state_list.size(), quad_list.size())); |
| copy_pass->SetAll(new_id, |
| output_rect, |
| damage_rect, |
| @@ -86,39 +105,39 @@ void RenderPass::CopyAll(const ScopedPtrVector<RenderPass>& in, |
| // you may have copy_requests present. |
| DCHECK_EQ(source->copy_requests.size(), 0u); |
| - scoped_ptr<RenderPass> copy_pass(Create()); |
| + scoped_ptr<RenderPass> copy_pass(Create( |
| + source->shared_quad_state_list.size(), source->quad_list.size())); |
| copy_pass->SetAll(source->id, |
| source->output_rect, |
| source->damage_rect, |
| source->transform_to_root_target, |
| source->has_transparent_background); |
| - for (size_t i = 0; i < source->shared_quad_state_list.size(); ++i) { |
| + for (const auto& shared_quad_state : source->shared_quad_state_list) { |
| SharedQuadState* copy_shared_quad_state = |
| copy_pass->CreateAndAppendSharedQuadState(); |
| - copy_shared_quad_state->CopyFrom(source->shared_quad_state_list[i]); |
| + copy_shared_quad_state->CopyFrom(&shared_quad_state); |
| } |
| - size_t sqs_i = 0; |
| - for (QuadList::Iterator iter = source->quad_list.begin(); |
| - iter != source->quad_list.end(); |
| - ++iter) { |
| - while (iter->shared_quad_state != source->shared_quad_state_list[sqs_i]) { |
| - ++sqs_i; |
| - DCHECK_LT(sqs_i, source->shared_quad_state_list.size()); |
| + SharedQuadStateList::Iterator sqs_iter = |
| + source->shared_quad_state_list.begin(); |
| + SharedQuadStateList::Iterator copy_sqs_iter = |
| + copy_pass->shared_quad_state_list.begin(); |
| + for (auto& quad : source->quad_list) { |
|
danakj
2014/10/02 15:32:48
can this be const&?
weiliangc
2014/10/02 22:01:40
Done.
weiliangc
2014/10/02 22:01:40
Done.
|
| + while (quad.shared_quad_state != &*sqs_iter) { |
| + ++sqs_iter; |
| + ++copy_sqs_iter; |
| + DCHECK(sqs_iter != source->shared_quad_state_list.end()); |
| } |
| - DCHECK(iter->shared_quad_state == source->shared_quad_state_list[sqs_i]); |
| + DCHECK(quad.shared_quad_state == &*sqs_iter); |
|
danakj
2014/10/02 15:32:48
drop the sqs_iter and just use ElementAt since it'
weiliangc
2014/10/02 22:01:40
Actually it is used to keep track of the original
|
| - DrawQuad* quad = &*iter; |
| + SharedQuadState* copy_shared_quad_state = &*copy_sqs_iter; |
| - if (quad->material == DrawQuad::RENDER_PASS) { |
| + if (quad.material == DrawQuad::RENDER_PASS) { |
| const RenderPassDrawQuad* pass_quad = |
| - RenderPassDrawQuad::MaterialCast(quad); |
| + RenderPassDrawQuad::MaterialCast(&quad); |
| copy_pass->CopyFromAndAppendRenderPassDrawQuad( |
| - pass_quad, |
| - copy_pass->shared_quad_state_list[sqs_i], |
| - pass_quad->render_pass_id); |
| + pass_quad, copy_shared_quad_state, pass_quad->render_pass_id); |
| } else { |
| - copy_pass->CopyFromAndAppendDrawQuad( |
| - quad, copy_pass->shared_quad_state_list[sqs_i]); |
| + copy_pass->CopyFromAndAppendDrawQuad(&quad, copy_shared_quad_state); |
| } |
| } |
| out->push_back(copy_pass.Pass()); |
| @@ -175,19 +194,17 @@ void RenderPass::AsValueInto(base::debug::TracedValue* value) const { |
| value->SetInteger("copy_requests", copy_requests.size()); |
| value->BeginArray("shared_quad_state_list"); |
| - for (size_t i = 0; i < shared_quad_state_list.size(); ++i) { |
| + for (const auto& shared_quad_state : shared_quad_state_list) { |
| value->BeginDictionary(); |
| - shared_quad_state_list[i]->AsValueInto(value); |
| + shared_quad_state.AsValueInto(value); |
| value->EndDictionary(); |
| } |
| value->EndArray(); |
| value->BeginArray("quad_list"); |
| - for (QuadList::ConstIterator iter = quad_list.begin(); |
| - iter != quad_list.end(); |
| - ++iter) { |
| + for (const auto& quad : quad_list) { |
| value->BeginDictionary(); |
| - iter->AsValueInto(value); |
| + quad.AsValueInto(value); |
| value->EndDictionary(); |
| } |
| value->EndArray(); |
| @@ -200,8 +217,7 @@ void RenderPass::AsValueInto(base::debug::TracedValue* value) const { |
| } |
| SharedQuadState* RenderPass::CreateAndAppendSharedQuadState() { |
| - shared_quad_state_list.push_back(make_scoped_ptr(new SharedQuadState)); |
| - return shared_quad_state_list.back(); |
| + return shared_quad_state_list.AllocateAndConstruct<SharedQuadState>(); |
| } |
| RenderPassDrawQuad* RenderPass::CopyFromAndAppendRenderPassDrawQuad( |