summaryrefslogtreecommitdiffstats
path: root/cc/quads
diff options
context:
space:
mode:
authorenne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-28 05:39:04 +0000
committerenne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-28 05:39:04 +0000
commitb27511f9385adf5fa97b24459d7f91d2043b8d5c (patch)
treeb3ae7eec325c316518bda1261818144ab018c657 /cc/quads
parent3a32c6baf52bb92d5fe8c97af2046e054af0d012 (diff)
downloadchromium_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.cc25
-rw-r--r--cc/quads/render_pass.h2
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: