aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorGravatar Mike Klein <mtklein@chromium.org>2017-05-22 08:28:45 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-05-22 14:08:06 +0000
commit1859f69d20e433b86714e5b9002121f2b20a5fc6 (patch)
tree097f171547166eae0e1d7818c7b313a727d113b2 /src/core
parentf94514b0ff8eccb2eaef8c77bee8c5f462b83b90 (diff)
some basic speed ups for SkRasterPipeline::append()
The new bench demos the speedup: SkRasterPipelineReuse_… …full 1x …some 1.8x …none 5.22x Change-Id: I5e51fb4316ae04558710ce62560850584ccb4aea Reviewed-on: https://skia-review.googlesource.com/17449 Reviewed-by: Mike Reed <reed@google.com> Commit-Queue: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'src/core')
-rw-r--r--src/core/SkRasterPipeline.cpp8
-rw-r--r--src/core/SkRasterPipeline.h5
2 files changed, 11 insertions, 2 deletions
diff --git a/src/core/SkRasterPipeline.cpp b/src/core/SkRasterPipeline.cpp
index d307bdd118..ab404446e0 100644
--- a/src/core/SkRasterPipeline.cpp
+++ b/src/core/SkRasterPipeline.cpp
@@ -7,7 +7,13 @@
#include "SkRasterPipeline.h"
-SkRasterPipeline::SkRasterPipeline() {}
+SkRasterPipeline::SkRasterPipeline(int size_hint) {
+ fStages.reserve(size_hint);
+}
+
+void SkRasterPipeline::rewind() {
+ fStages.clear();
+}
void SkRasterPipeline::append(StockStage stage, void* ctx) {
SkASSERT(stage != from_srgb);
diff --git a/src/core/SkRasterPipeline.h b/src/core/SkRasterPipeline.h
index a5f47c2203..3b2d617c69 100644
--- a/src/core/SkRasterPipeline.h
+++ b/src/core/SkRasterPipeline.h
@@ -107,7 +107,7 @@
class SkRasterPipeline {
public:
- SkRasterPipeline();
+ SkRasterPipeline(int size_hint=0);
enum StockStage {
#define M(stage) stage,
@@ -136,6 +136,9 @@ public:
bool empty() const { return fStages.empty(); }
+ // Cheaply reset all state so that empty() returns true.
+ void rewind();
+
private:
std::vector<Stage> fStages;
};