SkRasterPipeline::compile().

I'm not yet caching these in the blitter, and speed is essentially unchanged in the bench where I am now building and compiling the pipeline only once.  This may not be able to stay a simple std::function after I figure out caching, but for now it's a nice fit.

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=3911

Change-Id: I9545af589f73baf9f17cb4e6ace9a814c2478fe9
Reviewed-on: https://skia-review.googlesource.com/3911
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
diff --git a/bench/SkRasterPipelineBench.cpp b/bench/SkRasterPipelineBench.cpp
index bf71d9a..bfe2110 100644
--- a/bench/SkRasterPipelineBench.cpp
+++ b/bench/SkRasterPipelineBench.cpp
@@ -32,16 +32,18 @@
     }
 
     void onDraw(int loops, SkCanvas*) override {
+        SkRasterPipeline p;
+        p.append(SkRasterPipeline::load_s_srgb, src);
+        p.append(SkRasterPipeline::   scale_u8, mask);
+        p.append(kF16 ? SkRasterPipeline::load_d_f16
+                      : SkRasterPipeline::load_d_srgb, dst);
+        p.append(SkRasterPipeline::    srcover);
+        p.append(kF16 ? SkRasterPipeline::store_f16
+                      : SkRasterPipeline::store_srgb, dst);
+        auto compiled = p.compile();
+
         while (loops --> 0) {
-            SkRasterPipeline p;
-            p.append(SkRasterPipeline::load_s_srgb, src);
-            p.append(SkRasterPipeline::   scale_u8, mask);
-            p.append(kF16 ? SkRasterPipeline::load_d_f16
-                          : SkRasterPipeline::load_d_srgb, dst);
-            p.append(SkRasterPipeline::    srcover);
-            p.append(kF16 ? SkRasterPipeline::store_f16
-                          : SkRasterPipeline::store_srgb, dst);
-            p.run(N);
+            compiled(0, N);
         }
     }
 };