diff options
author | enne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-28 05:39:04 +0000 |
---|---|---|
committer | enne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-28 05:39:04 +0000 |
commit | b27511f9385adf5fa97b24459d7f91d2043b8d5c (patch) | |
tree | b3ae7eec325c316518bda1261818144ab018c657 /cc/quads | |
parent | 3a32c6baf52bb92d5fe8c97af2046e054af0d012 (diff) | |
download | chromium_src-b27511f9385adf5fa97b24459d7f91d2043b8d5c.zip chromium_src-b27511f9385adf5fa97b24459d7f91d2043b8d5c.tar.gz chromium_src-b27511f9385adf5fa97b24459d7f91d2043b8d5c.tar.bz2 |
cc: Reserve list sizes in RenderPass ctor
This prevents needless dmallocs on Android. Originally implemented by tomhudson:
https://codereview.chromium.org/40303003/
R=danakj@chromium.org
BUG=309658
Review URL: https://codereview.chromium.org/86753002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@237686 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/quads')
-rw-r--r-- | cc/quads/render_pass.cc | 25 | ||||
-rw-r--r-- | cc/quads/render_pass.h | 2 |
2 files changed, 25 insertions, 2 deletions
diff --git a/cc/quads/render_pass.cc b/cc/quads/render_pass.cc index 6d6c430..53cb837 100644 --- a/cc/quads/render_pass.cc +++ b/cc/quads/render_pass.cc @@ -12,6 +12,11 @@ #include "cc/quads/render_pass_draw_quad.h" #include "cc/quads/shared_quad_state.h" +namespace { +const size_t kDefaultNumSharedQuadStatesToReserve = 32; +const size_t kDefaultNumQuadsToReserve = 128; +} + namespace cc { void* RenderPass::Id::AsTracingId() const { @@ -21,12 +26,28 @@ void* RenderPass::Id::AsTracingId() const { } scoped_ptr<RenderPass> RenderPass::Create() { - return make_scoped_ptr(new RenderPass); + return make_scoped_ptr(new RenderPass()); +} + +scoped_ptr<RenderPass> RenderPass::Create(size_t num_layers) { + return make_scoped_ptr(new RenderPass(num_layers)); } RenderPass::RenderPass() : id(Id(-1, -1)), - has_transparent_background(true) {} + has_transparent_background(true) { + shared_quad_state_list.reserve(kDefaultNumSharedQuadStatesToReserve); + quad_list.reserve(kDefaultNumQuadsToReserve); +} + +RenderPass::RenderPass(size_t num_layers) + : id(Id(-1, -1)), + has_transparent_background(true) { + // 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.reserve(kDefaultNumQuadsToReserve); +} RenderPass::~RenderPass() { TRACE_EVENT_OBJECT_DELETED_WITH_ID( diff --git a/cc/quads/render_pass.h b/cc/quads/render_pass.h index c6a81af..407381f 100644 --- a/cc/quads/render_pass.h +++ b/cc/quads/render_pass.h @@ -65,6 +65,7 @@ class CC_EXPORT RenderPass { ~RenderPass(); static scoped_ptr<RenderPass> Create(); + static scoped_ptr<RenderPass> Create(size_t num_layers); // A shallow copy of the render pass, which does not include its quads or copy // requests. @@ -111,6 +112,7 @@ class CC_EXPORT RenderPass { SharedQuadStateList shared_quad_state_list; protected: + explicit RenderPass(size_t num_layers); RenderPass(); private: |