patch from issue 119343003
compile on 10.6, exclude failing gms

Sorry for making another CL; rebasing ToT on the old one ended up with code in a tangled mess; was easier to start over.

NOTRY=true
R=bsalomon@google.com, epoger@google.com, reed@google.com

Author: humper@google.com

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

git-svn-id: http://skia.googlecode.com/svn/trunk@13238 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/effects/SkBlurMask.h b/src/effects/SkBlurMask.h
index e0b8d54..f95c110 100644
--- a/src/effects/SkBlurMask.h
+++ b/src/effects/SkBlurMask.h
@@ -62,6 +62,41 @@
                                 SkIPoint* margin = NULL);
 
     static SkScalar ConvertRadiusToSigma(SkScalar radius);
+    
+    /* Helper functions for analytic rectangle blurs */
+    
+    /** Look up the intensity of the (one dimnensional) blurred half-plane.
+        @param profile The precomputed 1D blur profile; memory allocated by and managed by
+                       ComputeBlurProfile below.
+        @param loc the location to look up; The lookup will clamp invalid inputs, but 
+                   meaningful data are available between 0 and blurred_width
+        @param blurred_width The width of the final, blurred rectangle
+        @param sharp_width The width of the original, unblurred rectangle.
+    */    
+    static uint8_t ProfileLookup(const uint8_t* profile, int loc, int blurred_width, int sharp_width);
+    
+    /** Allocate memory for and populate the profile of a 1D blurred halfplane.  The caller
+        must free the memory.  The amount of memory allocated will be exactly 6*sigma bytes.
+        @param sigma The standard deviation of the gaussian blur kernel
+        @param profile_out The location to store the allocated profile curve
+    */
+        
+    static void ComputeBlurProfile(SkScalar sigma, uint8_t** profile_out);
+    
+    /** Compute an entire scanline of a blurred step function.  This is a 1D helper that
+        will produce both the horizontal and vertical profiles of the blurry rectangle.
+        @param pixels Location to store the resulting pixel data; allocated and managed by caller
+        @param profile Precomputed blur profile computed by ComputeBlurProfile above.
+        @param width Size of the pixels array.
+        @param sigma Standard deviation of the gaussian blur kernel used to compute the profile;
+                     this implicitly gives the size of the pixels array.
+    */
+        
+    static void ComputeBlurredScanline(uint8_t* pixels, const uint8_t* profile,
+                                       unsigned int width, SkScalar sigma);
+    
+    
+    
 };
 
 #endif