aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/SkRasterPipelineBench.cpp
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 /bench/SkRasterPipelineBench.cpp
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 'bench/SkRasterPipelineBench.cpp')
-rw-r--r--bench/SkRasterPipelineBench.cpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/bench/SkRasterPipelineBench.cpp b/bench/SkRasterPipelineBench.cpp
index 527482a3c2..2848218977 100644
--- a/bench/SkRasterPipelineBench.cpp
+++ b/bench/SkRasterPipelineBench.cpp
@@ -143,3 +143,60 @@ public:
}
};
DEF_BENCH( return (new SkRasterPipelineToSRGB); )
+
+class SkRasterPipelineReuseBench : public Benchmark {
+public:
+ enum Mode { None, Some, Full };
+
+ explicit SkRasterPipelineReuseBench(Mode mode) : fMode(mode), fName("SkRasterPipelineReuse") {
+ switch(mode) {
+ case None: fName.append("_none"); break;
+ case Some: fName.append("_some"); break;
+ case Full: fName.append("_full"); break;
+ }
+ }
+ const char* onGetName() override { return fName.c_str(); }
+ bool isSuitableFor(Backend backend) override { return backend == kNonRendering_Backend; }
+
+ void onDraw(int loops, SkCanvas*) override {
+ const int kStages = 20;
+ const auto stage = SkRasterPipeline::to_srgb; // Any stage will do. We won't call it.
+
+ switch(fMode) {
+ case None:
+ while (loops --> 0) {
+ SkRasterPipeline p;
+ for (int i = 0; i < kStages; i++) {
+ p.append(stage);
+ }
+ }
+ break;
+
+ case Some:
+ while (loops --> 0) {
+ SkRasterPipeline p(kStages);
+ for (int i = 0; i < kStages; i++) {
+ p.append(stage);
+ }
+ }
+ break;
+
+ case Full:
+ SkRasterPipeline p(kStages);
+ while (loops --> 0) {
+ p.rewind();
+ for (int i = 0; i < kStages; i++) {
+ p.append(stage);
+ }
+ }
+ break;
+ }
+ }
+
+private:
+ Mode fMode;
+ SkString fName;
+};
+DEF_BENCH( return (new SkRasterPipelineReuseBench(SkRasterPipelineReuseBench::None)); )
+DEF_BENCH( return (new SkRasterPipelineReuseBench(SkRasterPipelineReuseBench::Some)); )
+DEF_BENCH( return (new SkRasterPipelineReuseBench(SkRasterPipelineReuseBench::Full)); )