aboutsummaryrefslogtreecommitdiff
path: root/bench/ColorSpaceXformBench.cpp
diff options
context:
space:
mode:
authorMike Klein <mtklein@google.com>2018-08-07 13:21:21 -0400
committerSkia Commit-Bot <skia-commit-bot@chromium.org>2018-08-08 00:27:53 +0000
commitc857956fad09685a4ccb4ef410bce9edcbfc94cb (patch)
tree7453b442e4c14eddae4d6620c93059fd0f1ac70a /bench/ColorSpaceXformBench.cpp
parent30a4e3da4bf341d5968b8cdf5bc2260e7f0d4b04 (diff)
downloadskqp-c857956fad09685a4ccb4ef410bce9edcbfc94cb.tar.gz
transform colors with steps + raster pipeline in SkColorSpaceXformer
I hate SkColorSpaceXform, and we think this is going to be faster, especially for single colors. Add this mode of operation to our bench from yesterday. No surprise, it's exactly as fast as pipeA. This may DO the TODO? Change-Id: I1b42b42d7647d85b62cd8397bb8d6f39c4829bcf Reviewed-on: https://skia-review.googlesource.com/145823 Reviewed-by: Brian Osman <brianosman@google.com> Commit-Queue: Mike Klein <mtklein@google.com>
Diffstat (limited to 'bench/ColorSpaceXformBench.cpp')
-rw-r--r--bench/ColorSpaceXformBench.cpp29
1 files changed, 20 insertions, 9 deletions
diff --git a/bench/ColorSpaceXformBench.cpp b/bench/ColorSpaceXformBench.cpp
index c20bcf3c31..701d7fb9b5 100644
--- a/bench/ColorSpaceXformBench.cpp
+++ b/bench/ColorSpaceXformBench.cpp
@@ -9,13 +9,14 @@
#include "Benchmark.h"
#include "SkColor.h"
#include "SkColorSpaceXform.h"
+#include "SkColorSpaceXformer.h"
#include "SkColorSpaceXformSteps.h"
#include "SkMakeUnique.h"
#include "SkPM4fPriv.h"
#include "SkRandom.h"
#include "SkRasterPipeline.h"
-enum class Mode { xform, steps, pipeA, pipeB };
+enum class Mode { xform, steps, pipeA, pipeB, xformer };
struct ColorSpaceXformBench : public Benchmark {
ColorSpaceXformBench(Mode mode) : fMode(mode) {}
@@ -30,12 +31,15 @@ struct ColorSpaceXformBench : public Benchmark {
fPipeDst = {nullptr,0};
SkSTArenaAlloc<1024> fAlloc;
+ std::unique_ptr<SkColorSpaceXformer> fXformer;
+
const char* onGetName() override {
switch (fMode) {
- case Mode::xform: return "ColorSpaceXformBench_xform";
- case Mode::steps: return "ColorSpaceXformBench_steps";
- case Mode::pipeA: return "ColorSpaceXformBench_pipeA";
- case Mode::pipeB: return "ColorSpaceXformBench_pipeB";
+ case Mode::xform : return "ColorSpaceXformBench_xform";
+ case Mode::steps : return "ColorSpaceXformBench_steps";
+ case Mode::pipeA : return "ColorSpaceXformBench_pipeA";
+ case Mode::pipeB : return "ColorSpaceXformBench_pipeB";
+ case Mode::xformer: return "ColorSpaceXformBench_xformer";
}
return "";
}
@@ -58,6 +62,8 @@ struct ColorSpaceXformBench : public Benchmark {
p.append(SkRasterPipeline::store_bgra, &fPipeDst);
fPipeA = p.compile();
+
+ fXformer = SkColorSpaceXformer::Make(dst); // src is implicitly sRGB, what we want anyway
}
void onDraw(int n, SkCanvas* canvas) override {
@@ -96,6 +102,10 @@ struct ColorSpaceXformBench : public Benchmark {
p.append(SkRasterPipeline::store_bgra, &fPipeDst);
p.run(0,0,1,1);
} break;
+
+ case Mode::xformer: {
+ dst = fXformer->apply(src);
+ } break;
}
if (false && i == 0) {
@@ -107,7 +117,8 @@ struct ColorSpaceXformBench : public Benchmark {
}
};
-DEF_BENCH(return new ColorSpaceXformBench{Mode::xform};)
-DEF_BENCH(return new ColorSpaceXformBench{Mode::steps};)
-DEF_BENCH(return new ColorSpaceXformBench{Mode::pipeA};)
-DEF_BENCH(return new ColorSpaceXformBench{Mode::pipeB};)
+DEF_BENCH(return new ColorSpaceXformBench{Mode::xform };)
+DEF_BENCH(return new ColorSpaceXformBench{Mode::steps };)
+DEF_BENCH(return new ColorSpaceXformBench{Mode::pipeA };)
+DEF_BENCH(return new ColorSpaceXformBench{Mode::pipeB };)
+DEF_BENCH(return new ColorSpaceXformBench{Mode::xformer};)