Index: cc/quads/render_pass.cc |
diff --git a/cc/quads/render_pass.cc b/cc/quads/render_pass.cc |
index e487c0963824d58f842e479f29c20711642c682c..ef2f9cda2140ceacd4d5dbbdf420c6e9d5a875a8 100644 |
--- a/cc/quads/render_pass.cc |
+++ b/cc/quads/render_pass.cc |
@@ -44,20 +44,38 @@ 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 ? num_layers : kDefaultNumSharedQuadStatesToReserve) { |
danakj
2014/09/26 20:40:55
can num_layers be 0? Can the ListContainer not han
weiliangc
2014/09/26 21:48:02
num_layer can be 0 in unittests.
Yeah you are rig
|
+} |
+ |
+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,26 +105,34 @@ 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 (SharedQuadStateList::ConstIterator iter = |
+ source->shared_quad_state_list.begin(); |
+ iter != source->shared_quad_state_list.end(); |
+ ++iter) { |
SharedQuadState* copy_shared_quad_state = |
copy_pass->CreateAndAppendSharedQuadState(); |
- copy_shared_quad_state->CopyFrom(source->shared_quad_state_list[i]); |
+ copy_shared_quad_state->CopyFrom(&(*iter)); |
danakj
2014/09/26 20:40:55
you didn't use &(*a) just &*a in other patches, wh
weiliangc
2014/09/26 21:48:02
...I used &*a in ListContainer and its unittest.
|
} |
- size_t sqs_i = 0; |
+ SharedQuadStateList::Iterator sqs_iter = |
+ source->shared_quad_state_list.begin(); |
+ SharedQuadStateList::Iterator copy_sqs_iter = |
+ copy_pass->shared_quad_state_list.begin(); |
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()); |
+ while (iter->shared_quad_state != &(*sqs_iter)) { |
danakj
2014/09/26 20:40:55
&*?
weiliangc
2014/10/01 23:02:00
Done.
|
+ ++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(iter->shared_quad_state == &(*sqs_iter)); |
danakj
2014/09/26 20:40:55
&*?
weiliangc
2014/10/01 23:02:00
Done.
|
DrawQuad* quad = &*iter; |
danakj
2014/09/26 20:40:55
can you put the copy SQS* into a variable here too
weiliangc
2014/10/01 23:02:00
Done.
|
@@ -113,12 +140,9 @@ void RenderPass::CopyAll(const ScopedPtrVector<RenderPass>& in, |
const RenderPassDrawQuad* pass_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_sqs_iter, pass_quad->render_pass_id); |
} else { |
- copy_pass->CopyFromAndAppendDrawQuad( |
- quad, copy_pass->shared_quad_state_list[sqs_i]); |
+ copy_pass->CopyFromAndAppendDrawQuad(quad, &*copy_sqs_iter); |
} |
} |
out->push_back(copy_pass.Pass()); |
@@ -175,9 +199,12 @@ 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 (SharedQuadStateList::ConstIterator iter = |
+ this->shared_quad_state_list.begin(); |
+ iter != this->shared_quad_state_list.end(); |
+ ++iter) { |
value->BeginDictionary(); |
- shared_quad_state_list[i]->AsValueInto(value); |
+ iter->AsValueInto(value); |
value->EndDictionary(); |
} |
value->EndArray(); |
@@ -200,8 +227,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( |