diff --git a/bench/PremulAndUnpremulAlphaOpsBench.cpp b/bench/PremulAndUnpremulAlphaOpsBench.cpp
index 6ab585e..32f749c 100644
--- a/bench/PremulAndUnpremulAlphaOpsBench.cpp
+++ b/bench/PremulAndUnpremulAlphaOpsBench.cpp
@@ -29,7 +29,7 @@
         return fName.c_str();
     }
 
-    virtual void onPreDraw() {
+    virtual void onPreDraw() SK_OVERRIDE {
         SkImageInfo info = SkImageInfo::Make(W, H, fColorType, kUnpremul_SkAlphaType);
         fBmp1.allocPixels(info);   // used in writePixels
 
diff --git a/bench/RectoriBench.cpp b/bench/RectoriBench.cpp
index 5c11511..ab9bdd5 100644
--- a/bench/RectoriBench.cpp
+++ b/bench/RectoriBench.cpp
@@ -20,7 +20,7 @@
 
 protected:
 
-    virtual const char* onGetName() {
+    virtual const char* onGetName() SK_OVERRIDE {
         return "rectori";
     }
 
diff --git a/bench/RefCntBench.cpp b/bench/RefCntBench.cpp
index f846b1a..d440d99 100644
--- a/bench/RefCntBench.cpp
+++ b/bench/RefCntBench.cpp
@@ -191,11 +191,11 @@
     }
 
 protected:
-    virtual const char* onGetName() {
+    virtual const char* onGetName() SK_OVERRIDE {
         return "ref_cnt_heap_weak";
     }
 
-    virtual void onDraw(const int loops, SkCanvas*) {
+    virtual void onDraw(const int loops, SkCanvas*) SK_OVERRIDE {
         char memory[sizeof(PlacedWeakRefCnt)];
         for (int i = 0; i < loops; ++i) {
             PlacedWeakRefCnt* ref = new (memory) PlacedWeakRefCnt();
@@ -218,11 +218,11 @@
     }
 
 protected:
-    virtual const char* onGetName() {
+    virtual const char* onGetName() SK_OVERRIDE {
         return "ref_cnt_new_weak";
     }
 
-    virtual void onDraw(const int loops, SkCanvas*) {
+    virtual void onDraw(const int loops, SkCanvas*) SK_OVERRIDE {
         for (int i = 0; i < loops; ++i) {
             SkWeakRefCnt* ref = new SkWeakRefCnt();
             for (int j = 0; j < M; ++j) {
diff --git a/bench/RegionContainBench.cpp b/bench/RegionContainBench.cpp
index a47ab33..f6d8142 100644
--- a/bench/RegionContainBench.cpp
+++ b/bench/RegionContainBench.cpp
@@ -50,9 +50,9 @@
     }
 
 protected:
-    virtual const char* onGetName() { return fName.c_str(); }
+    virtual const char* onGetName() SK_OVERRIDE { return fName.c_str(); }
 
-    virtual void onDraw(const int loops, SkCanvas*) {
+    virtual void onDraw(const int loops, SkCanvas*) SK_OVERRIDE {
         Proc proc = fProc;
 
         for (int i = 0; i < loops; ++i) {
diff --git a/bench/ScalarBench.cpp b/bench/ScalarBench.cpp
index e09fa75..9260812 100644
--- a/bench/ScalarBench.cpp
+++ b/bench/ScalarBench.cpp
@@ -31,7 +31,7 @@
         return fName.c_str();
     }
 
-    virtual void onDraw(const int loops, SkCanvas* canvas) {
+    virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE {
         for (int i = 0; i < loops; i++) {
             this->performTest();
         }
@@ -101,7 +101,7 @@
         }
     }
 protected:
-    virtual int mulLoopCount() const { return 1; }
+    virtual int mulLoopCount() const SK_OVERRIDE { return 1; }
     virtual void performTest() SK_OVERRIDE {
         int sum = 0;
         for (size_t i = 0; i < ARRAY_N; ++i) {
diff --git a/gm/aaclip.cpp b/gm/aaclip.cpp
index 6419c8f..e7f7f7a 100644
--- a/gm/aaclip.cpp
+++ b/gm/aaclip.cpp
@@ -101,7 +101,7 @@
         draw_rect_tests(canvas);
     }
 
-    virtual uint32_t onGetFlags() const { return kSkipPipe_Flag; }
+    virtual uint32_t onGetFlags() const SK_OVERRIDE { return kSkipPipe_Flag; }
 
 private:
     typedef skiagm::GM INHERITED;
diff --git a/gm/aarectmodes.cpp b/gm/aarectmodes.cpp
index b2a28c1..041ae19 100644
--- a/gm/aarectmodes.cpp
+++ b/gm/aarectmodes.cpp
@@ -137,13 +137,13 @@
             return kSkipTiled_Flag;
         }
 
-        virtual SkString onShortName() {
+        virtual SkString onShortName() SK_OVERRIDE {
             return SkString("aarectmodes");
         }
 
-        virtual SkISize onISize() { return SkISize::Make(640, 480); }
+        virtual SkISize onISize() SK_OVERRIDE { return SkISize::Make(640, 480); }
 
-        virtual void onDraw(SkCanvas* canvas) {
+        virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
             if (false) { // avoid bit rot, suppress warning
                 test4(canvas);
             }
diff --git a/gm/alphagradients.cpp b/gm/alphagradients.cpp
index d108288..1175911 100644
--- a/gm/alphagradients.cpp
+++ b/gm/alphagradients.cpp
@@ -72,7 +72,7 @@
         }
     }
 
-    virtual uint32_t onGetFlags() const { return kSkipPipe_Flag | kSkipTiled_Flag; }
+    virtual uint32_t onGetFlags() const SK_OVERRIDE { return kSkipPipe_Flag | kSkipTiled_Flag; }
 
 private:
     typedef skiagm::GM INHERITED;
diff --git a/gm/beziers.cpp b/gm/beziers.cpp
index 2371fdd..4fac17b 100755
--- a/gm/beziers.cpp
+++ b/gm/beziers.cpp
@@ -50,15 +50,15 @@
         return kSkipTiled_Flag;
     }
 
-    virtual SkString onShortName() {
+    virtual SkString onShortName() SK_OVERRIDE {
         return SkString("beziers");
     }
 
-    virtual SkISize onISize() {
+    virtual SkISize onISize() SK_OVERRIDE {
         return SkISize::Make(W, H*2);
     }
 
-    virtual void onDraw(SkCanvas* canvas) {
+    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
         SkPaint paint;
         paint.setStyle(SkPaint::kStroke_Style);
         paint.setStrokeWidth(SkIntToScalar(9)/2);
diff --git a/gm/bitmaprecttest.cpp b/gm/bitmaprecttest.cpp
index 6f0ab58..22962cb 100644
--- a/gm/bitmaprecttest.cpp
+++ b/gm/bitmaprecttest.cpp
@@ -56,11 +56,11 @@
     }
 
 protected:
-    virtual SkString onShortName() {
+    virtual SkString onShortName() SK_OVERRIDE {
         return SkString("bitmaprecttest");
     }
 
-    virtual SkISize onISize() {
+    virtual SkISize onISize() SK_OVERRIDE {
         return SkISize::Make(320, 240);
     }
 
diff --git a/gm/bitmapscroll.cpp b/gm/bitmapscroll.cpp
index d38cbbe..dff5226 100644
--- a/gm/bitmapscroll.cpp
+++ b/gm/bitmapscroll.cpp
@@ -59,7 +59,7 @@
     }
 
 protected:
-    virtual SkString onShortName() {
+    virtual SkString onShortName() SK_OVERRIDE {
         return SkString("bitmapscroll");
     }
 
@@ -67,11 +67,11 @@
         return kSkipTiled_Flag;
     }
 
-    virtual SkISize onISize() {
+    virtual SkISize onISize() SK_OVERRIDE {
       return SkISize::Make(800, 600);
     }
 
-    virtual void onDraw(SkCanvas* canvas) {
+    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
         this->init();
         SkIRect scrollCenterRegion = SkIRect::MakeXYWH(
             quarterWidth, quarterHeight, quarterWidth*2+1, quarterHeight*2+1);
diff --git a/gm/blurrect.cpp b/gm/blurrect.cpp
index 49ef856..61e18bd 100644
--- a/gm/blurrect.cpp
+++ b/gm/blurrect.cpp
@@ -101,15 +101,15 @@
         }
     }
 
-    virtual SkString onShortName() {
+    virtual SkString onShortName() SK_OVERRIDE {
         return fName;
     }
 
-    virtual SkISize onISize() {
+    virtual SkISize onISize() SK_OVERRIDE {
         return SkISize::Make(860, 820);
     }
 
-    virtual void onDraw(SkCanvas* canvas) {
+    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
         canvas->translate(STROKE_WIDTH*3/2, STROKE_WIDTH*3/2);
 
         SkRect  r = { 0, 0, 100, 50 };
@@ -147,7 +147,7 @@
         }
     }
 
-    virtual uint32_t onGetFlags() const { return kSkipPipe_Flag | kSkipTiled_Flag; }
+    virtual uint32_t onGetFlags() const SK_OVERRIDE { return kSkipPipe_Flag | kSkipTiled_Flag; }
 
 private:
     void drawProcs(SkCanvas* canvas, const SkRect& r, const SkPaint& paint,
diff --git a/gm/blurs.cpp b/gm/blurs.cpp
index 7418933..dfa95ce 100644
--- a/gm/blurs.cpp
+++ b/gm/blurs.cpp
@@ -20,15 +20,15 @@
         return kSkipTiled_Flag;
     }
 
-    virtual SkString onShortName() {
+    virtual SkString onShortName() SK_OVERRIDE {
         return SkString("blurs");
     }
 
-    virtual SkISize onISize() {
+    virtual SkISize onISize() SK_OVERRIDE {
         return SkISize::Make(700, 500);
     }
 
-    virtual void onDraw(SkCanvas* canvas) {
+    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
         SkBlurStyle NONE = SkBlurStyle(-999);
         static const struct {
             SkBlurStyle fStyle;
diff --git a/gm/circularclips.cpp b/gm/circularclips.cpp
index 4730182..81803a3 100644
--- a/gm/circularclips.cpp
+++ b/gm/circularclips.cpp
@@ -29,15 +29,15 @@
         return kSkipTiled_Flag | kAsBench_Flag;
     }
 
-    virtual SkString onShortName() {
+    virtual SkString onShortName() SK_OVERRIDE {
         return SkString("circular-clips");
     }
 
-    virtual SkISize onISize() {
+    virtual SkISize onISize() SK_OVERRIDE {
         return SkISize::Make(800, 600);
     }
 
-    virtual void onDraw(SkCanvas* canvas) {
+    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
         SkRegion::Op ops[] = {
             SkRegion::kDifference_Op,
             SkRegion::kIntersect_Op,
diff --git a/gm/clip_strokerect.cpp b/gm/clip_strokerect.cpp
index 7072292..da79ed8 100644
--- a/gm/clip_strokerect.cpp
+++ b/gm/clip_strokerect.cpp
@@ -63,7 +63,7 @@
         canvas->drawRect(rect2, p);
     }
 
-    virtual uint32_t onGetFlags() const { return kSkipPipe_Flag; }
+    virtual uint32_t onGetFlags() const SK_OVERRIDE { return kSkipPipe_Flag; }
 
 private:
     typedef skiagm::GM INHERITED;
diff --git a/gm/coloremoji.cpp b/gm/coloremoji.cpp
index cc794f0..51ac923 100644
--- a/gm/coloremoji.cpp
+++ b/gm/coloremoji.cpp
@@ -65,15 +65,15 @@
         fTypeface = SkTypeface::CreateFromStream(stream);
     }
 
-    virtual SkString onShortName() {
+    virtual SkString onShortName() SK_OVERRIDE {
         return SkString("coloremoji");
     }
 
-    virtual SkISize onISize() {
+    virtual SkISize onISize() SK_OVERRIDE {
         return SkISize::Make(650, 480);
     }
 
-    virtual void onDraw(SkCanvas* canvas) {
+    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
 
         canvas->drawColor(SK_ColorGRAY);
 
diff --git a/gm/filltypes.cpp b/gm/filltypes.cpp
index 8859ea1..dbbe4fe 100644
--- a/gm/filltypes.cpp
+++ b/gm/filltypes.cpp
@@ -29,17 +29,16 @@
         return kSkipTiled_Flag;
     }
 
-    virtual SkString onShortName() {
+    virtual SkString onShortName() SK_OVERRIDE {
         return SkString("filltypes");
     }
 
-    virtual SkISize onISize() {
+    virtual SkISize onISize() SK_OVERRIDE {
         return SkISize::Make(835, 840);
     }
 
     void showPath(SkCanvas* canvas, int x, int y, SkPath::FillType ft,
                   SkScalar scale, const SkPaint& paint) {
-
         const SkRect r = { 0, 0, SkIntToScalar(150), SkIntToScalar(150) };
 
         canvas->save();
@@ -65,7 +64,7 @@
                  scale, paint);
     }
 
-    virtual void onDraw(SkCanvas* canvas) {
+    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
         this->makePath();
 
         canvas->translate(SkIntToScalar(20), SkIntToScalar(20));
diff --git a/gm/filltypespersp.cpp b/gm/filltypespersp.cpp
index 21def99..3fff059 100644
--- a/gm/filltypespersp.cpp
+++ b/gm/filltypespersp.cpp
@@ -28,17 +28,16 @@
         return kSkipTiled_Flag;
     }
 
-    virtual SkString onShortName() {
+    virtual SkString onShortName() SK_OVERRIDE {
         return SkString("filltypespersp");
     }
 
-    virtual SkISize onISize() {
+    virtual SkISize onISize() SK_OVERRIDE {
         return SkISize::Make(835, 840);
     }
 
     void showPath(SkCanvas* canvas, int x, int y, SkPath::FillType ft,
                   SkScalar scale, const SkPaint& paint) {
-
         const SkRect r = { 0, 0, SkIntToScalar(150), SkIntToScalar(150) };
 
         canvas->save();
@@ -54,7 +53,6 @@
     }
 
     void showFour(SkCanvas* canvas, SkScalar scale, bool aa) {
-
         SkPaint paint;
         SkPoint center = SkPoint::Make(SkIntToScalar(100), SkIntToScalar(100));
         SkColor colors[] = {SK_ColorBLUE, SK_ColorRED, SK_ColorGREEN};
@@ -78,7 +76,7 @@
                  scale, paint);
     }
 
-    virtual void onDraw(SkCanvas* canvas) {
+    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
         this->makePath();
 
         // do perspective drawPaint as the background;
diff --git a/gm/filterbitmap.cpp b/gm/filterbitmap.cpp
index d40f8bc..b4c5f6a 100644
--- a/gm/filterbitmap.cpp
+++ b/gm/filterbitmap.cpp
@@ -43,7 +43,7 @@
 }
 
 class FilterBitmapGM : public skiagm::GM {
-    void onOnceBeforeDraw() {
+    void onOnceBeforeDraw() SK_OVERRIDE {
 
         this->makeBitmap();
 
diff --git a/gm/filterindiabox.cpp b/gm/filterindiabox.cpp
index 6b662f0..04e2087 100644
--- a/gm/filterindiabox.cpp
+++ b/gm/filterindiabox.cpp
@@ -43,7 +43,7 @@
 }
 
 class FilterIndiaBoxGM : public skiagm::GM {
-    void onOnceBeforeDraw() {
+    void onOnceBeforeDraw() SK_OVERRIDE {
         this->makeBitmap();
 
         SkScalar cx = SkScalarHalf(fBM.width());
diff --git a/gm/fontmgr.cpp b/gm/fontmgr.cpp
index 865090a..a7ff8a8 100644
--- a/gm/fontmgr.cpp
+++ b/gm/fontmgr.cpp
@@ -68,11 +68,11 @@
     }
 
 protected:
-    virtual SkString onShortName() {
+    virtual SkString onShortName() SK_OVERRIDE {
         return fName;
     }
 
-    virtual SkISize onISize() {
+    virtual SkISize onISize() SK_OVERRIDE {
         return SkISize::Make(1536, 768);
     }
 
@@ -140,11 +140,11 @@
     }
 
 protected:
-    virtual SkString onShortName() {
+    virtual SkString onShortName() SK_OVERRIDE {
         return SkString("fontmgr_match");
     }
 
-    virtual SkISize onISize() {
+    virtual SkISize onISize() SK_OVERRIDE {
         return SkISize::Make(640, 1024);
     }
 
@@ -244,7 +244,7 @@
         for (int i = 0; str[i]; ++i) {
             canvas->drawText(&str[i], 1, x, y, paint);
         }
-        
+
         SkRect r = paint.getFontBounds();
         r.offset(x, y);
         SkPaint p(paint);
@@ -253,14 +253,14 @@
     }
 
 protected:
-    virtual SkString onShortName() {
+    virtual SkString onShortName() SK_OVERRIDE {
         return fName;
     }
-    
-    virtual SkISize onISize() {
+
+    virtual SkISize onISize() SK_OVERRIDE {
         return SkISize::Make(1024, 850);
     }
-    
+
     virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
         SkPaint paint;
         paint.setAntiAlias(true);
diff --git a/gm/fontscaler.cpp b/gm/fontscaler.cpp
index eb38013..6fd763c 100644
--- a/gm/fontscaler.cpp
+++ b/gm/fontscaler.cpp
@@ -23,11 +23,11 @@
         return kSkipTiled_Flag;
     }
 
-    virtual SkString onShortName() {
+    virtual SkString onShortName() SK_OVERRIDE {
         return SkString("fontscaler");
     }
 
-    virtual SkISize onISize() {
+    virtual SkISize onISize() SK_OVERRIDE {
         return SkISize::Make(1450, 750);
     }
 
@@ -39,7 +39,7 @@
         canvas->translate(-px, -py);
     }
 
-    virtual void onDraw(SkCanvas* canvas) {
+    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
         SkPaint paint;
 
         paint.setAntiAlias(true);
diff --git a/gm/getpostextpath.cpp b/gm/getpostextpath.cpp
index 4570107..8cad512 100644
--- a/gm/getpostextpath.cpp
+++ b/gm/getpostextpath.cpp
@@ -20,11 +20,11 @@
         return kSkipTiled_Flag;
     }
 
-    SkString onShortName() {
+    SkString onShortName() SK_OVERRIDE {
         return SkString("getpostextpath");
     }
 
-    SkISize onISize() { return SkISize::Make(480, 780); }
+    SkISize onISize() SK_OVERRIDE { return SkISize::Make(480, 780); }
 
     static void strokePath(SkCanvas* canvas, const SkPath& path) {
         SkPaint paint;
@@ -34,7 +34,7 @@
         canvas->drawPath(path, paint);
     }
 
-    virtual void onDraw(SkCanvas* canvas) {
+    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
         // explicitly add spaces, to test a prev. bug
         const char* text = "Ham bur ge fons";
         int len = SkToInt(strlen(text));
diff --git a/gm/giantbitmap.cpp b/gm/giantbitmap.cpp
index de908fe..87aee36 100644
--- a/gm/giantbitmap.cpp
+++ b/gm/giantbitmap.cpp
@@ -82,7 +82,7 @@
 #endif
     }
 
-    virtual SkString onShortName() {
+    virtual SkString onShortName() SK_OVERRIDE {
         SkString str("giantbitmap_");
         switch (fMode) {
             case SkShader::kClamp_TileMode:
@@ -102,9 +102,9 @@
         return str;
     }
 
-    virtual SkISize onISize() { return SkISize::Make(640, 480); }
+    virtual SkISize onISize() SK_OVERRIDE { return SkISize::Make(640, 480); }
 
-    virtual void onDraw(SkCanvas* canvas) {
+    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
         SkPaint paint;
 
         SkMatrix m;
diff --git a/gm/glyph_pos.cpp b/gm/glyph_pos.cpp
index ecb9963..dd814cf 100644
--- a/gm/glyph_pos.cpp
+++ b/gm/glyph_pos.cpp
@@ -48,7 +48,7 @@
         return str;
     }
 
-    virtual SkISize onISize() { return SkISize::Make(800, 600); }
+    virtual SkISize onISize() SK_OVERRIDE { return SkISize::Make(800, 600); }
 
     virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
         if (!fProp) {
diff --git a/gm/glyph_pos_align.cpp b/gm/glyph_pos_align.cpp
index 8877379..3ce3a88 100644
--- a/gm/glyph_pos_align.cpp
+++ b/gm/glyph_pos_align.cpp
@@ -29,7 +29,7 @@
         return SkString("glyph_pos_align");
     }
 
-    virtual SkISize onISize() { return SkISize::Make(kWidth, kHeight); }
+    virtual SkISize onISize() SK_OVERRIDE { return SkISize::Make(kWidth, kHeight); }
 
     virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
         canvas->clear(SK_ColorBLACK);
diff --git a/gm/gradients.cpp b/gm/gradients.cpp
index fd02cee..481b476 100644
--- a/gm/gradients.cpp
+++ b/gm/gradients.cpp
@@ -338,12 +338,12 @@
         return kSkipTiled_Flag;
     }
 
-    SkString onShortName() { return SkString("radial_gradient"); }
-    virtual SkISize onISize() { return SkISize::Make(1280, 1280); }
+    SkString onShortName() SK_OVERRIDE { return SkString("radial_gradient"); }
+    virtual SkISize onISize() SK_OVERRIDE { return SkISize::Make(1280, 1280); }
     void drawBG(SkCanvas* canvas) {
         canvas->drawColor(0xFF000000);
     }
-    virtual void onDraw(SkCanvas* canvas) {
+    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
         const SkISize dim = this->getISize();
 
         this->drawBG(canvas);
@@ -381,14 +381,14 @@
         return kSkipTiled_Flag;
     }
 
-    SkString onShortName() { return SkString("radial_gradient2"); }
-    virtual SkISize onISize() { return SkISize::Make(800, 400); }
+    SkString onShortName() SK_OVERRIDE { return SkString("radial_gradient2"); }
+    virtual SkISize onISize() SK_OVERRIDE { return SkISize::Make(800, 400); }
     void drawBG(SkCanvas* canvas) {
         canvas->drawColor(0xFF000000);
     }
 
     // Reproduces the example given in bug 7671058.
-    virtual void onDraw(SkCanvas* canvas) {
+    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
         SkPaint paint1, paint2, paint3;
         paint1.setStyle(SkPaint::kFill_Style);
         paint2.setStyle(SkPaint::kFill_Style);
diff --git a/gm/gradtext.cpp b/gm/gradtext.cpp
index 47440f6..11dc29c 100644
--- a/gm/gradtext.cpp
+++ b/gm/gradtext.cpp
@@ -102,7 +102,7 @@
     GradTextGM () {}
 
 protected:
-    virtual SkString onShortName() {
+    virtual SkString onShortName() SK_OVERRIDE {
         return SkString("gradtext");
     }
 
diff --git a/gm/hairlines.cpp b/gm/hairlines.cpp
index df67412..9a0b8d5 100644
--- a/gm/hairlines.cpp
+++ b/gm/hairlines.cpp
@@ -22,7 +22,7 @@
         return SkString("hairlines");
     }
 
-    virtual SkISize onISize() { return SkISize::Make(1250, 1250); }
+    virtual SkISize onISize() SK_OVERRIDE { return SkISize::Make(1250, 1250); }
 
     virtual void onOnceBeforeDraw() SK_OVERRIDE {
         {
diff --git a/gm/hittestpath.cpp b/gm/hittestpath.cpp
index caed98f..88772d6 100644
--- a/gm/hittestpath.cpp
+++ b/gm/hittestpath.cpp
@@ -38,13 +38,13 @@
         return kSkipTiled_Flag;
     }
 
-    virtual SkString onShortName() {
+    virtual SkString onShortName() SK_OVERRIDE {
         return SkString("hittestpath");
     }
 
-    virtual SkISize onISize() { return SkISize::Make(700, 460); }
+    virtual SkISize onISize() SK_OVERRIDE { return SkISize::Make(700, 460); }
 
-    virtual void onDraw(SkCanvas* canvas) {
+    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
         SkPath path;
         SkRandom rand;
 
diff --git a/gm/imageblur.cpp b/gm/imageblur.cpp
index 2e85678..67dca07 100644
--- a/gm/imageblur.cpp
+++ b/gm/imageblur.cpp
@@ -27,15 +27,15 @@
         return kSkipTiled_Flag;
     }
 
-    virtual SkString onShortName() {
+    virtual SkString onShortName() SK_OVERRIDE {
         return fName;
     }
 
-    virtual SkISize onISize() {
+    virtual SkISize onISize() SK_OVERRIDE {
         return SkISize::Make(WIDTH, HEIGHT);
     }
 
-    virtual void onDraw(SkCanvas* canvas) {
+    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
         SkPaint paint;
         paint.setImageFilter(SkBlurImageFilter::Create(fSigmaX, fSigmaY))->unref();
         canvas->saveLayer(NULL, &paint);
diff --git a/gm/imagefiltersclipped.cpp b/gm/imagefiltersclipped.cpp
index ae53a2e..74bd2ad 100644
--- a/gm/imagefiltersclipped.cpp
+++ b/gm/imagefiltersclipped.cpp
@@ -35,11 +35,11 @@
         return kSkipTiled_Flag;
     }
 
-    virtual SkString onShortName() {
+    virtual SkString onShortName() SK_OVERRIDE {
         return SkString("imagefiltersclipped");
     }
 
-    virtual SkISize onISize() {
+    virtual SkISize onISize() SK_OVERRIDE {
         return SkISize::Make(860, 500);
     }
 
@@ -83,7 +83,7 @@
         canvas.drawCircle(x, y, radius, paint);
     }
 
-    virtual void onDraw(SkCanvas* canvas) {
+    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
         if (!fInitialized) {
             this->make_checkerboard();
             this->make_gradient_circle(64, 64);
diff --git a/samplecode/SampleRegion.cpp b/samplecode/SampleRegion.cpp
index 54858de..70105d2 100644
--- a/samplecode/SampleRegion.cpp
+++ b/samplecode/SampleRegion.cpp
@@ -219,7 +219,7 @@
 
 protected:
     // overrides from SkEventSink
-    virtual bool onQuery(SkEvent* evt) {
+    virtual bool onQuery(SkEvent* evt) SK_OVERRIDE {
         if (SampleCode::TitleQ(*evt)) {
             SampleCode::TitleR(evt, "Regions");
             return true;
@@ -321,7 +321,7 @@
         canvas->drawPath(path, paint);
     }
 
-    virtual void onDrawContent(SkCanvas* canvas) {
+    virtual void onDrawContent(SkCanvas* canvas) SK_OVERRIDE {
         if (false) { // avoid bit rot, suppress warning
             test_strokerect(canvas);
             return;
@@ -399,7 +399,7 @@
                               SkScalarRoundToInt(y)) ? new Click(this) : NULL;
     }
 
-    virtual bool onClick(Click* click) {
+    virtual bool onClick(Click* click) SK_OVERRIDE {
         fRect.offset(click->fICurr.fX - click->fIPrev.fX,
                      click->fICurr.fY - click->fIPrev.fY);
         this->inval(NULL);
diff --git a/samplecode/SampleRepeatTile.cpp b/samplecode/SampleRepeatTile.cpp
index b352894..fbbc472 100644
--- a/samplecode/SampleRepeatTile.cpp
+++ b/samplecode/SampleRepeatTile.cpp
@@ -49,7 +49,7 @@
 
 protected:
     // overrides from SkEventSink
-    virtual bool onQuery(SkEvent* evt) {
+    virtual bool onQuery(SkEvent* evt) SK_OVERRIDE {
         if (SampleCode::TitleQ(*evt)) {
             SampleCode::TitleR(evt, "RepeatTile");
             return true;
@@ -57,7 +57,7 @@
         return this->INHERITED::onQuery(evt);
     }
 
-    virtual void onDrawContent(SkCanvas* canvas) {
+    virtual void onDrawContent(SkCanvas* canvas) SK_OVERRIDE {
         SkPaint paint;
         make_paint(&paint, SkShader::kRepeat_TileMode);
 
@@ -72,7 +72,7 @@
         return this->INHERITED::onFindClickHandler(x, y, modi);
     }
 
-    virtual bool onClick(Click* click) {
+    virtual bool onClick(Click* click) SK_OVERRIDE {
         return this->INHERITED::onClick(click);
     }
 
diff --git a/samplecode/SampleRotateCircles.cpp b/samplecode/SampleRotateCircles.cpp
index 06350ab..0687b06 100644
--- a/samplecode/SampleRotateCircles.cpp
+++ b/samplecode/SampleRotateCircles.cpp
@@ -128,7 +128,7 @@
         canvas->drawBitmap(bm, 0, 0, NULL);
     }
 
-    virtual void onDrawContent(SkCanvas* canvas) {
+    virtual void onDrawContent(SkCanvas* canvas) SK_OVERRIDE {
         SkScalar radius = 256;
         canvas->translate(10, 10);
 
@@ -244,7 +244,7 @@
         return this->INHERITED::onQuery(evt);
     }
 
-    virtual void onSizeChange() {
+    virtual void onSizeChange() SK_OVERRIDE {
         fErrorControl.setXYWH(this->width() - 100, 30, 30, 400);
         fWidthControl.setXYWH(this->width() -  50, 30, 30, 400);
         fCubicButton.fBounds.setXYWH(this->width() - 50, 450, 30, 30);
@@ -350,7 +350,7 @@
         canvas->drawText(name, strlen(name), bounds.fLeft, bounds.bottom() + 11, paint);
     }
 
-    virtual void onDrawContent(SkCanvas* canvas) {
+    virtual void onDrawContent(SkCanvas* canvas) SK_OVERRIDE {
         SkPath path;
         SkScalar width = fWidth;
 
@@ -450,7 +450,7 @@
         return (SkIntToScalar(y) - control.fTop) / control.height() * (max - min) + min;
     }
 
-    virtual bool onClick(Click* click) {
+    virtual bool onClick(Click* click) SK_OVERRIDE {
         int index = ((MyClick*)click)->fIndex;
         if (index < (int) SK_ARRAY_COUNT(fPts)) {
             fPts[index].offset(SkIntToScalar(click->fICurr.fX - click->fIPrev.fX),
diff --git a/samplecode/SampleShaders.cpp b/samplecode/SampleShaders.cpp
index 253388d..0e70a3e 100644
--- a/samplecode/SampleShaders.cpp
+++ b/samplecode/SampleShaders.cpp
@@ -83,7 +83,7 @@
 
 protected:
     // overrides from SkEventSink
-    virtual bool onQuery(SkEvent* evt) {
+    virtual bool onQuery(SkEvent* evt) SK_OVERRIDE {
         if (SampleCode::TitleQ(*evt)) {
             SampleCode::TitleR(evt, "Shaders");
             return true;
@@ -91,7 +91,7 @@
         return this->INHERITED::onQuery(evt);
     }
 
-    virtual void onDrawContent(SkCanvas* canvas) {
+    virtual void onDrawContent(SkCanvas* canvas) SK_OVERRIDE {
         canvas->drawBitmap(fBitmap, 0, 0);
 
         canvas->translate(SkIntToScalar(20), SkIntToScalar(120));
@@ -127,7 +127,7 @@
         return this->INHERITED::onFindClickHandler(x, y, modi);
     }
 
-    virtual bool onClick(Click* click) {
+    virtual bool onClick(Click* click)  SK_OVERRIDE {
         return this->INHERITED::onClick(click);
     }
 
diff --git a/samplecode/SampleSlides.cpp b/samplecode/SampleSlides.cpp
index 6bc9a28..603714a 100644
--- a/samplecode/SampleSlides.cpp
+++ b/samplecode/SampleSlides.cpp
@@ -697,7 +697,7 @@
 
 protected:
     // overrides from SkEventSink
-    virtual bool onQuery(SkEvent* evt) {
+    virtual bool onQuery(SkEvent* evt) SK_OVERRIDE {
         if (SampleCode::TitleQ(*evt)) {
             SampleCode::TitleR(evt, "Slides");
             return true;
@@ -705,7 +705,7 @@
         return this->INHERITED::onQuery(evt);
     }
 
-    virtual void onDrawContent(SkCanvas* canvas) {
+    virtual void onDrawContent(SkCanvas* canvas) SK_OVERRIDE {
         this->init();
         gProc[fIndex](canvas);
     }
diff --git a/samplecode/SampleStrokePath.cpp b/samplecode/SampleStrokePath.cpp
index 4526512..ab75fb3 100644
--- a/samplecode/SampleStrokePath.cpp
+++ b/samplecode/SampleStrokePath.cpp
@@ -124,7 +124,7 @@
 
 protected:
     // overrides from SkEventSink
-    virtual bool onQuery(SkEvent* evt) {
+    virtual bool onQuery(SkEvent* evt) SK_OVERRIDE {
         if (SampleCode::TitleQ(*evt)) {
             SampleCode::TitleR(evt, "StrokePath");
             return true;
@@ -146,7 +146,7 @@
         }
     }
 
-    virtual void onDrawContent(SkCanvas* canvas) {
+    virtual void onDrawContent(SkCanvas* canvas) SK_OVERRIDE {
         test_huge_stroke(canvas); return;
         canvas->translate(SkIntToScalar(10), SkIntToScalar(10));
 
diff --git a/samplecode/SampleText.cpp b/samplecode/SampleText.cpp
index 7f872a9..82fee4a 100644
--- a/samplecode/SampleText.cpp
+++ b/samplecode/SampleText.cpp
@@ -115,7 +115,7 @@
 
 protected:
     // overrides from SkEventSink
-    virtual bool onQuery(SkEvent* evt) {
+    virtual bool onQuery(SkEvent* evt) SK_OVERRIDE {
         if (SampleCode::TitleQ(*evt)) {
             SampleCode::TitleR(evt, "Text");
             return true;
@@ -143,7 +143,7 @@
             pts[i].set(rand->nextUScalar1() * 640, rand->nextUScalar1() * 480);
     }
 
-    virtual void onDrawContent(SkCanvas* canvas) {
+    virtual void onDrawContent(SkCanvas* canvas) SK_OVERRIDE {
         SkAutoCanvasRestore restore(canvas, false);
         {
             SkRect r;
@@ -192,7 +192,7 @@
         return this->INHERITED::onFindClickHandler(x, y, modi);
     }
 
-    virtual bool onClick(Click* click) {
+    virtual bool onClick(Click* click) SK_OVERRIDE {
         return this->INHERITED::onClick(click);
     }
 
diff --git a/samplecode/SampleTextAlpha.cpp b/samplecode/SampleTextAlpha.cpp
index 3f4e0db..f5c8e9d 100644
--- a/samplecode/SampleTextAlpha.cpp
+++ b/samplecode/SampleTextAlpha.cpp
@@ -36,7 +36,7 @@
 
 protected:
     // overrides from SkEventSink
-    virtual bool onQuery(SkEvent* evt)  {
+    virtual bool onQuery(SkEvent* evt) SK_OVERRIDE {
         if (SampleCode::TitleQ(*evt)) {
             SampleCode::TitleR(evt, "TextAlpha");
             return true;
@@ -44,7 +44,7 @@
         return this->INHERITED::onQuery(evt);
     }
 
-    virtual void onDrawContent(SkCanvas* canvas) {
+    virtual void onDrawContent(SkCanvas* canvas) SK_OVERRIDE {
         const char* str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
         SkPaint paint;
         SkScalar    x = SkIntToScalar(10);
@@ -73,7 +73,7 @@
         return new Click(this);
     }
 
-    virtual bool onClick(Click* click) {
+    virtual bool onClick(Click* click) SK_OVERRIDE {
         int y = click->fICurr.fY;
         if (y < 0) {
             y = 0;
diff --git a/samplecode/SampleTextOnPath.cpp b/samplecode/SampleTextOnPath.cpp
index 6d79e20..2ba387a 100644
--- a/samplecode/SampleTextOnPath.cpp
+++ b/samplecode/SampleTextOnPath.cpp
@@ -105,7 +105,7 @@
 
 protected:
     // overrides from SkEventSink
-    virtual bool onQuery(SkEvent* evt) {
+    virtual bool onQuery(SkEvent* evt) SK_OVERRIDE {
         if (SampleCode::TitleQ(*evt)) {
             SampleCode::TitleR(evt, "Text On Path");
             return true;
@@ -113,7 +113,7 @@
         return this->INHERITED::onQuery(evt);
     }
 
-    virtual void onDrawContent(SkCanvas* canvas) {
+    virtual void onDrawContent(SkCanvas* canvas) SK_OVERRIDE {
         SkPaint paint;
         paint.setAntiAlias(true);
         paint.setTextSize(SkIntToScalar(48));
@@ -157,7 +157,7 @@
         return this->INHERITED::onFindClickHandler(x, y, modi);
     }
 
-    virtual bool onClick(Click* click) {
+    virtual bool onClick(Click* click) SK_OVERRIDE {
         return this->INHERITED::onClick(click);
     }
 
diff --git a/samplecode/SampleVertices.cpp b/samplecode/SampleVertices.cpp
index 1e568f5..748c5a6 100644
--- a/samplecode/SampleVertices.cpp
+++ b/samplecode/SampleVertices.cpp
@@ -77,7 +77,7 @@
 
 protected:
     // overrides from SkEventSink
-    virtual bool onQuery(SkEvent* evt)  {
+    virtual bool onQuery(SkEvent* evt) SK_OVERRIDE {
         if (SampleCode::TitleQ(*evt)) {
             SampleCode::TitleR(evt, "Vertices");
             return true;
@@ -87,7 +87,7 @@
 
     SkScalar fScale;
 
-    virtual void onDrawContent(SkCanvas* canvas) {
+    virtual void onDrawContent(SkCanvas* canvas) SK_OVERRIDE {
         SkPaint paint;
         paint.setDither(true);
         paint.setFilterLevel(SkPaint::kLow_FilterLevel);
@@ -123,7 +123,7 @@
         return new Click(this);
     }
 
-    virtual bool onClick(Click* click) {
+    virtual bool onClick(Click* click) SK_OVERRIDE {
     //    fCurrX = click->fICurr.fX;
     //    fCurrY = click->fICurr.fY;
         this->inval(NULL);
diff --git a/src/animator/SkDisplayMath.h b/src/animator/SkDisplayMath.h
index 9153795..301e0f2 100644
--- a/src/animator/SkDisplayMath.h
+++ b/src/animator/SkDisplayMath.h
@@ -18,9 +18,9 @@
     DECLARE_DISPLAY_MEMBER_INFO(Math);
     virtual void executeFunction(SkDisplayable* , int index,
         SkTDArray<SkScriptValue>& parameters, SkDisplayTypes type,
-        SkScriptValue* );
-    virtual const SkFunctionParamType* getFunctionsParameters();
-    virtual bool getProperty(int index, SkScriptValue* value) const;
+        SkScriptValue* ) SK_OVERRIDE;
+    virtual const SkFunctionParamType* getFunctionsParameters() SK_OVERRIDE;
+    virtual bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
 private:
     mutable SkRandom fRandom;
     static const SkScalar gConstants[];
diff --git a/src/animator/SkDraw3D.h b/src/animator/SkDraw3D.h
index 35066bd..b652d69 100644
--- a/src/animator/SkDraw3D.h
+++ b/src/animator/SkDraw3D.h
@@ -27,7 +27,7 @@
     DECLARE_MEMBER_INFO(3D_Camera);
     Sk3D_Camera();
     virtual ~Sk3D_Camera();
-    virtual bool draw(SkAnimateMaker& );
+    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 private:
     SkScalar hackWidth;
     SkScalar hackHeight;
@@ -40,8 +40,8 @@
 private:
     virtual void executeFunction(SkDisplayable* , int index,
         SkTDArray<SkScriptValue>& parameters, SkDisplayTypes type,
-        SkScriptValue* );
-    virtual const SkFunctionParamType* getFunctionsParameters();
+        SkScriptValue* ) SK_OVERRIDE;
+    virtual const SkFunctionParamType* getFunctionsParameters() SK_OVERRIDE;
     SkPatch3D  fPatch;
     static const SkFunctionParamType fFunctionParameters[];
     friend class Sk3D_Camera;
diff --git a/src/animator/SkDrawClip.h b/src/animator/SkDrawClip.h
index 1261a4d..7b21863 100644
--- a/src/animator/SkDrawClip.h
+++ b/src/animator/SkDrawClip.h
@@ -20,7 +20,7 @@
 class SkDrawClip : public SkADrawable {
     DECLARE_DRAW_MEMBER_INFO(Clip);
     SkDrawClip();
-    virtual bool draw(SkAnimateMaker& );
+    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 private:
     SkDrawRect* rect;
     SkDrawPath* path;
diff --git a/src/animator/SkDrawDash.h b/src/animator/SkDrawDash.h
index fafc4b0..b4f086a 100644
--- a/src/animator/SkDrawDash.h
+++ b/src/animator/SkDrawDash.h
@@ -15,7 +15,7 @@
     DECLARE_MEMBER_INFO(Dash);
     SkDash();
     virtual ~SkDash();
-    virtual SkPathEffect* getPathEffect();
+    virtual SkPathEffect* getPathEffect() SK_OVERRIDE;
 private:
     SkTDScalarArray intervals;
     SkScalar phase;
diff --git a/src/animator/SkDrawDiscrete.h b/src/animator/SkDrawDiscrete.h
index d0f9239..7e11506 100644
--- a/src/animator/SkDrawDiscrete.h
+++ b/src/animator/SkDrawDiscrete.h
@@ -13,7 +13,7 @@
 class SkDiscrete : public SkDrawPathEffect {
     DECLARE_MEMBER_INFO(Discrete);
     SkDiscrete();
-    virtual SkPathEffect* getPathEffect();
+    virtual SkPathEffect* getPathEffect() SK_OVERRIDE;
 private:
     SkScalar deviation;
     SkScalar segLength;
diff --git a/src/animator/SkDrawExtraPathEffect.cpp b/src/animator/SkDrawExtraPathEffect.cpp
index 19b9df9..cc097d0 100644
--- a/src/animator/SkDrawExtraPathEffect.cpp
+++ b/src/animator/SkDrawExtraPathEffect.cpp
@@ -21,7 +21,7 @@
     SkDrawShapePathEffect();
     virtual ~SkDrawShapePathEffect();
     virtual bool addChild(SkAnimateMaker& , SkDisplayable* ) SK_OVERRIDE;
-    virtual SkPathEffect* getPathEffect();
+    virtual SkPathEffect* getPathEffect() SK_OVERRIDE;
 protected:
     SkADrawable* addPath;
     SkADrawable* addMatrix;
@@ -35,7 +35,7 @@
     DECLARE_EXTRAS_MEMBER_INFO(SkDrawShape1DPathEffect);
     SkDrawShape1DPathEffect(SkDisplayTypes );
     virtual ~SkDrawShape1DPathEffect();
-    virtual void onEndElement(SkAnimateMaker& );
+    virtual void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
 private:
     SkString phase;
     SkString spacing;
@@ -47,7 +47,7 @@
     DECLARE_EXTRAS_MEMBER_INFO(SkDrawShape2DPathEffect);
     SkDrawShape2DPathEffect(SkDisplayTypes );
     virtual ~SkDrawShape2DPathEffect();
-    virtual void onEndElement(SkAnimateMaker& );
+    virtual void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
 private:
     SkDrawMatrix* matrix;
     friend class SkShape2DPathEffect;
@@ -59,8 +59,8 @@
     SkDrawComposePathEffect(SkDisplayTypes );
     virtual ~SkDrawComposePathEffect();
     virtual bool addChild(SkAnimateMaker& , SkDisplayable* ) SK_OVERRIDE;
-    virtual SkPathEffect* getPathEffect();
-    virtual bool isPaint() const;
+    virtual SkPathEffect* getPathEffect() SK_OVERRIDE;
+    virtual bool isPaint() const SK_OVERRIDE;
 private:
     SkDrawPathEffect* effect1;
     SkDrawPathEffect* effect2;
@@ -70,7 +70,7 @@
     DECLARE_EXTRAS_MEMBER_INFO(SkDrawCornerPathEffect);
     SkDrawCornerPathEffect(SkDisplayTypes );
     virtual ~SkDrawCornerPathEffect();
-    virtual SkPathEffect* getPathEffect();
+    virtual SkPathEffect* getPathEffect() SK_OVERRIDE;
 private:
     SkScalar radius;
 };
@@ -92,7 +92,7 @@
     SK_DECLARE_UNFLATTENABLE_OBJECT()
 
 protected:
-    virtual SkScalar begin(SkScalar contourLength) const {
+    virtual SkScalar begin(SkScalar contourLength) const SK_OVERRIDE {
         SkScriptValue value;
         SkAnimatorScript engine(*fMaker, NULL, SkType_Float);
         engine.propertyCallBack(GetContourLength, &contourLength);
@@ -101,7 +101,7 @@
         return value.fOperand.fScalar;
     }
 
-    virtual SkScalar next(SkPath* dst, SkScalar distance, SkPathMeasure&) const {
+    virtual SkScalar next(SkPath* dst, SkScalar distance, SkPathMeasure&) const SK_OVERRIDE {
         fMaker->setExtraPropertyCallBack(fDraw->fType, GetDistance, &distance);
         SkDrawPath* drawPath = NULL;
         if (fDraw->addPath->isPath()) {
diff --git a/src/animator/SkDrawFull.h b/src/animator/SkDrawFull.h
index a2dcf49..13c204e 100644
--- a/src/animator/SkDrawFull.h
+++ b/src/animator/SkDrawFull.h
@@ -14,7 +14,7 @@
 
 class SkFull : public SkBoundable {
     DECLARE_EMPTY_MEMBER_INFO(Full);
-    virtual bool draw(SkAnimateMaker& );
+    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 private:
     typedef SkBoundable INHERITED;
 };
diff --git a/src/animator/SkDrawGradient.h b/src/animator/SkDrawGradient.h
index e461d44..545179b 100644
--- a/src/animator/SkDrawGradient.h
+++ b/src/animator/SkDrawGradient.h
@@ -22,7 +22,7 @@
 #ifdef SK_DUMP_ENABLED
     virtual void dumpRest(SkAnimateMaker*);
 #endif
-    virtual void onEndElement(SkAnimateMaker& );
+    virtual void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
 protected:
     SkTDScalarArray offsets;
     SkString unitMapper;
@@ -53,7 +53,7 @@
 #ifdef SK_DUMP_ENABLED
     virtual void dump(SkAnimateMaker*) SK_OVERRIDE;
 #endif
-    virtual SkShader* getShader();
+    virtual SkShader* getShader() SK_OVERRIDE;
 protected:
     SkPoint center;
     SkScalar radius;
diff --git a/src/animator/SkDrawLine.h b/src/animator/SkDrawLine.h
index b287802..5665433 100644
--- a/src/animator/SkDrawLine.h
+++ b/src/animator/SkDrawLine.h
@@ -16,7 +16,7 @@
 class SkLine : public SkBoundable {
     DECLARE_MEMBER_INFO(Line);
     SkLine();
-    virtual bool draw(SkAnimateMaker& );
+    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 private:
     SkScalar x1;
     SkScalar x2;
diff --git a/src/animator/SkDrawPaint.h b/src/animator/SkDrawPaint.h
index b2b5dd6..5ac5a93 100644
--- a/src/animator/SkDrawPaint.h
+++ b/src/animator/SkDrawPaint.h
@@ -27,17 +27,17 @@
     SkDrawPaint();
     virtual ~SkDrawPaint();
     virtual bool add(SkAnimateMaker* , SkDisplayable* child);
-    virtual SkDisplayable* deepCopy(SkAnimateMaker* );
-    virtual bool draw(SkAnimateMaker& );
+    virtual SkDisplayable* deepCopy(SkAnimateMaker* ) SK_OVERRIDE;
+    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* );
+    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
     virtual void executeFunction(SkDisplayable* target, int index,
         SkTDArray<SkScriptValue>& parameters, SkDisplayTypes type,
-        SkScriptValue* );
-    virtual const SkFunctionParamType* getFunctionsParameters();
-    virtual bool getProperty(int index, SkScriptValue* value) const;
-    virtual bool resolveIDs(SkAnimateMaker& maker, SkDisplayable* original, SkApply* apply);
+        SkScriptValue* ) SK_OVERRIDE;
+    virtual const SkFunctionParamType* getFunctionsParameters() SK_OVERRIDE;
+    virtual bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
+    virtual bool resolveIDs(SkAnimateMaker& maker, SkDisplayable* original, SkApply* apply) SK_OVERRIDE;
 protected:
     static const SkFunctionParamType fFunctionParameters[];
     void setupPaint(SkPaint* paint) const;
diff --git a/src/animator/SkDrawPath.h b/src/animator/SkDrawPath.h
index 9c4d305..cce8cd5 100644
--- a/src/animator/SkDrawPath.h
+++ b/src/animator/SkDrawPath.h
@@ -21,20 +21,20 @@
     virtual ~SkDrawPath();
     virtual bool addChild(SkAnimateMaker& , SkDisplayable* child) SK_OVERRIDE;
     bool childHasID() { return SkToBool(fChildHasID); }
-    virtual bool childrenNeedDisposing() const;
-    virtual void dirty();
-    virtual bool draw(SkAnimateMaker& );
-    virtual SkDisplayable* getParent() const;
+    virtual bool childrenNeedDisposing() const SK_OVERRIDE;
+    virtual void dirty() SK_OVERRIDE;
+    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
+    virtual SkDisplayable* getParent() const SK_OVERRIDE;
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* );
+    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
     SkPath& getPath();
-    virtual bool getProperty(int index, SkScriptValue* value) const;
-    virtual bool setProperty(int index, SkScriptValue& value);
-    virtual void onEndElement(SkAnimateMaker& );
-    virtual void setChildHasID();
-    virtual bool setParent(SkDisplayable* parent);
-    virtual bool isPath() const { return true; }
+    virtual bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
+    virtual bool setProperty(int index, SkScriptValue& value) SK_OVERRIDE;
+    virtual void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
+    virtual void setChildHasID() SK_OVERRIDE;
+    virtual bool setParent(SkDisplayable* parent) SK_OVERRIDE;
+    virtual bool isPath() const SK_OVERRIDE { return true; }
 public:
     SkPath fPath;
 protected:
@@ -52,7 +52,7 @@
 class SkPolyline : public SkDrawPath {
     DECLARE_MEMBER_INFO(Polyline);
     virtual bool addChild(SkAnimateMaker& , SkDisplayable*) SK_OVERRIDE;
-    virtual void onEndElement(SkAnimateMaker& );
+    virtual void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
 protected:
     SkTDScalarArray points;
 private:
@@ -61,7 +61,7 @@
 
 class SkPolygon : public SkPolyline {
     DECLARE_MEMBER_INFO(Polygon);
-    virtual void onEndElement(SkAnimateMaker& );
+    virtual void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
 private:
     typedef SkPolyline INHERITED;
 };
diff --git a/src/animator/SkDrawPoint.h b/src/animator/SkDrawPoint.h
index 0ecf447..69005a1 100644
--- a/src/animator/SkDrawPoint.h
+++ b/src/animator/SkDrawPoint.h
@@ -24,7 +24,7 @@
 class SkDrawPoint : public SkDisplayable {
     DECLARE_MEMBER_INFO(DrawPoint);
     SkDrawPoint();
-    virtual void getBounds(SkRect*  );
+    virtual void getBounds(SkRect* ) SK_OVERRIDE;
 private:
     SkPoint fPoint;
     typedef SkDisplayable INHERITED;
diff --git a/src/animator/SkDrawSaveLayer.h b/src/animator/SkDrawSaveLayer.h
index 5c3e068..50a5a37 100644
--- a/src/animator/SkDrawSaveLayer.h
+++ b/src/animator/SkDrawSaveLayer.h
@@ -20,11 +20,11 @@
     DECLARE_MEMBER_INFO(SaveLayer);
     SkSaveLayer();
     virtual ~SkSaveLayer();
-    virtual bool draw(SkAnimateMaker& );
+    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* );
+    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
-    virtual void onEndElement(SkAnimateMaker& );
+    virtual void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
 protected:
     SkDrawPaint* paint;
     SkDrawRect* bounds;
diff --git a/src/animator/SkDrawShader.h b/src/animator/SkDrawShader.h
index 2c46e07..43462de 100644
--- a/src/animator/SkDrawShader.h
+++ b/src/animator/SkDrawShader.h
@@ -16,8 +16,8 @@
 class SkDrawBitmapShader : public SkDrawShader {
     DECLARE_DRAW_MEMBER_INFO(BitmapShader);
     SkDrawBitmapShader();
-    virtual bool add();
-    virtual SkShader* getShader();
+    virtual bool add() SK_OVERRIDE;
+    virtual SkShader* getShader() SK_OVERRIDE;
 protected:
     SkBool filterBitmap;
     SkBaseBitmap* image;
diff --git a/src/animator/SkDrawText.h b/src/animator/SkDrawText.h
index 3ac2479..d0fb3be 100644
--- a/src/animator/SkDrawText.h
+++ b/src/animator/SkDrawText.h
@@ -17,11 +17,11 @@
     DECLARE_MEMBER_INFO(Text);
     SkText();
     virtual ~SkText();
-    virtual bool draw(SkAnimateMaker& );
+    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* );
+    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
-    virtual bool getProperty(int index, SkScriptValue* value) const ;
+    virtual bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
     const char* getText() { return text.c_str(); }
     size_t getSize() { return text.size(); }
 protected:
diff --git a/src/animator/SkDrawTextBox.h b/src/animator/SkDrawTextBox.h
index 6155bef..4fa0872 100644
--- a/src/animator/SkDrawTextBox.h
+++ b/src/animator/SkDrawTextBox.h
@@ -18,12 +18,12 @@
     SkDrawTextBox();
 
     // overrides
-    virtual bool draw(SkAnimateMaker& );
+    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* );
+    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
-    virtual bool getProperty(int index, SkScriptValue* value) const;
-    virtual bool setProperty(int index, SkScriptValue& );
+    virtual bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
+    virtual bool setProperty(int index, SkScriptValue& ) SK_OVERRIDE;
 
 private:
     SkString fText;
diff --git a/src/animator/SkDrawTo.h b/src/animator/SkDrawTo.h
index b6365af..93f9b49 100644
--- a/src/animator/SkDrawTo.h
+++ b/src/animator/SkDrawTo.h
@@ -19,9 +19,9 @@
     DECLARE_MEMBER_INFO(DrawTo);
     SkDrawTo();
 //  virtual ~SkDrawTo();
-    virtual bool draw(SkAnimateMaker& );
+    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* );
+    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
 protected:
     SkBool drawOnce;
diff --git a/src/animator/SkDrawTransparentShader.h b/src/animator/SkDrawTransparentShader.h
index e0f61ed..58dc123 100644
--- a/src/animator/SkDrawTransparentShader.h
+++ b/src/animator/SkDrawTransparentShader.h
@@ -12,7 +12,7 @@
 
 class SkDrawTransparentShader : public SkDrawShader {
     DECLARE_EMPTY_MEMBER_INFO(TransparentShader);
-    virtual SkShader* getShader();
+    virtual SkShader* getShader() SK_OVERRIDE;
 };
 
 #endif // SkDrawTransparentShader_DEFINED
diff --git a/src/animator/SkHitClear.h b/src/animator/SkHitClear.h
index 9c40209..02b0140 100644
--- a/src/animator/SkHitClear.h
+++ b/src/animator/SkHitClear.h
@@ -16,8 +16,8 @@
 
 class SkHitClear : public SkDisplayable {
     DECLARE_MEMBER_INFO(HitClear);
-    virtual bool enable(SkAnimateMaker& );
-    virtual bool hasEnable() const;
+    virtual bool enable(SkAnimateMaker& ) SK_OVERRIDE;
+    virtual bool hasEnable() const SK_OVERRIDE;
 private:
     SkTDDisplayableArray targets;
 };
diff --git a/src/animator/SkHitTest.h b/src/animator/SkHitTest.h
index 410a384..eb9ea4e 100644
--- a/src/animator/SkHitTest.h
+++ b/src/animator/SkHitTest.h
@@ -16,10 +16,10 @@
 class SkHitTest : public SkADrawable {
     DECLARE_MEMBER_INFO(HitTest);
     SkHitTest();
-    virtual bool draw(SkAnimateMaker& );
-    virtual bool enable(SkAnimateMaker& );
-    virtual bool hasEnable() const;
-    virtual const SkMemberInfo* preferredChild(SkDisplayTypes type);
+    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
+    virtual bool enable(SkAnimateMaker& ) SK_OVERRIDE;
+    virtual bool hasEnable() const SK_OVERRIDE;
+    virtual const SkMemberInfo* preferredChild(SkDisplayTypes type) SK_OVERRIDE;
 private:
     SkTDDisplayableArray bullets;
     SkTDIntArray hits;
diff --git a/src/animator/SkMatrixParts.h b/src/animator/SkMatrixParts.h
index 51c9559..b0d6fcc 100644
--- a/src/animator/SkMatrixParts.h
+++ b/src/animator/SkMatrixParts.h
@@ -39,7 +39,7 @@
     DECLARE_MEMBER_INFO(Rotate);
     SkRotate();
 protected:
-    virtual bool add();
+    virtual bool add() SK_OVERRIDE;
     SkScalar degrees;
     SkPoint center;
 };
@@ -48,7 +48,7 @@
     DECLARE_MEMBER_INFO(Scale);
     SkScale();
 protected:
-    virtual bool add();
+    virtual bool add() SK_OVERRIDE;
     SkScalar x;
     SkScalar y;
     SkPoint center;
@@ -58,7 +58,7 @@
     DECLARE_MEMBER_INFO(Skew);
     SkSkew();
 protected:
-    virtual bool add();
+    virtual bool add() SK_OVERRIDE;
     SkScalar x;
     SkScalar y;
     SkPoint center;
@@ -68,7 +68,7 @@
     DECLARE_MEMBER_INFO(Translate);
     SkTranslate();
 protected:
-    virtual bool add();
+    virtual bool add() SK_OVERRIDE;
     SkScalar x;
     SkScalar y;
 };
@@ -78,7 +78,7 @@
     SkFromPath();
     virtual ~SkFromPath();
 protected:
-    virtual bool add();
+    virtual bool add() SK_OVERRIDE;
     int32_t mode;
     SkScalar offset;
     SkDrawPath* path;
@@ -90,11 +90,11 @@
     SkRectToRect();
     virtual ~SkRectToRect();
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* );
+    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
-    virtual const SkMemberInfo* preferredChild(SkDisplayTypes type);
+    virtual const SkMemberInfo* preferredChild(SkDisplayTypes type) SK_OVERRIDE;
 protected:
-    virtual bool add();
+    virtual bool add() SK_OVERRIDE;
     SkDrawRect* source;
     SkDrawRect* destination;
 };
@@ -104,12 +104,12 @@
     SkPolyToPoly();
     virtual ~SkPolyToPoly();
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* );
+    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
-    virtual void onEndElement(SkAnimateMaker& );
-    virtual const SkMemberInfo* preferredChild(SkDisplayTypes type);
+    virtual void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
+    virtual const SkMemberInfo* preferredChild(SkDisplayTypes type) SK_OVERRIDE;
 protected:
-    virtual bool add();
+    virtual bool add() SK_OVERRIDE;
     SkPolygon* source;
     SkPolygon* destination;
 };
diff --git a/src/animator/SkMemberInfo.h b/src/animator/SkMemberInfo.h
index f005bab..cf4b0a8 100644
--- a/src/animator/SkMemberInfo.h
+++ b/src/animator/SkMemberInfo.h
@@ -183,16 +183,16 @@
 
 #define DECLARE_EMPTY_MEMBER_INFO(_type) \
 public: \
-    virtual SkDisplayTypes getType() const { return SkType_##_type; }
+    virtual SkDisplayTypes getType() const SK_OVERRIDE { return SkType_##_type; }
 
 #define DECLARE_EXTRAS_MEMBER_INFO(_type) \
 public: \
     static const SkMemberInfo fInfo[]; \
     static const int fInfoCount; \
-    virtual const SkMemberInfo* getMember(int index); \
-    virtual const SkMemberInfo* getMember(const char name[]); \
+    virtual const SkMemberInfo* getMember(int index) SK_OVERRIDE; \
+    virtual const SkMemberInfo* getMember(const char name[]) SK_OVERRIDE; \
     SkDisplayTypes fType; \
-    virtual SkDisplayTypes getType() const { return fType; } \
+    virtual SkDisplayTypes getType() const SK_OVERRIDE { return fType; } \
     typedef _type BASE_CLASS
 
 #define DECLARE_NO_VIRTUALS_MEMBER_INFO(_type) \
diff --git a/src/animator/SkPaintPart.h b/src/animator/SkPaintPart.h
index 6f33cb4..1f5d4eb 100644
--- a/src/animator/SkPaintPart.h
+++ b/src/animator/SkPaintPart.h
@@ -35,14 +35,14 @@
     DECLARE_EMPTY_MEMBER_INFO(MaskFilter);
     virtual SkMaskFilter* getMaskFilter();
 protected:
-    virtual bool add();
+    virtual bool add() SK_OVERRIDE;
 };
 
 class SkDrawPathEffect : public SkPaintPart {
     DECLARE_EMPTY_MEMBER_INFO(PathEffect);
     virtual SkPathEffect* getPathEffect();
 protected:
-    virtual bool add();
+    virtual bool add() SK_OVERRIDE;
 };
 
 class SkDrawShader : public SkPaintPart {
@@ -50,7 +50,7 @@
     SkDrawShader();
     virtual SkShader* getShader();
 protected:
-    virtual bool add();
+    virtual bool add() SK_OVERRIDE;
     SkMatrix* getMatrix(); // returns NULL if matrix is NULL
     SkDrawMatrix* matrix;
     int /*SkShader::TileMode*/ tileMode;
@@ -60,12 +60,12 @@
     DECLARE_DRAW_MEMBER_INFO(Typeface);
     SkDrawTypeface();
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker *);
+    virtual void dump(SkAnimateMaker *) SK_OVERRIDE;
 #endif
     SkTypeface* getTypeface() {
         return SkTypeface::CreateFromName(fontName.c_str(), style); }
 protected:
-    virtual bool add();
+    virtual bool add() SK_OVERRIDE;
     SkString fontName;
     SkTypeface::Style style;
 };
diff --git a/src/animator/SkPathParts.h b/src/animator/SkPathParts.h
index f82aa74..67a8853 100644
--- a/src/animator/SkPathParts.h
+++ b/src/animator/SkPathParts.h
@@ -34,7 +34,7 @@
 class SkMoveTo : public SkPathPart {
     DECLARE_MEMBER_INFO(MoveTo);
     SkMoveTo();
-    virtual bool add();
+    virtual bool add() SK_OVERRIDE;
 protected:
     SkScalar x;
     SkScalar y;
@@ -42,7 +42,7 @@
 
 class SkRMoveTo : public SkMoveTo {
     DECLARE_MEMBER_INFO(RMoveTo);
-    virtual bool add();
+    virtual bool add() SK_OVERRIDE;
 private:
     typedef SkMoveTo INHERITED;
 };
@@ -50,7 +50,7 @@
 class SkLineTo : public SkPathPart {
     DECLARE_MEMBER_INFO(LineTo);
     SkLineTo();
-    virtual bool add();
+    virtual bool add() SK_OVERRIDE;
 protected:
     SkScalar x;
     SkScalar y;
@@ -58,7 +58,7 @@
 
 class SkRLineTo : public SkLineTo {
     DECLARE_MEMBER_INFO(RLineTo);
-    virtual bool add();
+    virtual bool add() SK_OVERRIDE;
 private:
     typedef SkLineTo INHERITED;
 };
@@ -66,7 +66,7 @@
 class SkQuadTo : public SkPathPart {
     DECLARE_MEMBER_INFO(QuadTo);
     SkQuadTo();
-    virtual bool add();
+    virtual bool add() SK_OVERRIDE;
 protected:
     SkScalar x1;
     SkScalar y1;
@@ -76,7 +76,7 @@
 
 class SkRQuadTo : public SkQuadTo {
     DECLARE_MEMBER_INFO(RQuadTo);
-    virtual bool add();
+    virtual bool add() SK_OVERRIDE;
 private:
     typedef SkQuadTo INHERITED;
 };
@@ -84,7 +84,7 @@
 class SkCubicTo : public SkPathPart {
     DECLARE_MEMBER_INFO(CubicTo);
     SkCubicTo();
-    virtual bool add();
+    virtual bool add() SK_OVERRIDE;
 protected:
     SkScalar x1;
     SkScalar y1;
@@ -96,14 +96,14 @@
 
 class SkRCubicTo : public SkCubicTo {
     DECLARE_MEMBER_INFO(RCubicTo);
-    virtual bool add();
+    virtual bool add() SK_OVERRIDE;
 private:
     typedef SkCubicTo INHERITED;
 };
 
 class SkClose : public SkPathPart {
     DECLARE_EMPTY_MEMBER_INFO(Close);
-    virtual bool add();
+    virtual bool add() SK_OVERRIDE;
 };
 
 class SkAddGeom : public SkPathPart {
@@ -116,7 +116,7 @@
 class SkAddRect : public SkAddGeom {
     DECLARE_MEMBER_INFO(AddRect);
     SkAddRect();
-    virtual bool add();
+    virtual bool add() SK_OVERRIDE;
 protected:
     SkRect fRect;
 private:
@@ -125,7 +125,7 @@
 
 class SkAddOval : public SkAddRect {
     DECLARE_MEMBER_INFO(AddOval);
-    virtual bool add();
+    virtual bool add() SK_OVERRIDE;
 private:
     typedef SkAddRect INHERITED;
 };
@@ -133,7 +133,7 @@
 class SkAddCircle : public SkAddGeom {
     DECLARE_MEMBER_INFO(AddCircle);
     SkAddCircle();
-    virtual bool add();
+    virtual bool add() SK_OVERRIDE;
 private:
     SkScalar radius;
     SkScalar x;
@@ -144,7 +144,7 @@
 class SkAddRoundRect : public SkAddRect {
     DECLARE_MEMBER_INFO(AddRoundRect);
     SkAddRoundRect();
-    virtual bool add();
+    virtual bool add() SK_OVERRIDE;
 private:
     SkScalar rx;
     SkScalar ry;
@@ -154,7 +154,7 @@
 class SkAddPath : public SkPathPart {
     DECLARE_MEMBER_INFO(AddPath);
     SkAddPath();
-    virtual bool add();
+    virtual bool add() SK_OVERRIDE;
 private:
     typedef SkPathPart INHERITED;
     SkDrawMatrix* matrix;
diff --git a/src/animator/SkSnapshot.h b/src/animator/SkSnapshot.h
index 110c36d..43f16692 100644
--- a/src/animator/SkSnapshot.h
+++ b/src/animator/SkSnapshot.h
@@ -18,7 +18,7 @@
 class SkSnapshot: public SkADrawable {
     DECLARE_MEMBER_INFO(Snapshot);
     SkSnapshot();
-    virtual bool draw(SkAnimateMaker& );
+    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
     private:
     SkString filename;
     SkScalar quality;
diff --git a/src/animator/SkTextOnPath.h b/src/animator/SkTextOnPath.h
index b0ce234..9c55284 100644
--- a/src/animator/SkTextOnPath.h
+++ b/src/animator/SkTextOnPath.h
@@ -19,7 +19,7 @@
 class SkTextOnPath : public SkBoundable {
     DECLARE_MEMBER_INFO(TextOnPath);
     SkTextOnPath();
-    virtual bool draw(SkAnimateMaker& );
+    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 private:
     SkScalar offset;
     SkDrawPath* path;
diff --git a/src/animator/SkTextToPath.h b/src/animator/SkTextToPath.h
index 9b72e5d..01c6601 100644
--- a/src/animator/SkTextToPath.h
+++ b/src/animator/SkTextToPath.h
@@ -20,8 +20,8 @@
 class SkTextToPath : public SkADrawable {
     DECLARE_MEMBER_INFO(TextToPath);
     SkTextToPath();
-    virtual bool draw(SkAnimateMaker& );
-    virtual void onEndElement(SkAnimateMaker& );
+    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
+    virtual void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
 private:
     SkDrawPaint* paint;
     SkDrawPath* path;
diff --git a/tools/PictureResultsWriter.h b/tools/PictureResultsWriter.h
index 9ef1666..da005ad 100644
--- a/tools/PictureResultsWriter.h
+++ b/tools/PictureResultsWriter.h
@@ -138,7 +138,7 @@
         results.append("\n");
         this->logProgress(results.c_str());
     }
-    virtual void end() {}
+    virtual void end() SK_OVERRIDE {}
 private:
     BenchLogger* fLogger;
     SkString fCurrentLine;
