diff --git a/gm/perlinnoise.cpp b/gm/perlinnoise.cpp
index 8ffb7af..ee58f6f 100644
--- a/gm/perlinnoise.cpp
+++ b/gm/perlinnoise.cpp
@@ -88,16 +88,16 @@
     PerlinNoiseGM2() {
         fSize = SkISize::Make(80, 80);
     }
-    
+
 protected:
     virtual SkString onShortName() {
         return SkString("perlinnoise_localmatrix");
     }
-    
+
     virtual SkISize onISize() {
         return SkISize::Make(640, 480);
     }
-    
+
     void install(SkPaint* paint, SkPerlinNoiseShader::Type type,
               float baseFrequencyX, float baseFrequencyY, int numOctaves, float seed,
               bool stitchTiles) {
@@ -108,7 +108,7 @@
                                               seed, stitchTiles ? &fSize : NULL);
         paint->setShader(shader)->unref();
     }
-    
+
     virtual void onDraw(SkCanvas* canvas) {
         canvas->translate(10, 10);
 
@@ -131,7 +131,7 @@
         canvas->scale(2, 2);
         canvas->drawRect(r, paint);
         canvas->restore();
-        
+
         canvas->save();
         canvas->translate(w + 100, h + 10);
         canvas->scale(2, 2);
@@ -153,13 +153,13 @@
         canvas->translate(0, h + 10);
         canvas->drawRect(r, paint);
         canvas->restore();
-        
+
         canvas->save();
         canvas->translate(w + 100, h + 10);
         canvas->drawRect(r, paint);
         canvas->restore();
     }
-    
+
 private:
     typedef GM INHERITED;
     SkISize fSize;
diff --git a/src/core/SkLocalMatrixShader.h b/src/core/SkLocalMatrixShader.h
index 95e6237..1adfb0a 100644
--- a/src/core/SkLocalMatrixShader.h
+++ b/src/core/SkLocalMatrixShader.h
@@ -18,20 +18,20 @@
     : fProxyShader(SkRef(proxy))
     , fProxyLocalMatrix(localMatrix)
     {}
-    
+
     virtual size_t contextSize() const SK_OVERRIDE {
         return fProxyShader->contextSize();
     }
-    
+
     virtual BitmapType asABitmap(SkBitmap* bitmap, SkMatrix* matrix,
                                  TileMode* mode) const SK_OVERRIDE {
         return fProxyShader->asABitmap(bitmap, matrix, mode);
     }
-    
+
     virtual GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE {
         return fProxyShader->asAGradient(info);
     }
-    
+
     virtual GrEffectRef* asNewEffect(GrContext* ctx, const SkPaint& paint,
                                      const SkMatrix* localMatrix) const SK_OVERRIDE {
         SkMatrix tmp = fProxyLocalMatrix;
@@ -40,26 +40,26 @@
         }
         return fProxyShader->asNewEffect(ctx, paint, &tmp);
     }
-    
+
     virtual SkShader* refAsALocalMatrixShader(SkMatrix* localMatrix) const SK_OVERRIDE {
         if (localMatrix) {
             *localMatrix = fProxyLocalMatrix;
         }
         return SkRef(fProxyShader.get());
     }
-    
+
     SK_TO_STRING_OVERRIDE()
     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLocalMatrixShader)
-    
+
 protected:
     SkLocalMatrixShader(SkReadBuffer&);
     virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
     virtual Context* onCreateContext(const ContextRec&, void*) const SK_OVERRIDE;
-    
+
 private:
     SkAutoTUnref<SkShader> fProxyShader;
     SkMatrix  fProxyLocalMatrix;
-    
+
     typedef SkShader INHERITED;
 };
 
diff --git a/src/ports/SkGlobalInitialization_default.cpp b/src/ports/SkGlobalInitialization_default.cpp
index 1a12dee..949decd 100644
--- a/src/ports/SkGlobalInitialization_default.cpp
+++ b/src/ports/SkGlobalInitialization_default.cpp
@@ -119,7 +119,7 @@
     SkLightingImageFilter::InitializeFlattenables();
     SkTableColorFilter::InitializeFlattenables();
     SkXfermode::InitializeFlattenables();
-    
+
 }
 
 void SkFlattenable::InitializeFlattenablesIfNeeded() {
