diff --git a/gm/displacement.cpp b/gm/displacement.cpp
index 342806d..5317a31 100644
--- a/gm/displacement.cpp
+++ b/gm/displacement.cpp
@@ -62,7 +62,7 @@
     virtual SkISize onISize() {
         return make_isize(500, 200);
     }
-    
+
     void drawClippedBitmap(SkCanvas* canvas, int x, int y, const SkPaint& paint) {
         canvas->save();
         canvas->clipRect(SkRect::MakeXYWH(SkIntToScalar(x), SkIntToScalar(y),
diff --git a/src/core/SkBitmapProcShader.h b/src/core/SkBitmapProcShader.h
index e5f7b91..0cff88c 100644
--- a/src/core/SkBitmapProcShader.h
+++ b/src/core/SkBitmapProcShader.h
@@ -28,7 +28,7 @@
     virtual BitmapType asABitmap(SkBitmap*, SkMatrix*, TileMode*) const SK_OVERRIDE;
 
     static bool CanDo(const SkBitmap&, TileMode tx, TileMode ty);
-    
+
     SK_DEVELOPER_TO_STRING()
     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBitmapProcShader)
 
diff --git a/src/core/SkDevice.cpp b/src/core/SkDevice.cpp
index 03e4a38..d7e5f86 100644
--- a/src/core/SkDevice.cpp
+++ b/src/core/SkDevice.cpp
@@ -463,7 +463,7 @@
         return;
     }
 #endif
-    
+
     // construct a shader, so we can call drawRect with the dst
     SkShader* s = SkShader::CreateBitmapShader(*bitmapPtr,
                                                SkShader::kClamp_TileMode,
diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp
index 5ba3e95..b5f33ee 100644
--- a/src/effects/SkDisplacementMapEffect.cpp
+++ b/src/effects/SkDisplacementMapEffect.cpp
@@ -68,7 +68,7 @@
                 SkScalarMul(scaleY, SkIntToScalar(getValue<typeY>(*displPtr, table))-Half8bit);
             const int coordX = x + SkScalarRoundToInt(displX);
             const int coordY = y + SkScalarRoundToInt(displY);
-            *dstPtr = ((coordX < 0) || (coordX >= srcW) || (coordY < 0) || (coordY >= srcH)) ? 
+            *dstPtr = ((coordX < 0) || (coordX >= srcW) || (coordY < 0) || (coordY >= srcH)) ?
                       0 : *(src->getAddr32(coordX, coordY));
         }
     }
@@ -319,7 +319,7 @@
 
     GrPaint paint;
     paint.colorStage(0)->setEffect(
-        SkNEW_ARGS(GrDisplacementMapEffect, (fXChannelSelector, fYChannelSelector, fScale, 
+        SkNEW_ARGS(GrDisplacementMapEffect, (fXChannelSelector, fYChannelSelector, fScale,
                                              displacement.get(), color.get())))->unref();
     context->drawRect(paint, rect);
     return dst;
@@ -355,11 +355,11 @@
     return GrTBackendEffectFactory<GrDisplacementMapEffect>::getInstance();
 }
 
-void GrDisplacementMapEffect::getConstantColorComponents(GrColor* color, 
+void GrDisplacementMapEffect::getConstantColorComponents(GrColor* color,
                                                          uint32_t* validFlags) const {
     // Any displacement offset bringing a pixel out of bounds will output a color of (0,0,0,0),
     // so the only way we'd get a constant alpha is if the input color image has a constant alpha
-    // and no displacement offset push any texture coordinates out of bounds OR if the constant    
+    // and no displacement offset push any texture coordinates out of bounds OR if the constant
     // alpha is 0. Since this isn't trivial to compute at this point, let's assume the output is
     // not of constant color when a displacement effect is applied.
     *validFlags = 0;
@@ -494,9 +494,9 @@
                                GrEffect::MakeDivByTextureWHMatrix(colorTex),
                                stage.getCoordChangeMatrix(),
                                colorTex);
-    
+
     uman.set2f(fScaleUni, SkScalarToFloat(displacementMap.scale()),
-                colorTex->origin() == GrSurface::kTopLeft_Origin ? 
+                colorTex->origin() == GrSurface::kTopLeft_Origin ?
                 SkScalarToFloat(displacementMap.scale()) :
                 SkScalarToFloat(-displacementMap.scale()));
 }
@@ -516,7 +516,7 @@
     EffectKey colorKey = GrGLEffectMatrix::GenKey(GrEffect::MakeDivByTextureWHMatrix(colorTex),
                                                   stage.getCoordChangeMatrix(),
                                                   colorTex);
-    
+
     colorKey <<= GrGLEffectMatrix::kKeyBits;
     EffectKey xKey = displacementMap.xChannelSelector() << (2 * GrGLEffectMatrix::kKeyBits);
     EffectKey yKey = displacementMap.yChannelSelector() << (2 * GrGLEffectMatrix::kKeyBits +
diff --git a/src/effects/SkTransparentShader.cpp b/src/effects/SkTransparentShader.cpp
index 2c7172f..7b92fde 100644
--- a/src/effects/SkTransparentShader.cpp
+++ b/src/effects/SkTransparentShader.cpp
@@ -130,7 +130,7 @@
 #ifdef SK_DEVELOPER
 void SkTransparentShader::toString(SkString* str) const {
     str->append("SkTransparentShader: (");
-    
+
     this->INHERITED::toString(str);
 
     str->append(")");
diff --git a/src/effects/gradients/SkRadialGradient.cpp b/src/effects/gradients/SkRadialGradient.cpp
index c0e7457..a33a9cd 100644
--- a/src/effects/gradients/SkRadialGradient.cpp
+++ b/src/effects/gradients/SkRadialGradient.cpp
@@ -592,7 +592,7 @@
 #ifdef SK_DEVELOPER
 void SkRadialGradient::toString(SkString* str) const {
     str->append("SkRadialGradient: (");
-    
+
     str->append("center: (");
     str->appendScalar(fCenter.fX);
     str->append(", ");
diff --git a/tests/PathTest.cpp b/tests/PathTest.cpp
index 11829d4..0cdc58d 100644
--- a/tests/PathTest.cpp
+++ b/tests/PathTest.cpp
@@ -82,7 +82,7 @@
     SkPath path;
     for (int doReducedCase = 0; doReducedCase <= 1; ++doReducedCase) {
         build_big_path(&path, SkToBool(doReducedCase));
-        
+
         SkPaint paint;
         for (int doAA = 0; doAA <= 1; ++doAA) {
             paint.setAntiAlias(SkToBool(doAA));
