Fast path for blurred round rects -- blur a small 9patch rect on the CPU
And nonlinearly stretch the resulting texture across proxy geometry.

BUG=

Committed: http://code.google.com/p/skia/source/detail?r=14392

Committed: http://code.google.com/p/skia/source/detail?r=14404

R=bsalomon@google.com, reed@google.com

Author: humper@google.com

Review URL: https://codereview.chromium.org/248613004

git-svn-id: http://skia.googlecode.com/svn/trunk@14420 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/effects/SkBlurMask.h b/src/effects/SkBlurMask.h
index f5c9f1d..39adb96 100644
--- a/src/effects/SkBlurMask.h
+++ b/src/effects/SkBlurMask.h
@@ -23,9 +23,16 @@
                          SkIPoint *margin = NULL,
                          SkMask::CreateMode createMode =
                                                 SkMask::kComputeBoundsAndRenderImage_CreateMode);
+
+    // forceQuality will prevent BoxBlur from falling back to the low quality approach when sigma
+    // is very small -- this can be used predict the margin bump ahead of time without completely
+    // replicating the internal logic.  This permits not only simpler caching of blurred results,
+    // but also being able to predict precisely at what pixels the blurred profile of e.g. a
+    // rectangle will lie.
+
     static bool BoxBlur(SkMask* dst, const SkMask& src,
                         SkScalar sigma, SkBlurStyle style, SkBlurQuality quality,
-                        SkIPoint* margin = NULL);
+                        SkIPoint* margin = NULL, bool force_quality=false);
 
     // the "ground truth" blur does a gaussian convolution; it's slow
     // but useful for comparison purposes.