Misc cleanup

This is split off of https://codereview.chromium.org/1225923010/ (Start tightening correspondence betweeen GrDrawContext and GrRenderTarget). It:

fixes some style nits
replaces some passing of GrContext with GrTextureProvider & GrDrawContext
does a bit of the finer grained creation of GrDrawContexts

Review URL: https://codereview.chromium.org/1245183002
diff --git a/src/effects/SkGpuBlurUtils.cpp b/src/effects/SkGpuBlurUtils.cpp
index a6aa408..401057b 100644
--- a/src/effects/SkGpuBlurUtils.cpp
+++ b/src/effects/SkGpuBlurUtils.cpp
@@ -198,10 +198,7 @@
         return NULL;
     }
 
-    GrDrawContext* drawContext = context->drawContext();
-    if (!drawContext) {
-        return NULL;
-    }
+    GrDrawContext* srcDrawContext = NULL;
 
     for (int i = 1; i < scaleFactorX || i < scaleFactorY; i *= 2) {
         GrPaint paint;
@@ -228,8 +225,15 @@
         }
         scale_rect(&dstRect, i < scaleFactorX ? 0.5f : 1.0f,
                              i < scaleFactorY ? 0.5f : 1.0f);
-        drawContext->drawNonAARectToRect(dstTexture->asRenderTarget(), clip, paint, SkMatrix::I(),
-                                         dstRect, srcRect);
+
+        GrDrawContext* dstDrawContext = context->drawContext();
+        if (!dstDrawContext) {
+            return NULL;
+        }
+        dstDrawContext->drawNonAARectToRect(dstTexture->asRenderTarget(), clip, paint,
+                                            SkMatrix::I(), dstRect, srcRect);
+
+        srcDrawContext = dstDrawContext;
         srcRect = dstRect;
         srcTexture = dstTexture;
         SkTSwap(dstTexture, tempTexture);
@@ -237,32 +241,54 @@
 
     const SkIRect srcIRect = srcRect.roundOut();
 
-    // For really small blurs(Certainly no wider than 5x5 on desktop gpus) it is faster to just
+    // For really small blurs (certainly no wider than 5x5 on desktop gpus) it is faster to just
     // launch a single non separable kernel vs two launches
-    if (sigmaX > 0.0f && sigmaY > 0 &&
+    if (sigmaX > 0.0f && sigmaY > 0.0f &&
             (2 * radiusX + 1) * (2 * radiusY + 1) <= MAX_KERNEL_SIZE) {
         // We shouldn't be scaling because this is a small size blur
-        SkASSERT((scaleFactorX == scaleFactorY) == 1);
+        SkASSERT((1 == scaleFactorX) && (1 == scaleFactorY));
         SkRect dstRect = SkRect::MakeWH(srcRect.width(), srcRect.height());
-        convolve_gaussian_2d(drawContext, dstTexture->asRenderTarget(), clip, srcRect, dstRect,
+
+        GrDrawContext* dstDrawContext = context->drawContext();
+        if (!dstDrawContext) {
+            return NULL;
+        }
+        convolve_gaussian_2d(dstDrawContext, dstTexture->asRenderTarget(), clip, srcRect, dstRect,
                              srcTexture, radiusX, radiusY, sigmaX, sigmaY, cropToRect, srcIRect);
-        srcTexture = dstTexture;
+
+        srcDrawContext = dstDrawContext;
         srcRect = dstRect;
+        srcTexture = dstTexture;
         SkTSwap(dstTexture, tempTexture);
 
     } else {
         if (sigmaX > 0.0f) {
             if (scaleFactorX > 1) {
+                // TODO: if we pass in the source draw context we don't need this here
+                if (!srcDrawContext) {
+                    srcDrawContext = context->drawContext();
+                    if (!srcDrawContext) {
+                        return NULL;
+                    }        
+                }
+
                 // Clear out a radius to the right of the srcRect to prevent the
                 // X convolution from reading garbage.
                 clearRect = SkIRect::MakeXYWH(srcIRect.fRight, srcIRect.fTop,
                                               radiusX, srcIRect.height());
-                drawContext->clear(srcTexture->asRenderTarget(), &clearRect, 0x0, false);
+                srcDrawContext->clear(srcTexture->asRenderTarget(), &clearRect, 0x0, false);
             }
             SkRect dstRect = SkRect::MakeWH(srcRect.width(), srcRect.height());
-            convolve_gaussian(drawContext, dstTexture->asRenderTarget(), clip, srcRect, dstRect,
+
+            GrDrawContext* dstDrawContext = context->drawContext();
+            if (!dstDrawContext) {
+                return NULL;
+            }
+            convolve_gaussian(dstDrawContext, dstTexture->asRenderTarget(), clip, srcRect, dstRect,
                               srcTexture, Gr1DKernelEffect::kX_Direction, radiusX, sigmaX,
                               cropToRect);
+
+            srcDrawContext = dstDrawContext;
             srcTexture = dstTexture;
             srcRect = dstRect;
             SkTSwap(dstTexture, tempTexture);
@@ -270,17 +296,32 @@
 
         if (sigmaY > 0.0f) {
             if (scaleFactorY > 1 || sigmaX > 0.0f) {
+                // TODO: if we pass in the source draw context we don't need this here
+                if (!srcDrawContext) {
+                    srcDrawContext = context->drawContext();
+                    if (!srcDrawContext) {
+                        return NULL;
+                    }        
+                }
+
                 // Clear out a radius below the srcRect to prevent the Y
                 // convolution from reading garbage.
                 clearRect = SkIRect::MakeXYWH(srcIRect.fLeft, srcIRect.fBottom,
                                               srcIRect.width(), radiusY);
-                drawContext->clear(srcTexture->asRenderTarget(), &clearRect, 0x0, false);
+                srcDrawContext->clear(srcTexture->asRenderTarget(), &clearRect, 0x0, false);
             }
 
             SkRect dstRect = SkRect::MakeWH(srcRect.width(), srcRect.height());
-            convolve_gaussian(drawContext, dstTexture->asRenderTarget(), clip, srcRect,
+
+            GrDrawContext* dstDrawContext = context->drawContext();
+            if (!dstDrawContext) {
+                return NULL;
+            }
+            convolve_gaussian(dstDrawContext, dstTexture->asRenderTarget(), clip, srcRect,
                               dstRect, srcTexture, Gr1DKernelEffect::kY_Direction, radiusY, sigmaY,
                               cropToRect);
+
+            srcDrawContext = dstDrawContext;
             srcTexture = dstTexture;
             srcRect = dstRect;
             SkTSwap(dstTexture, tempTexture);
@@ -288,14 +329,16 @@
     }
 
     if (scaleFactorX > 1 || scaleFactorY > 1) {
+        SkASSERT(srcDrawContext);
+
         // Clear one pixel to the right and below, to accommodate bilinear
         // upsampling.
         clearRect = SkIRect::MakeXYWH(srcIRect.fLeft, srcIRect.fBottom,
                                       srcIRect.width() + 1, 1);
-        drawContext->clear(srcTexture->asRenderTarget(), &clearRect, 0x0, false);
+        srcDrawContext->clear(srcTexture->asRenderTarget(), &clearRect, 0x0, false);
         clearRect = SkIRect::MakeXYWH(srcIRect.fRight, srcIRect.fTop,
                                       1, srcIRect.height());
-        drawContext->clear(srcTexture->asRenderTarget(), &clearRect, 0x0, false);
+        srcDrawContext->clear(srcTexture->asRenderTarget(), &clearRect, 0x0, false);
         SkMatrix matrix;
         matrix.setIDiv(srcTexture->width(), srcTexture->height());
 
@@ -306,12 +349,20 @@
 
         SkRect dstRect(srcRect);
         scale_rect(&dstRect, (float) scaleFactorX, (float) scaleFactorY);
-        drawContext->drawNonAARectToRect(dstTexture->asRenderTarget(), clip, paint,
-                                         SkMatrix::I(), dstRect, srcRect);
+
+        GrDrawContext* dstDrawContext = context->drawContext();
+        if (!dstDrawContext) {
+            return NULL;
+        }
+        dstDrawContext->drawNonAARectToRect(dstTexture->asRenderTarget(), clip, paint,
+                                            SkMatrix::I(), dstRect, srcRect);
+
+        srcDrawContext = dstDrawContext;
         srcRect = dstRect;
         srcTexture = dstTexture;
         SkTSwap(dstTexture, tempTexture);
     }
+
     return SkRef(srcTexture);
 }
 #endif