Drive-by optimization of blur_surface()
authorKristian Høgsberg <krh@bitplanet.net>
Sat, 22 Jan 2011 03:19:40 +0000 (22:19 -0500)
committerKristian Høgsberg <krh@bitplanet.net>
Sat, 22 Jan 2011 03:19:40 +0000 (22:19 -0500)
clients/cairo-util.c

index 3aef0af..5aa9857 100644 (file)
@@ -49,9 +49,11 @@ blur_surface(cairo_surface_t *surface, int margin)
        dst = malloc(height * stride);
 
        half = size / 2;
+       a = 0;
        for (i = 0; i < size; i++) {
                f = (i - half);
                kernel[i] = exp(- f * f / ARRAY_LENGTH(kernel)) * 10000;
+               a += kernel[i];
        }
 
        for (i = 0; i < height; i++) {
@@ -67,7 +69,6 @@ blur_surface(cairo_surface_t *surface, int margin)
                        y = 0;
                        z = 0;
                        w = 0;
-                       a = 0;
                        for (k = 0; k < size; k++) {
                                if (j - half + k < 0 || j - half + k >= width)
                                        continue;
@@ -77,7 +78,6 @@ blur_surface(cairo_surface_t *surface, int margin)
                                y += ((p >> 16) & 0xff) * kernel[k];
                                z += ((p >> 8) & 0xff) * kernel[k];
                                w += (p & 0xff) * kernel[k];
-                               a += kernel[k];
                        }
                        d[j] = (x / a << 24) | (y / a << 16) | (z / a << 8) | w / a;
                }
@@ -96,7 +96,6 @@ blur_surface(cairo_surface_t *surface, int margin)
                        y = 0;
                        z = 0;
                        w = 0;
-                       a = 0;
                        for (k = 0; k < size; k++) {
                                if (i - half + k < 0 || i - half + k >= height)
                                        continue;
@@ -107,7 +106,6 @@ blur_surface(cairo_surface_t *surface, int margin)
                                y += ((p >> 16) & 0xff) * kernel[k];
                                z += ((p >> 8) & 0xff) * kernel[k];
                                w += (p & 0xff) * kernel[k];
-                               a += kernel[k];
                        }
                        d[j] = (x / a << 24) | (y / a << 16) | (z / a << 8) | w / a;
                }