Add special case circle blur for Ganesh

This makes the blurcircles bench go from ~33us to ~8us on Windows desktop.

It will require layout test suppressions

Review URL: https://codereview.chromium.org/1311583005
diff --git a/gm/blurcircles.cpp b/gm/blurcircles.cpp
index e4f956f..74490ce 100644
--- a/gm/blurcircles.cpp
+++ b/gm/blurcircles.cpp
@@ -14,37 +14,43 @@
 
 class BlurCirclesGM : public skiagm::GM {
 public:
-    BlurCirclesGM()
-        : fName("blurcircles") {
-    }
+    BlurCirclesGM() { }
 
 protected:
+    bool runAsBench() const override { return true; }
 
     SkString onShortName() override {
-        return fName;
+        return SkString("blurcircles");
     }
 
     SkISize onISize() override {
         return SkISize::Make(950, 950);
     }
 
+    void onOnceBeforeDraw() override {
+        const float blurRadii[kNumBlurs] = { 1,5,10,20 };
+
+        for (int i = 0; i < kNumBlurs; ++i) {
+            fBlurFilters[i].reset(SkBlurMaskFilter::Create(
+                                    kNormal_SkBlurStyle,
+                                    SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(blurRadii[i])),
+                                    SkBlurMaskFilter::kHighQuality_BlurFlag));
+        }
+    }
+
     void onDraw(SkCanvas* canvas) override {
         canvas->scale(1.5f, 1.5f);
         canvas->translate(50,50);
 
-        const float blurRadii[] = { 1,5,10,20 };
         const int circleRadii[] = { 5,10,25,50 };
-        for (size_t i = 0; i < SK_ARRAY_COUNT(blurRadii); ++i) {
+
+        for (size_t i = 0; i < kNumBlurs; ++i) {
             SkAutoCanvasRestore autoRestore(canvas, true);
             canvas->translate(0, SkIntToScalar(150*i));
             for (size_t j = 0; j < SK_ARRAY_COUNT(circleRadii); ++j) {
-                SkMaskFilter* filter = SkBlurMaskFilter::Create(
-                    kNormal_SkBlurStyle,
-                    SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(blurRadii[i])),
-                    SkBlurMaskFilter::kHighQuality_BlurFlag);
                 SkPaint paint;
                 paint.setColor(SK_ColorBLACK);
-                paint.setMaskFilter(filter)->unref();
+                paint.setMaskFilter(fBlurFilters[i]);
 
                 canvas->drawCircle(SkIntToScalar(50),SkIntToScalar(50),SkIntToScalar(circleRadii[j]),paint);
                 canvas->translate(SkIntToScalar(150), 0);
@@ -52,7 +58,9 @@
         }
     }
 private:
-    const SkString  fName;
+    static const int kNumBlurs = 4;
+
+    SkAutoTUnref<SkMaskFilter> fBlurFilters[kNumBlurs];
 
     typedef         skiagm::GM INHERITED;
 };