add compile, use it in blitter
I expanded an existing bench to show off the difference:
SkRasterPipeline_…
300 …compile 1x …run 1.14x
Change-Id: I5d63d602cda3f78d2d0891fcc85baf5514632900
Reviewed-on: https://skia-review.googlesource.com/17458
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Herb Derby <herb@google.com>
diff --git a/bench/SkRasterPipelineBench.cpp b/bench/SkRasterPipelineBench.cpp
index 2848218..bef80b3 100644
--- a/bench/SkRasterPipelineBench.cpp
+++ b/bench/SkRasterPipelineBench.cpp
@@ -66,11 +66,13 @@
DEF_BENCH( return (new SkRasterPipelineBench< true>); )
DEF_BENCH( return (new SkRasterPipelineBench<false>); )
-class SkRasterPipelineLegacyBench : public Benchmark {
+class SkRasterPipelineCompileVsRunBench : public Benchmark {
public:
+ explicit SkRasterPipelineCompileVsRunBench(bool compile) : fCompile(compile) {}
bool isSuitableFor(Backend backend) override { return backend == kNonRendering_Backend; }
const char* onGetName() override {
- return "SkRasterPipeline_legacy";
+ return fCompile ? "SkRasterPipeline_compile"
+ : "SkRasterPipeline_run";
}
void onDraw(int loops, SkCanvas*) override {
@@ -84,12 +86,24 @@
p.append(SkRasterPipeline::srcover);
p.append(SkRasterPipeline::store_8888, &dst_ctx);
- while (loops --> 0) {
- p.run(0,N);
+ if (fCompile) {
+ char buffer[1024];
+ SkArenaAlloc alloc(buffer);
+ auto fn = p.compile(&alloc);
+ while (loops --> 0) {
+ fn(0,N);
+ }
+ } else {
+ while (loops --> 0) {
+ p.run(0,N);
+ }
}
}
+private:
+ bool fCompile;
};
-DEF_BENCH( return (new SkRasterPipelineLegacyBench); )
+DEF_BENCH( return (new SkRasterPipelineCompileVsRunBench(true )); )
+DEF_BENCH( return (new SkRasterPipelineCompileVsRunBench(false)); )
static SkColorSpaceTransferFn gamma(float g) {
SkColorSpaceTransferFn fn = {0,0,0,0,0,0,0};