Fix up all the easy virtual ... SK_OVERRIDE cases.

This fixes every case where virtual and SK_OVERRIDE were on the same line,
which should be the bulk of cases.  We'll have to manually clean up the rest
over time unless I level up in regexes.

for f in (find . -type f); perl -p -i -e 's/virtual (.*)SK_OVERRIDE/\1SK_OVERRIDE/g' $f; end

BUG=skia:

Review URL: https://codereview.chromium.org/806653007
diff --git a/src/animator/SkAnimate.h b/src/animator/SkAnimate.h
index f654124..225d27d 100644
--- a/src/animator/SkAnimate.h
+++ b/src/animator/SkAnimate.h
@@ -19,11 +19,11 @@
     DECLARE_MEMBER_INFO(Animate);
     SkAnimate();
     virtual ~SkAnimate();
-    virtual int components() SK_OVERRIDE;
+    int components() SK_OVERRIDE;
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
+    void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
-    virtual void onEndElement(SkAnimateMaker& maker) SK_OVERRIDE;
+    void onEndElement(SkAnimateMaker& maker) SK_OVERRIDE;
 protected:
     bool resolveCommon(SkAnimateMaker& );
     int fComponents;
diff --git a/src/animator/SkAnimateBase.h b/src/animator/SkAnimateBase.h
index 63ee537..6927297 100644
--- a/src/animator/SkAnimateBase.h
+++ b/src/animator/SkAnimateBase.h
@@ -24,26 +24,26 @@
     SkAnimateBase();
     virtual ~SkAnimateBase();
     virtual int components();
-    virtual SkDisplayable* deepCopy(SkAnimateMaker* ) SK_OVERRIDE;
-    virtual void dirty() SK_OVERRIDE;
+    SkDisplayable* deepCopy(SkAnimateMaker* ) SK_OVERRIDE;
+    void dirty() SK_OVERRIDE;
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
+    void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
     int entries() { return fValues.count() / components(); }
     virtual bool hasExecute() const;
     bool isDynamic() const { return SkToBool(fDynamic); }
-    virtual SkDisplayable* getParent() const SK_OVERRIDE;
-    virtual bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
+    SkDisplayable* getParent() const SK_OVERRIDE;
+    bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
     SkMSec getStart() const { return fStart; }
     SkOperand* getValues() { return fValues.begin(); }
     SkDisplayTypes getValuesType() { return fValues.getType(); }
-    virtual void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
+    void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
     void packARGB(SkScalar [], int count, SkTDOperandArray* );
     virtual void refresh(SkAnimateMaker& );
     void setChanged(bool changed) { fChanged = changed; }
     void setHasEndEvent() { fHasEndEvent = true; }
-    virtual bool setParent(SkDisplayable* ) SK_OVERRIDE;
-    virtual bool setProperty(int index, SkScriptValue& value) SK_OVERRIDE;
+    bool setParent(SkDisplayable* ) SK_OVERRIDE;
+    bool setProperty(int index, SkScriptValue& value) SK_OVERRIDE;
     void setTarget(SkAnimateMaker& );
     virtual bool targetNeedsInitialization() const;
 protected:
diff --git a/src/animator/SkAnimateSet.h b/src/animator/SkAnimateSet.h
index 6f38e9e..c1ccde3 100644
--- a/src/animator/SkAnimateSet.h
+++ b/src/animator/SkAnimateSet.h
@@ -16,10 +16,10 @@
     DECLARE_MEMBER_INFO(Set);
     SkSet();
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
+    void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
-    virtual void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
-    virtual void refresh(SkAnimateMaker& ) SK_OVERRIDE;
+    void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
+    void refresh(SkAnimateMaker& ) SK_OVERRIDE;
 private:
     typedef SkAnimate INHERITED;
 };
diff --git a/src/animator/SkDisplayAdd.h b/src/animator/SkDisplayAdd.h
index 6ba4933..9e0ff30 100644
--- a/src/animator/SkDisplayAdd.h
+++ b/src/animator/SkDisplayAdd.h
@@ -22,15 +22,15 @@
         kMode_immediate
     };
 
-    virtual SkDisplayable* deepCopy(SkAnimateMaker* ) SK_OVERRIDE;
-    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
+    SkDisplayable* deepCopy(SkAnimateMaker* ) SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
+    void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
-    virtual bool enable(SkAnimateMaker& ) SK_OVERRIDE;
-    virtual bool hasEnable() const SK_OVERRIDE;
-    virtual void initialize() SK_OVERRIDE;
-    virtual bool isDrawable() const SK_OVERRIDE;
+    bool enable(SkAnimateMaker& ) SK_OVERRIDE;
+    bool hasEnable() const SK_OVERRIDE;
+    void initialize() SK_OVERRIDE;
+    bool isDrawable() const SK_OVERRIDE;
 protected:
 //  struct _A {
         Mode mode;
diff --git a/src/animator/SkDisplayApply.h b/src/animator/SkDisplayApply.h
index 2d09fbe..9e7e12f 100644
--- a/src/animator/SkDisplayApply.h
+++ b/src/animator/SkDisplayApply.h
@@ -38,41 +38,41 @@
     void appendActive(SkActive* );
     void applyValues(int animatorIndex, SkOperand* values, int count,
         SkDisplayTypes , SkMSec time);
-    virtual bool contains(SkDisplayable*) SK_OVERRIDE;
+    bool contains(SkDisplayable*) SK_OVERRIDE;
 //  void createActive(SkAnimateMaker& );
-    virtual SkDisplayable* deepCopy(SkAnimateMaker* ) SK_OVERRIDE;
+    SkDisplayable* deepCopy(SkAnimateMaker* ) SK_OVERRIDE;
     void disable();
-    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
+    void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
-    virtual bool enable(SkAnimateMaker& ) SK_OVERRIDE;
+    bool enable(SkAnimateMaker& ) SK_OVERRIDE;
     void enableCreate(SkAnimateMaker& );
     void enableDynamic(SkAnimateMaker& );
     void endSave(int index);
     Mode getMode() { return mode; }
-    virtual bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
+    bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
     SkADrawable* getScope() { return scope; }
     void getStep(SkScriptValue* );
     SkADrawable* getTarget(SkAnimateBase* );
     bool hasDelayedAnimator() const;
-    virtual bool hasEnable() const SK_OVERRIDE;
+    bool hasEnable() const SK_OVERRIDE;
     bool inactivate(SkAnimateMaker& maker);
-    virtual void initialize() SK_OVERRIDE;
+    void initialize() SK_OVERRIDE;
     bool interpolate(SkAnimateMaker& , SkMSec time);
-    virtual void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
-    virtual const SkMemberInfo* preferredChild(SkDisplayTypes type) SK_OVERRIDE;
+    void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
+    const SkMemberInfo* preferredChild(SkDisplayTypes type) SK_OVERRIDE;
     void refresh(SkAnimateMaker& );
     void reset();
-    virtual bool resolveIDs(SkAnimateMaker& maker, SkDisplayable* original, SkApply* ) SK_OVERRIDE;
+    bool resolveIDs(SkAnimateMaker& maker, SkDisplayable* original, SkApply* ) SK_OVERRIDE;
     bool resolveField(SkAnimateMaker& , SkDisplayable* parent, SkString* str);
     void save(int index);
     void setEmbedded() { fEmbedded = true; }
-    virtual bool setProperty(int index, SkScriptValue& ) SK_OVERRIDE;
-    virtual void setSteps(int _steps) SK_OVERRIDE;
+    bool setProperty(int index, SkScriptValue& ) SK_OVERRIDE;
+    void setSteps(int _steps) SK_OVERRIDE;
 //  virtual void setTime(SkMSec time);
 #ifdef SK_DEBUG
-    virtual void validate() SK_OVERRIDE;
+    void validate() SK_OVERRIDE;
 #endif
 private:
     SkMSec begin;
diff --git a/src/animator/SkDisplayBounds.h b/src/animator/SkDisplayBounds.h
index 7ca1cc5..4c21871 100644
--- a/src/animator/SkDisplayBounds.h
+++ b/src/animator/SkDisplayBounds.h
@@ -15,7 +15,7 @@
 class SkDisplayBounds : public SkDrawRect {
     DECLARE_DISPLAY_MEMBER_INFO(Bounds);
     SkDisplayBounds();
-    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 private:
     SkBool inval;
     typedef SkDrawRect INHERITED;
diff --git a/src/animator/SkDisplayEvent.h b/src/animator/SkDisplayEvent.h
index 92eb8cf..4da49b9 100644
--- a/src/animator/SkDisplayEvent.h
+++ b/src/animator/SkDisplayEvent.h
@@ -34,17 +34,17 @@
     };
     SkDisplayEvent();
     virtual ~SkDisplayEvent();
-    virtual bool addChild(SkAnimateMaker& , SkDisplayable* child) SK_OVERRIDE;
-    virtual bool contains(SkDisplayable*) SK_OVERRIDE;
-    virtual SkDisplayable* contains(const SkString& ) SK_OVERRIDE;
+    bool addChild(SkAnimateMaker& , SkDisplayable* child) SK_OVERRIDE;
+    bool contains(SkDisplayable*) SK_OVERRIDE;
+    SkDisplayable* contains(const SkString& ) SK_OVERRIDE;
 #ifdef SK_DEBUG
     void dumpEvent(SkAnimateMaker* );
 #endif
     bool enableEvent(SkAnimateMaker& );
-    virtual bool getProperty(int index, SkScriptValue* ) const SK_OVERRIDE;
-    virtual void onEndElement(SkAnimateMaker& maker) SK_OVERRIDE;
+    bool getProperty(int index, SkScriptValue* ) const SK_OVERRIDE;
+    void onEndElement(SkAnimateMaker& maker) SK_OVERRIDE;
     void populateInput(SkAnimateMaker& , const SkEvent& fEvent);
-    virtual bool setProperty(int index, SkScriptValue& ) SK_OVERRIDE;
+    bool setProperty(int index, SkScriptValue& ) SK_OVERRIDE;
 protected:
     SkKey code;
     SkBool disable;
diff --git a/src/animator/SkDisplayInclude.h b/src/animator/SkDisplayInclude.h
index 9e0cfe2..1b6580a 100644
--- a/src/animator/SkDisplayInclude.h
+++ b/src/animator/SkDisplayInclude.h
@@ -15,9 +15,9 @@
 
 class SkInclude : public SkDisplayable {
     DECLARE_MEMBER_INFO(Include);
-    virtual void onEndElement(SkAnimateMaker & ) SK_OVERRIDE;
-    virtual bool enable(SkAnimateMaker & ) SK_OVERRIDE;
-    virtual bool hasEnable() const SK_OVERRIDE;
+    void onEndElement(SkAnimateMaker & ) SK_OVERRIDE;
+    bool enable(SkAnimateMaker & ) SK_OVERRIDE;
+    bool hasEnable() const SK_OVERRIDE;
 protected:
     SkString src;
 };
diff --git a/src/animator/SkDisplayInput.h b/src/animator/SkDisplayInput.h
index 045a2e4..8eba709 100644
--- a/src/animator/SkDisplayInput.h
+++ b/src/animator/SkDisplayInput.h
@@ -16,10 +16,10 @@
 class SkInput : public SkDisplayable {
     DECLARE_MEMBER_INFO(Input);
     SkInput();
-    virtual SkDisplayable* contains(const SkString& ) SK_OVERRIDE;
-    virtual bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
-    virtual bool enable(SkAnimateMaker & ) SK_OVERRIDE;
-    virtual bool hasEnable() const SK_OVERRIDE;
+    SkDisplayable* contains(const SkString& ) SK_OVERRIDE;
+    bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
+    bool enable(SkAnimateMaker & ) SK_OVERRIDE;
+    bool hasEnable() const SK_OVERRIDE;
 protected:
     SkString name;
     int32_t  fInt;
diff --git a/src/animator/SkDisplayMath.h b/src/animator/SkDisplayMath.h
index 301e0f2..05c1fe4 100644
--- a/src/animator/SkDisplayMath.h
+++ b/src/animator/SkDisplayMath.h
@@ -19,8 +19,8 @@
     virtual void executeFunction(SkDisplayable* , int index,
         SkTDArray<SkScriptValue>& parameters, SkDisplayTypes type,
         SkScriptValue* ) SK_OVERRIDE;
-    virtual const SkFunctionParamType* getFunctionsParameters() SK_OVERRIDE;
-    virtual bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
+    const SkFunctionParamType* getFunctionsParameters() SK_OVERRIDE;
+    bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
 private:
     mutable SkRandom fRandom;
     static const SkScalar gConstants[];
diff --git a/src/animator/SkDisplayMovie.h b/src/animator/SkDisplayMovie.h
index cc944f5..c1f184d 100644
--- a/src/animator/SkDisplayMovie.h
+++ b/src/animator/SkDisplayMovie.h
@@ -21,21 +21,21 @@
     SkDisplayMovie();
     virtual ~SkDisplayMovie();
     void buildMovie();
-    virtual SkDisplayable* deepCopy(SkAnimateMaker* ) SK_OVERRIDE;
-    virtual void dirty() SK_OVERRIDE;
+    SkDisplayable* deepCopy(SkAnimateMaker* ) SK_OVERRIDE;
+    void dirty() SK_OVERRIDE;
     bool doEvent(const SkEvent& evt) {
         return fLoaded && fMovie.doEvent(evt);
     }
-    virtual bool doEvent(SkDisplayEvent::Kind , SkEventState* state ) SK_OVERRIDE;
-    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
+    bool doEvent(SkDisplayEvent::Kind , SkEventState* state ) SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
-    virtual void dumpEvents() SK_OVERRIDE;
+    void dump(SkAnimateMaker* ) SK_OVERRIDE;
+    void dumpEvents() SK_OVERRIDE;
 #endif
-    virtual bool enable(SkAnimateMaker& ) SK_OVERRIDE;
+    bool enable(SkAnimateMaker& ) SK_OVERRIDE;
     const SkAnimator* getAnimator() const { return &fMovie; }
-    virtual bool hasEnable() const SK_OVERRIDE;
-    virtual void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
+    bool hasEnable() const SK_OVERRIDE;
+    void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
 protected:
     SkString src;
     SkAnimator fMovie;
diff --git a/src/animator/SkDisplayNumber.h b/src/animator/SkDisplayNumber.h
index 2fc75b78..92f0fa3 100644
--- a/src/animator/SkDisplayNumber.h
+++ b/src/animator/SkDisplayNumber.h
@@ -15,7 +15,7 @@
 
 class SkDisplayNumber : public SkDisplayable {
     DECLARE_DISPLAY_MEMBER_INFO(Number);
-    virtual bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
+    bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
 private:
 };
 
diff --git a/src/animator/SkDisplayPost.h b/src/animator/SkDisplayPost.h
index 6808292..c6c4b51 100644
--- a/src/animator/SkDisplayPost.h
+++ b/src/animator/SkDisplayPost.h
@@ -27,17 +27,17 @@
     };
     SkPost();
     virtual ~SkPost();
-    virtual bool addChild(SkAnimateMaker& , SkDisplayable* child) SK_OVERRIDE;
-    virtual bool childrenNeedDisposing() const SK_OVERRIDE;
-    virtual void dirty() SK_OVERRIDE;
+    bool addChild(SkAnimateMaker& , SkDisplayable* child) SK_OVERRIDE;
+    bool childrenNeedDisposing() const SK_OVERRIDE;
+    void dirty() SK_OVERRIDE;
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
+    void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
-    virtual bool enable(SkAnimateMaker& ) SK_OVERRIDE;
-    virtual bool hasEnable() const SK_OVERRIDE;
-    virtual void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
-    virtual void setChildHasID() SK_OVERRIDE;
-    virtual bool setProperty(int index, SkScriptValue& ) SK_OVERRIDE;
+    bool enable(SkAnimateMaker& ) SK_OVERRIDE;
+    bool hasEnable() const SK_OVERRIDE;
+    void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
+    void setChildHasID() SK_OVERRIDE;
+    bool setProperty(int index, SkScriptValue& ) SK_OVERRIDE;
 protected:
     SkMSec delay;
     SkString sink;
diff --git a/src/animator/SkDisplayRandom.h b/src/animator/SkDisplayRandom.h
index e649fce..6a04f59 100644
--- a/src/animator/SkDisplayRandom.h
+++ b/src/animator/SkDisplayRandom.h
@@ -26,10 +26,10 @@
     DECLARE_DISPLAY_MEMBER_INFO(Random);
     SkDisplayRandom();
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
+    void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
-    virtual bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
-    virtual bool setProperty(int index, SkScriptValue& ) SK_OVERRIDE;
+    bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
+    bool setProperty(int index, SkScriptValue& ) SK_OVERRIDE;
 private:
     SkScalar blend;
     SkScalar min;
diff --git a/src/animator/SkDisplayTypes.h b/src/animator/SkDisplayTypes.h
index 01a68d0..a9432da 100644
--- a/src/animator/SkDisplayTypes.h
+++ b/src/animator/SkDisplayTypes.h
@@ -34,7 +34,7 @@
     DECLARE_DISPLAY_MEMBER_INFO(Boolean);
     SkDisplayBoolean();
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
+    void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
     SkBool value;
     friend class SkAnimatorScript;
@@ -47,7 +47,7 @@
     DECLARE_DISPLAY_MEMBER_INFO(Int);
     SkDisplayInt();
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
+    void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
 private:
     int32_t value;
@@ -61,7 +61,7 @@
     DECLARE_DISPLAY_MEMBER_INFO(Float);
     SkDisplayFloat();
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
+    void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
 private:
     SkScalar value;
@@ -78,8 +78,8 @@
     virtual void executeFunction(SkDisplayable* , int index,
         SkTDArray<SkScriptValue>& parameters, SkDisplayTypes type,
         SkScriptValue* ) SK_OVERRIDE;
-    virtual const SkFunctionParamType* getFunctionsParameters() SK_OVERRIDE;
-    virtual bool getProperty(int index, SkScriptValue* ) const SK_OVERRIDE;
+    const SkFunctionParamType* getFunctionsParameters() SK_OVERRIDE;
+    bool getProperty(int index, SkScriptValue* ) const SK_OVERRIDE;
     SkString value;
 private:
     static const SkFunctionParamType fFunctionParameters[];
@@ -91,7 +91,7 @@
     SkDisplayArray(SkTypedArray& );
     SkDisplayArray(SkOpArray& ); // compiled script experiment
     virtual ~SkDisplayArray();
-    virtual bool getProperty(int index, SkScriptValue* ) const SK_OVERRIDE;
+    bool getProperty(int index, SkScriptValue* ) const SK_OVERRIDE;
 private:
     SkTypedArray values;
     friend class SkAnimator;
diff --git a/src/animator/SkDraw3D.h b/src/animator/SkDraw3D.h
index b652d69..5f066ba 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& ) SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 private:
     SkScalar hackWidth;
     SkScalar hackHeight;
@@ -41,7 +41,7 @@
     virtual void executeFunction(SkDisplayable* , int index,
         SkTDArray<SkScriptValue>& parameters, SkDisplayTypes type,
         SkScriptValue* ) SK_OVERRIDE;
-    virtual const SkFunctionParamType* getFunctionsParameters() SK_OVERRIDE;
+    const SkFunctionParamType* getFunctionsParameters() SK_OVERRIDE;
     SkPatch3D  fPatch;
     static const SkFunctionParamType fFunctionParameters[];
     friend class Sk3D_Camera;
diff --git a/src/animator/SkDrawBitmap.h b/src/animator/SkDrawBitmap.h
index 0ebea9c..a1b74b6 100644
--- a/src/animator/SkDrawBitmap.h
+++ b/src/animator/SkDrawBitmap.h
@@ -20,7 +20,7 @@
     DECLARE_MEMBER_INFO(BaseBitmap);
     SkBaseBitmap();
     virtual ~SkBaseBitmap();
-    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 protected:
     SkBitmap fBitmap;
     SkScalar x;
@@ -36,10 +36,10 @@
     SkDrawBitmap();
     virtual ~SkDrawBitmap();
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
+    void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
-    virtual void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
-    virtual bool setProperty(int index, SkScriptValue& value) SK_OVERRIDE;
+    void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
+    bool setProperty(int index, SkScriptValue& value) SK_OVERRIDE;
 protected:
     int /*SkBitmap::Config*/ format;
     int32_t height;
@@ -54,11 +54,11 @@
     DECLARE_MEMBER_INFO(ImageBaseBitmap);
     SkImageBaseBitmap();
     virtual ~SkImageBaseBitmap();
-    virtual SkDisplayable* deepCopy(SkAnimateMaker* ) SK_OVERRIDE;
-    virtual void dirty() SK_OVERRIDE;
-    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
-    virtual bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
-    virtual void onEndElement(SkAnimateMaker& maker) SK_OVERRIDE;
+    SkDisplayable* deepCopy(SkAnimateMaker* ) SK_OVERRIDE;
+    void dirty() SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
+    bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
+    void onEndElement(SkAnimateMaker& maker) SK_OVERRIDE;
 private:
     void resolve() const { (const_cast<SkImageBaseBitmap*>(this))->resolve(); }
     void resolve();
diff --git a/src/animator/SkDrawBlur.h b/src/animator/SkDrawBlur.h
index 7507592..56f29db 100644
--- a/src/animator/SkDrawBlur.h
+++ b/src/animator/SkDrawBlur.h
@@ -14,7 +14,7 @@
 class SkDrawBlur : public SkDrawMaskFilter {
     DECLARE_DRAW_MEMBER_INFO(Blur);
     SkDrawBlur();
-    virtual SkMaskFilter* getMaskFilter() SK_OVERRIDE;
+    SkMaskFilter* getMaskFilter() SK_OVERRIDE;
 protected:
     SkScalar fSigma;
     int /*SkBlurStyle*/ fBlurStyle;
diff --git a/src/animator/SkDrawClip.h b/src/animator/SkDrawClip.h
index 7b21863..54c8651 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& ) SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 private:
     SkDrawRect* rect;
     SkDrawPath* path;
diff --git a/src/animator/SkDrawColor.h b/src/animator/SkDrawColor.h
index 5ce495e..b5b4f2d 100644
--- a/src/animator/SkDrawColor.h
+++ b/src/animator/SkDrawColor.h
@@ -14,18 +14,18 @@
 class SkDrawColor : public SkPaintPart {
     DECLARE_DRAW_MEMBER_INFO(Color);
     SkDrawColor();
-    virtual bool add() SK_OVERRIDE;
-    virtual void dirty() SK_OVERRIDE;
+    bool add() SK_OVERRIDE;
+    void dirty() SK_OVERRIDE;
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
+    void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
     SkColor getColor();
-    virtual SkDisplayable* deepCopy(SkAnimateMaker* ) SK_OVERRIDE;
-    virtual SkDisplayable* getParent() const SK_OVERRIDE;
-    virtual bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
-    virtual void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
-    virtual bool setParent(SkDisplayable* parent) SK_OVERRIDE;
-    virtual bool setProperty(int index, SkScriptValue&) SK_OVERRIDE;
+    SkDisplayable* deepCopy(SkAnimateMaker* ) SK_OVERRIDE;
+    SkDisplayable* getParent() const SK_OVERRIDE;
+    bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
+    void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
+    bool setParent(SkDisplayable* parent) SK_OVERRIDE;
+    bool setProperty(int index, SkScriptValue&) SK_OVERRIDE;
 protected:
     SkColor color;
     SkScalar fHue;
diff --git a/src/animator/SkDrawDash.h b/src/animator/SkDrawDash.h
index b4f086a..fa020c2 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() SK_OVERRIDE;
+    SkPathEffect* getPathEffect() SK_OVERRIDE;
 private:
     SkTDScalarArray intervals;
     SkScalar phase;
diff --git a/src/animator/SkDrawDiscrete.h b/src/animator/SkDrawDiscrete.h
index 7e11506..ea44199 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() SK_OVERRIDE;
+    SkPathEffect* getPathEffect() SK_OVERRIDE;
 private:
     SkScalar deviation;
     SkScalar segLength;
diff --git a/src/animator/SkDrawEmboss.h b/src/animator/SkDrawEmboss.h
index 7ffd3ef..6ffe207 100644
--- a/src/animator/SkDrawEmboss.h
+++ b/src/animator/SkDrawEmboss.h
@@ -15,7 +15,7 @@
 class SkDrawEmboss : public SkDrawMaskFilter {
     DECLARE_DRAW_MEMBER_INFO(Emboss);
     SkDrawEmboss();
-    virtual SkMaskFilter* getMaskFilter() SK_OVERRIDE;
+    SkMaskFilter* getMaskFilter() SK_OVERRIDE;
 protected:
     SkTDScalarArray fDirection;
     SkScalar        fSigma;
diff --git a/src/animator/SkDrawExtraPathEffect.cpp b/src/animator/SkDrawExtraPathEffect.cpp
index dc58605..0e4582b 100644
--- a/src/animator/SkDrawExtraPathEffect.cpp
+++ b/src/animator/SkDrawExtraPathEffect.cpp
@@ -20,8 +20,8 @@
     DECLARE_PRIVATE_MEMBER_INFO(DrawShapePathEffect);
     SkDrawShapePathEffect();
     virtual ~SkDrawShapePathEffect();
-    virtual bool addChild(SkAnimateMaker& , SkDisplayable* ) SK_OVERRIDE;
-    virtual SkPathEffect* getPathEffect() SK_OVERRIDE;
+    bool addChild(SkAnimateMaker& , SkDisplayable* ) SK_OVERRIDE;
+    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& ) SK_OVERRIDE;
+    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& ) SK_OVERRIDE;
+    void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
 private:
     SkDrawMatrix* matrix;
     friend class SkShape2DPathEffect;
@@ -58,9 +58,9 @@
     DECLARE_EXTRAS_MEMBER_INFO(SkDrawComposePathEffect);
     SkDrawComposePathEffect(SkDisplayTypes );
     virtual ~SkDrawComposePathEffect();
-    virtual bool addChild(SkAnimateMaker& , SkDisplayable* ) SK_OVERRIDE;
-    virtual SkPathEffect* getPathEffect() SK_OVERRIDE;
-    virtual bool isPaint() const SK_OVERRIDE;
+    bool addChild(SkAnimateMaker& , SkDisplayable* ) SK_OVERRIDE;
+    SkPathEffect* getPathEffect() SK_OVERRIDE;
+    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() SK_OVERRIDE;
+    SkPathEffect* getPathEffect() SK_OVERRIDE;
 private:
     SkScalar radius;
 };
@@ -93,7 +93,7 @@
     Factory getFactory() const SK_OVERRIDE { sk_throw(); return NULL; }
 
 protected:
-    virtual SkScalar begin(SkScalar contourLength) const SK_OVERRIDE {
+    SkScalar begin(SkScalar contourLength) const SK_OVERRIDE {
         SkScriptValue value;
         SkAnimatorScript engine(*fMaker, NULL, SkType_Float);
         engine.propertyCallBack(GetContourLength, &contourLength);
@@ -102,7 +102,7 @@
         return value.fOperand.fScalar;
     }
 
-    virtual SkScalar next(SkPath* dst, SkScalar distance, SkPathMeasure&) const SK_OVERRIDE {
+    SkScalar next(SkPath* dst, SkScalar distance, SkPathMeasure&) const SK_OVERRIDE {
         fMaker->setExtraPropertyCallBack(fDraw->fType, GetDistance, &distance);
         SkDrawPath* drawPath = NULL;
         if (fDraw->addPath->isPath()) {
@@ -233,11 +233,11 @@
     Factory getFactory() const SK_OVERRIDE { sk_throw(); return NULL; }
 
 protected:
-    virtual void begin(const SkIRect& uvBounds, SkPath*) const SK_OVERRIDE {
+    void begin(const SkIRect& uvBounds, SkPath*) const SK_OVERRIDE {
         const_cast<SkShape2DPathEffect*>(this)->setUVBounds(uvBounds);
     }
 
-    virtual void next(const SkPoint& loc, int u, int v, SkPath* dst) const SK_OVERRIDE {
+    void next(const SkPoint& loc, int u, int v, SkPath* dst) const SK_OVERRIDE {
         const_cast<SkShape2DPathEffect*>(this)->addPath(loc, u, v, dst);
     }
 
diff --git a/src/animator/SkDrawFull.h b/src/animator/SkDrawFull.h
index 13c204e..029fb33 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& ) SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 private:
     typedef SkBoundable INHERITED;
 };
diff --git a/src/animator/SkDrawGradient.h b/src/animator/SkDrawGradient.h
index 545179b..d6dd144 100644
--- a/src/animator/SkDrawGradient.h
+++ b/src/animator/SkDrawGradient.h
@@ -18,11 +18,11 @@
     DECLARE_PRIVATE_MEMBER_INFO(DrawGradient);
     SkDrawGradient();
     virtual ~SkDrawGradient();
-    virtual bool addChild(SkAnimateMaker& , SkDisplayable* child) SK_OVERRIDE;
+    bool addChild(SkAnimateMaker& , SkDisplayable* child) SK_OVERRIDE;
 #ifdef SK_DUMP_ENABLED
     virtual void dumpRest(SkAnimateMaker*);
 #endif
-    virtual void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
+    void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
 protected:
     SkTDScalarArray offsets;
     SkString unitMapper;
@@ -36,11 +36,11 @@
 class SkDrawLinearGradient : public SkDrawGradient {
     DECLARE_MEMBER_INFO(DrawLinearGradient);
     SkDrawLinearGradient();
-    virtual void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
+    void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker*) SK_OVERRIDE;
+    void dump(SkAnimateMaker*) SK_OVERRIDE;
 #endif
-    virtual SkShader* getShader() SK_OVERRIDE;
+    SkShader* getShader() SK_OVERRIDE;
 protected:
     SkTDScalarArray points;
 private:
@@ -51,9 +51,9 @@
     DECLARE_MEMBER_INFO(DrawRadialGradient);
     SkDrawRadialGradient();
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker*) SK_OVERRIDE;
+    void dump(SkAnimateMaker*) SK_OVERRIDE;
 #endif
-    virtual SkShader* getShader() SK_OVERRIDE;
+    SkShader* getShader() SK_OVERRIDE;
 protected:
     SkPoint center;
     SkScalar radius;
diff --git a/src/animator/SkDrawGroup.h b/src/animator/SkDrawGroup.h
index a6bebf0..5d33dfe 100644
--- a/src/animator/SkDrawGroup.h
+++ b/src/animator/SkDrawGroup.h
@@ -19,25 +19,25 @@
     DECLARE_MEMBER_INFO(Group);
     SkGroup();
     virtual ~SkGroup();
-    virtual bool addChild(SkAnimateMaker& , SkDisplayable* child) SK_OVERRIDE;
-    virtual bool contains(SkDisplayable* ) SK_OVERRIDE;
+    bool addChild(SkAnimateMaker& , SkDisplayable* child) SK_OVERRIDE;
+    bool contains(SkDisplayable* ) SK_OVERRIDE;
     SkGroup* copy();
     SkBool copySet(int index);
-    virtual SkDisplayable* deepCopy(SkAnimateMaker* ) SK_OVERRIDE;
-    virtual bool doEvent(SkDisplayEvent::Kind , SkEventState* state ) SK_OVERRIDE;
-    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
+    SkDisplayable* deepCopy(SkAnimateMaker* ) SK_OVERRIDE;
+    bool doEvent(SkDisplayEvent::Kind , SkEventState* state ) SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
+    void dump(SkAnimateMaker* ) SK_OVERRIDE;
     virtual void dumpDrawables(SkAnimateMaker* );
-    virtual void dumpEvents() SK_OVERRIDE;
+    void dumpEvents() SK_OVERRIDE;
 #endif
     int findGroup(SkADrawable* drawable,  SkTDDrawableArray** list,
         SkGroup** parent, SkGroup** found, SkTDDrawableArray** grandList);
-    virtual bool enable(SkAnimateMaker& ) SK_OVERRIDE;
+    bool enable(SkAnimateMaker& ) SK_OVERRIDE;
     SkTDDrawableArray* getChildren() { return &fChildren; }
     SkGroup* getOriginal() { return fOriginal; }
-    virtual bool hasEnable() const SK_OVERRIDE;
-    virtual void initialize() SK_OVERRIDE;
+    bool hasEnable() const SK_OVERRIDE;
+    void initialize() SK_OVERRIDE;
     SkBool isACopy() { return fOriginal != NULL; }
     void markCopyClear(int index);
     void markCopySet(int index);
@@ -45,9 +45,9 @@
     bool markedForDelete(int index) const { return (fCopies[index >> 5] & 1 << (index & 0x1f)) == 0; }
     void reset();
     bool resolveIDs(SkAnimateMaker& maker, SkDisplayable* original, SkApply* ) SK_OVERRIDE;
-    virtual void setSteps(int steps) SK_OVERRIDE;
+    void setSteps(int steps) SK_OVERRIDE;
 #ifdef SK_DEBUG
-    virtual void validate() SK_OVERRIDE;
+    void validate() SK_OVERRIDE;
 #endif
 protected:
     bool ifCondition(SkAnimateMaker& maker, SkADrawable* drawable,
@@ -64,7 +64,7 @@
 
 class SkSave: public SkGroup {
     DECLARE_MEMBER_INFO(Save);
-    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 private:
     typedef SkGroup INHERITED;
 };
diff --git a/src/animator/SkDrawLine.h b/src/animator/SkDrawLine.h
index 5665433..7367aab 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& ) SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 private:
     SkScalar x1;
     SkScalar x2;
diff --git a/src/animator/SkDrawMatrix.h b/src/animator/SkDrawMatrix.h
index 60eb8e7..d5e19a5 100644
--- a/src/animator/SkDrawMatrix.h
+++ b/src/animator/SkDrawMatrix.h
@@ -21,25 +21,25 @@
     DECLARE_DRAW_MEMBER_INFO(Matrix);
     SkDrawMatrix();
     virtual ~SkDrawMatrix();
-    virtual bool addChild(SkAnimateMaker& , SkDisplayable* child) SK_OVERRIDE;
-    virtual bool childrenNeedDisposing() const SK_OVERRIDE;
-    virtual void dirty() SK_OVERRIDE;
-    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
+    bool addChild(SkAnimateMaker& , SkDisplayable* child) SK_OVERRIDE;
+    bool childrenNeedDisposing() const SK_OVERRIDE;
+    void dirty() SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
+    void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
     SkMatrix& getMatrix();
-    virtual bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
-    virtual void initialize() SK_OVERRIDE;
-    virtual void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
-    virtual void setChildHasID() SK_OVERRIDE;
-    virtual bool setProperty(int index, SkScriptValue& ) SK_OVERRIDE;
+    bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
+    void initialize() SK_OVERRIDE;
+    void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
+    void setChildHasID() SK_OVERRIDE;
+    bool setProperty(int index, SkScriptValue& ) SK_OVERRIDE;
 
     void concat(SkMatrix& inMatrix) {
         fConcat.preConcat(inMatrix);
     }
 
-    virtual SkDisplayable* deepCopy(SkAnimateMaker* ) SK_OVERRIDE;
+    SkDisplayable* deepCopy(SkAnimateMaker* ) SK_OVERRIDE;
 
 
     void rotate(SkScalar degrees, SkPoint& center) {
diff --git a/src/animator/SkDrawOval.h b/src/animator/SkDrawOval.h
index 8035688..03b0270 100644
--- a/src/animator/SkDrawOval.h
+++ b/src/animator/SkDrawOval.h
@@ -14,7 +14,7 @@
 
 class SkOval : public SkDrawRect {
     DECLARE_MEMBER_INFO(Oval);
-    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 private:
     typedef SkDrawRect INHERITED;
 };
diff --git a/src/animator/SkDrawPaint.h b/src/animator/SkDrawPaint.h
index 5ac5a93..e2be340 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* ) SK_OVERRIDE;
-    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
+    SkDisplayable* deepCopy(SkAnimateMaker* ) SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
+    void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
     virtual void executeFunction(SkDisplayable* target, int index,
         SkTDArray<SkScriptValue>& parameters, SkDisplayTypes type,
         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;
+    const SkFunctionParamType* getFunctionsParameters() SK_OVERRIDE;
+    bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
+    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 cce8cd5..d64195b 100644
--- a/src/animator/SkDrawPath.h
+++ b/src/animator/SkDrawPath.h
@@ -19,22 +19,22 @@
     DECLARE_DRAW_MEMBER_INFO(Path);
     SkDrawPath();
     virtual ~SkDrawPath();
-    virtual bool addChild(SkAnimateMaker& , SkDisplayable* child) SK_OVERRIDE;
+    bool addChild(SkAnimateMaker& , SkDisplayable* child) SK_OVERRIDE;
     bool childHasID() { return SkToBool(fChildHasID); }
-    virtual bool childrenNeedDisposing() const SK_OVERRIDE;
-    virtual void dirty() SK_OVERRIDE;
-    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
-    virtual SkDisplayable* getParent() const SK_OVERRIDE;
+    bool childrenNeedDisposing() const SK_OVERRIDE;
+    void dirty() SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
+    SkDisplayable* getParent() const SK_OVERRIDE;
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
+    void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
     SkPath& getPath();
-    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; }
+    bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
+    bool setProperty(int index, SkScriptValue& value) SK_OVERRIDE;
+    void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
+    void setChildHasID() SK_OVERRIDE;
+    bool setParent(SkDisplayable* parent) SK_OVERRIDE;
+    bool isPath() const SK_OVERRIDE { return true; }
 public:
     SkPath fPath;
 protected:
@@ -51,8 +51,8 @@
 
 class SkPolyline : public SkDrawPath {
     DECLARE_MEMBER_INFO(Polyline);
-    virtual bool addChild(SkAnimateMaker& , SkDisplayable*) SK_OVERRIDE;
-    virtual void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
+    bool addChild(SkAnimateMaker& , SkDisplayable*) SK_OVERRIDE;
+    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& ) SK_OVERRIDE;
+    void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
 private:
     typedef SkPolyline INHERITED;
 };
diff --git a/src/animator/SkDrawPoint.h b/src/animator/SkDrawPoint.h
index 69005a1..f2077f8 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* ) SK_OVERRIDE;
+    void getBounds(SkRect* ) SK_OVERRIDE;
 private:
     SkPoint fPoint;
     typedef SkDisplayable INHERITED;
diff --git a/src/animator/SkDrawRectangle.h b/src/animator/SkDrawRectangle.h
index a9fb884..44ed7c4 100644
--- a/src/animator/SkDrawRectangle.h
+++ b/src/animator/SkDrawRectangle.h
@@ -19,15 +19,15 @@
 class SkDrawRect : public SkBoundable {
     DECLARE_DRAW_MEMBER_INFO(Rect);
     SkDrawRect();
-    virtual void dirty() SK_OVERRIDE;
-    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
+    void dirty() SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
+    void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
-    virtual SkDisplayable* getParent() const SK_OVERRIDE;
-    virtual bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
-    virtual bool setParent(SkDisplayable* parent) SK_OVERRIDE;
-    virtual bool setProperty(int index, SkScriptValue& ) SK_OVERRIDE;
+    SkDisplayable* getParent() const SK_OVERRIDE;
+    bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
+    bool setParent(SkDisplayable* parent) SK_OVERRIDE;
+    bool setProperty(int index, SkScriptValue& ) SK_OVERRIDE;
 protected:
     SkRect fRect;
     SkDisplayable* fParent;
@@ -41,9 +41,9 @@
 class SkRoundRect : public SkDrawRect {
     DECLARE_MEMBER_INFO(RoundRect);
     SkRoundRect();
-    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
+    void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
 protected:
     SkScalar rx;
diff --git a/src/animator/SkDrawSaveLayer.h b/src/animator/SkDrawSaveLayer.h
index 50a5a37..1080e81 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& ) SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
+    void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
-    virtual void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
+    void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
 protected:
     SkDrawPaint* paint;
     SkDrawRect* bounds;
diff --git a/src/animator/SkDrawShader.h b/src/animator/SkDrawShader.h
index 43462de..32c8fd5 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() SK_OVERRIDE;
-    virtual SkShader* getShader() SK_OVERRIDE;
+    bool add() SK_OVERRIDE;
+    SkShader* getShader() SK_OVERRIDE;
 protected:
     SkBool filterBitmap;
     SkBaseBitmap* image;
diff --git a/src/animator/SkDrawText.h b/src/animator/SkDrawText.h
index d0fb3be..2630007 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& ) SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
+    void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
-    virtual bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
+    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 4fa0872..4bb3bf2 100644
--- a/src/animator/SkDrawTextBox.h
+++ b/src/animator/SkDrawTextBox.h
@@ -18,12 +18,12 @@
     SkDrawTextBox();
 
     // overrides
-    virtual bool draw(SkAnimateMaker& ) SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
+    void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
-    virtual bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
-    virtual bool setProperty(int index, SkScriptValue& ) SK_OVERRIDE;
+    bool getProperty(int index, SkScriptValue* value) const SK_OVERRIDE;
+    bool setProperty(int index, SkScriptValue& ) SK_OVERRIDE;
 
 private:
     SkString fText;
diff --git a/src/animator/SkDrawTo.h b/src/animator/SkDrawTo.h
index 93f9b49..0c089d6 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& ) SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
+    void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
 protected:
     SkBool drawOnce;
diff --git a/src/animator/SkDrawTransparentShader.h b/src/animator/SkDrawTransparentShader.h
index 58dc123..b6ab7c7 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() SK_OVERRIDE;
+    SkShader* getShader() SK_OVERRIDE;
 };
 
 #endif // SkDrawTransparentShader_DEFINED
diff --git a/src/animator/SkDump.h b/src/animator/SkDump.h
index c2f6d2b..86e9e08 100644
--- a/src/animator/SkDump.h
+++ b/src/animator/SkDump.h
@@ -20,9 +20,9 @@
     DECLARE_MEMBER_INFO(Dump);
 #ifdef SK_DUMP_ENABLED
     SkDump();
-    virtual bool enable(SkAnimateMaker & ) SK_OVERRIDE;
+    bool enable(SkAnimateMaker & ) SK_OVERRIDE;
     bool evaluate(SkAnimateMaker &);
-    virtual bool hasEnable() const SK_OVERRIDE;
+    bool hasEnable() const SK_OVERRIDE;
     static void GetEnumString(SkDisplayTypes , int index, SkString* result);
     SkBool displayList;
     SkBool eventList;
diff --git a/src/animator/SkHitClear.h b/src/animator/SkHitClear.h
index 02b0140..3e09700 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& ) SK_OVERRIDE;
-    virtual bool hasEnable() const SK_OVERRIDE;
+    bool enable(SkAnimateMaker& ) SK_OVERRIDE;
+    bool hasEnable() const SK_OVERRIDE;
 private:
     SkTDDisplayableArray targets;
 };
diff --git a/src/animator/SkHitTest.h b/src/animator/SkHitTest.h
index eb9ea4e..f79dab0 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& ) SK_OVERRIDE;
-    virtual bool enable(SkAnimateMaker& ) SK_OVERRIDE;
-    virtual bool hasEnable() const SK_OVERRIDE;
-    virtual const SkMemberInfo* preferredChild(SkDisplayTypes type) SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
+    bool enable(SkAnimateMaker& ) SK_OVERRIDE;
+    bool hasEnable() const SK_OVERRIDE;
+    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 b0d6fcc..e6a8850 100644
--- a/src/animator/SkMatrixParts.h
+++ b/src/animator/SkMatrixParts.h
@@ -39,7 +39,7 @@
     DECLARE_MEMBER_INFO(Rotate);
     SkRotate();
 protected:
-    virtual bool add() SK_OVERRIDE;
+    bool add() SK_OVERRIDE;
     SkScalar degrees;
     SkPoint center;
 };
@@ -48,7 +48,7 @@
     DECLARE_MEMBER_INFO(Scale);
     SkScale();
 protected:
-    virtual bool add() SK_OVERRIDE;
+    bool add() SK_OVERRIDE;
     SkScalar x;
     SkScalar y;
     SkPoint center;
@@ -58,7 +58,7 @@
     DECLARE_MEMBER_INFO(Skew);
     SkSkew();
 protected:
-    virtual bool add() SK_OVERRIDE;
+    bool add() SK_OVERRIDE;
     SkScalar x;
     SkScalar y;
     SkPoint center;
@@ -68,7 +68,7 @@
     DECLARE_MEMBER_INFO(Translate);
     SkTranslate();
 protected:
-    virtual bool add() SK_OVERRIDE;
+    bool add() SK_OVERRIDE;
     SkScalar x;
     SkScalar y;
 };
@@ -78,7 +78,7 @@
     SkFromPath();
     virtual ~SkFromPath();
 protected:
-    virtual bool add() SK_OVERRIDE;
+    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* ) SK_OVERRIDE;
+    void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
-    virtual const SkMemberInfo* preferredChild(SkDisplayTypes type) SK_OVERRIDE;
+    const SkMemberInfo* preferredChild(SkDisplayTypes type) SK_OVERRIDE;
 protected:
-    virtual bool add() SK_OVERRIDE;
+    bool add() SK_OVERRIDE;
     SkDrawRect* source;
     SkDrawRect* destination;
 };
@@ -104,12 +104,12 @@
     SkPolyToPoly();
     virtual ~SkPolyToPoly();
 #ifdef SK_DUMP_ENABLED
-    virtual void dump(SkAnimateMaker* ) SK_OVERRIDE;
+    void dump(SkAnimateMaker* ) SK_OVERRIDE;
 #endif
-    virtual void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
-    virtual const SkMemberInfo* preferredChild(SkDisplayTypes type) SK_OVERRIDE;
+    void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
+    const SkMemberInfo* preferredChild(SkDisplayTypes type) SK_OVERRIDE;
 protected:
-    virtual bool add() SK_OVERRIDE;
+    bool add() SK_OVERRIDE;
     SkPolygon* source;
     SkPolygon* destination;
 };
diff --git a/src/animator/SkMemberInfo.h b/src/animator/SkMemberInfo.h
index cf4b0a8..c0d9e20 100644
--- a/src/animator/SkMemberInfo.h
+++ b/src/animator/SkMemberInfo.h
@@ -150,49 +150,49 @@
 public: \
     static const SkMemberInfo fInfo[]; \
     static const int fInfoCount; \
-    virtual const SkMemberInfo* getMember(int index) SK_OVERRIDE; \
-    virtual const SkMemberInfo* getMember(const char name[]) SK_OVERRIDE; \
+    const SkMemberInfo* getMember(int index) SK_OVERRIDE; \
+    const SkMemberInfo* getMember(const char name[]) SK_OVERRIDE; \
     typedef Sk##_type BASE_CLASS
 
 #define DECLARE_MEMBER_INFO(_type) \
 public: \
     static const SkMemberInfo fInfo[]; \
     static const int fInfoCount; \
-    virtual const SkMemberInfo* getMember(int index) SK_OVERRIDE; \
-    virtual const SkMemberInfo* getMember(const char name[]) SK_OVERRIDE; \
-    virtual SkDisplayTypes getType() const SK_OVERRIDE { return SkType_##_type; } \
+    const SkMemberInfo* getMember(int index) SK_OVERRIDE; \
+    const SkMemberInfo* getMember(const char name[]) SK_OVERRIDE; \
+    SkDisplayTypes getType() const SK_OVERRIDE { return SkType_##_type; } \
     typedef Sk##_type BASE_CLASS
 
 #define DECLARE_DRAW_MEMBER_INFO(_type) \
 public: \
     static const SkMemberInfo fInfo[]; \
     static const int fInfoCount; \
-    virtual const SkMemberInfo* getMember(int index) SK_OVERRIDE; \
-    virtual const SkMemberInfo* getMember(const char name[]) SK_OVERRIDE; \
-    virtual SkDisplayTypes getType() const SK_OVERRIDE { return SkType_##_type; } \
+    const SkMemberInfo* getMember(int index) SK_OVERRIDE; \
+    const SkMemberInfo* getMember(const char name[]) SK_OVERRIDE; \
+    SkDisplayTypes getType() const SK_OVERRIDE { return SkType_##_type; } \
     typedef SkDraw##_type BASE_CLASS
 
 #define DECLARE_DISPLAY_MEMBER_INFO(_type) \
 public: \
     static const SkMemberInfo fInfo[]; \
     static const int fInfoCount; \
-    virtual const SkMemberInfo* getMember(int index) SK_OVERRIDE; \
-    virtual const SkMemberInfo* getMember(const char name[]) SK_OVERRIDE; \
-    virtual SkDisplayTypes getType() const SK_OVERRIDE { return SkType_##_type; } \
+    const SkMemberInfo* getMember(int index) SK_OVERRIDE; \
+    const SkMemberInfo* getMember(const char name[]) SK_OVERRIDE; \
+    SkDisplayTypes getType() const SK_OVERRIDE { return SkType_##_type; } \
     typedef SkDisplay##_type BASE_CLASS
 
 #define DECLARE_EMPTY_MEMBER_INFO(_type) \
 public: \
-    virtual SkDisplayTypes getType() const SK_OVERRIDE { return SkType_##_type; }
+    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) SK_OVERRIDE; \
-    virtual const SkMemberInfo* getMember(const char name[]) SK_OVERRIDE; \
+    const SkMemberInfo* getMember(int index) SK_OVERRIDE; \
+    const SkMemberInfo* getMember(const char name[]) SK_OVERRIDE; \
     SkDisplayTypes fType; \
-    virtual SkDisplayTypes getType() const SK_OVERRIDE { return fType; } \
+    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 1f5d4eb..a285a1c 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() SK_OVERRIDE;
+    bool add() SK_OVERRIDE;
 };
 
 class SkDrawPathEffect : public SkPaintPart {
     DECLARE_EMPTY_MEMBER_INFO(PathEffect);
     virtual SkPathEffect* getPathEffect();
 protected:
-    virtual bool add() SK_OVERRIDE;
+    bool add() SK_OVERRIDE;
 };
 
 class SkDrawShader : public SkPaintPart {
@@ -50,7 +50,7 @@
     SkDrawShader();
     virtual SkShader* getShader();
 protected:
-    virtual bool add() SK_OVERRIDE;
+    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 *) SK_OVERRIDE;
+    void dump(SkAnimateMaker *) SK_OVERRIDE;
 #endif
     SkTypeface* getTypeface() {
         return SkTypeface::CreateFromName(fontName.c_str(), style); }
 protected:
-    virtual bool add() SK_OVERRIDE;
+    bool add() SK_OVERRIDE;
     SkString fontName;
     SkTypeface::Style style;
 };
diff --git a/src/animator/SkPathParts.h b/src/animator/SkPathParts.h
index 67a8853..6aad1ba 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() SK_OVERRIDE;
+    bool add() SK_OVERRIDE;
 protected:
     SkScalar x;
     SkScalar y;
@@ -42,7 +42,7 @@
 
 class SkRMoveTo : public SkMoveTo {
     DECLARE_MEMBER_INFO(RMoveTo);
-    virtual bool add() SK_OVERRIDE;
+    bool add() SK_OVERRIDE;
 private:
     typedef SkMoveTo INHERITED;
 };
@@ -50,7 +50,7 @@
 class SkLineTo : public SkPathPart {
     DECLARE_MEMBER_INFO(LineTo);
     SkLineTo();
-    virtual bool add() SK_OVERRIDE;
+    bool add() SK_OVERRIDE;
 protected:
     SkScalar x;
     SkScalar y;
@@ -58,7 +58,7 @@
 
 class SkRLineTo : public SkLineTo {
     DECLARE_MEMBER_INFO(RLineTo);
-    virtual bool add() SK_OVERRIDE;
+    bool add() SK_OVERRIDE;
 private:
     typedef SkLineTo INHERITED;
 };
@@ -66,7 +66,7 @@
 class SkQuadTo : public SkPathPart {
     DECLARE_MEMBER_INFO(QuadTo);
     SkQuadTo();
-    virtual bool add() SK_OVERRIDE;
+    bool add() SK_OVERRIDE;
 protected:
     SkScalar x1;
     SkScalar y1;
@@ -76,7 +76,7 @@
 
 class SkRQuadTo : public SkQuadTo {
     DECLARE_MEMBER_INFO(RQuadTo);
-    virtual bool add() SK_OVERRIDE;
+    bool add() SK_OVERRIDE;
 private:
     typedef SkQuadTo INHERITED;
 };
@@ -84,7 +84,7 @@
 class SkCubicTo : public SkPathPart {
     DECLARE_MEMBER_INFO(CubicTo);
     SkCubicTo();
-    virtual bool add() SK_OVERRIDE;
+    bool add() SK_OVERRIDE;
 protected:
     SkScalar x1;
     SkScalar y1;
@@ -96,14 +96,14 @@
 
 class SkRCubicTo : public SkCubicTo {
     DECLARE_MEMBER_INFO(RCubicTo);
-    virtual bool add() SK_OVERRIDE;
+    bool add() SK_OVERRIDE;
 private:
     typedef SkCubicTo INHERITED;
 };
 
 class SkClose : public SkPathPart {
     DECLARE_EMPTY_MEMBER_INFO(Close);
-    virtual bool add() SK_OVERRIDE;
+    bool add() SK_OVERRIDE;
 };
 
 class SkAddGeom : public SkPathPart {
@@ -116,7 +116,7 @@
 class SkAddRect : public SkAddGeom {
     DECLARE_MEMBER_INFO(AddRect);
     SkAddRect();
-    virtual bool add() SK_OVERRIDE;
+    bool add() SK_OVERRIDE;
 protected:
     SkRect fRect;
 private:
@@ -125,7 +125,7 @@
 
 class SkAddOval : public SkAddRect {
     DECLARE_MEMBER_INFO(AddOval);
-    virtual bool add() SK_OVERRIDE;
+    bool add() SK_OVERRIDE;
 private:
     typedef SkAddRect INHERITED;
 };
@@ -133,7 +133,7 @@
 class SkAddCircle : public SkAddGeom {
     DECLARE_MEMBER_INFO(AddCircle);
     SkAddCircle();
-    virtual bool add() SK_OVERRIDE;
+    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() SK_OVERRIDE;
+    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() SK_OVERRIDE;
+    bool add() SK_OVERRIDE;
 private:
     typedef SkPathPart INHERITED;
     SkDrawMatrix* matrix;
diff --git a/src/animator/SkPostParts.h b/src/animator/SkPostParts.h
index 7c13258..f48c33f 100644
--- a/src/animator/SkPostParts.h
+++ b/src/animator/SkPostParts.h
@@ -18,10 +18,10 @@
     DECLARE_MEMBER_INFO(DataInput);
     SkDataInput();
     bool add();
-    virtual void dirty() SK_OVERRIDE;
-    virtual SkDisplayable* getParent() const SK_OVERRIDE;
-    virtual void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
-    virtual bool setParent(SkDisplayable* ) SK_OVERRIDE;
+    void dirty() SK_OVERRIDE;
+    SkDisplayable* getParent() const SK_OVERRIDE;
+    void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
+    bool setParent(SkDisplayable* ) SK_OVERRIDE;
 protected:
     SkPost* fParent;
     typedef SkInput INHERITED;
diff --git a/src/animator/SkSnapshot.h b/src/animator/SkSnapshot.h
index 43f16692..e3b36d1 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& ) SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
     private:
     SkString filename;
     SkScalar quality;
diff --git a/src/animator/SkTextOnPath.h b/src/animator/SkTextOnPath.h
index 9c55284..fb1f6f2 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& ) SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
 private:
     SkScalar offset;
     SkDrawPath* path;
diff --git a/src/animator/SkTextToPath.h b/src/animator/SkTextToPath.h
index 01c6601..2be67ad 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& ) SK_OVERRIDE;
-    virtual void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
+    bool draw(SkAnimateMaker& ) SK_OVERRIDE;
+    void onEndElement(SkAnimateMaker& ) SK_OVERRIDE;
 private:
     SkDrawPaint* paint;
     SkDrawPath* path;
diff --git a/src/core/SkAAClip.cpp b/src/core/SkAAClip.cpp
index e2c1b12..45e6cc3 100644
--- a/src/core/SkAAClip.cpp
+++ b/src/core/SkAAClip.cpp
@@ -1273,13 +1273,13 @@
        Instead we'll rely on the runtime asserts to guarantee Y monotonicity;
        any failure cases that misses may have minor artifacts.
     */
-    virtual void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE {
+    void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE {
         this->recordMinY(y);
         fBuilder->addColumn(x, y, alpha, height);
         fLastY = y + height - 1;
     }
 
-    virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE {
+    void blitRect(int x, int y, int width, int height) SK_OVERRIDE {
         this->recordMinY(y);
         this->checkForYGap(y);
         fBuilder->addRectRun(x, y, width, height);
@@ -1294,14 +1294,14 @@
         fLastY = y + height - 1;
     }
 
-    virtual void blitMask(const SkMask&, const SkIRect& clip) SK_OVERRIDE
+    void blitMask(const SkMask&, const SkIRect& clip) SK_OVERRIDE
         { unexpected(); }
 
-    virtual const SkBitmap* justAnOpaqueColor(uint32_t*) SK_OVERRIDE {
+    const SkBitmap* justAnOpaqueColor(uint32_t*) SK_OVERRIDE {
         return NULL;
     }
 
-    virtual void blitH(int x, int y, int width) SK_OVERRIDE {
+    void blitH(int x, int y, int width) SK_OVERRIDE {
         this->recordMinY(y);
         this->checkForYGap(y);
         fBuilder->addRun(x, y, 0xFF, width);
diff --git a/src/core/SkAAClip.h b/src/core/SkAAClip.h
index 45cc549..67f45e4 100644
--- a/src/core/SkAAClip.h
+++ b/src/core/SkAAClip.h
@@ -109,13 +109,13 @@
         fAAClipBounds = aaclip->getBounds();
     }
 
-    virtual void blitH(int x, int y, int width) SK_OVERRIDE;
+    void blitH(int x, int y, int width) SK_OVERRIDE;
     virtual void blitAntiH(int x, int y, const SkAlpha[],
                            const int16_t runs[]) SK_OVERRIDE;
-    virtual void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE;
-    virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE;
-    virtual void blitMask(const SkMask&, const SkIRect& clip) SK_OVERRIDE;
-    virtual const SkBitmap* justAnOpaqueColor(uint32_t* value) SK_OVERRIDE;
+    void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE;
+    void blitRect(int x, int y, int width, int height) SK_OVERRIDE;
+    void blitMask(const SkMask&, const SkIRect& clip) SK_OVERRIDE;
+    const SkBitmap* justAnOpaqueColor(uint32_t* value) SK_OVERRIDE;
 
 private:
     SkBlitter*      fBlitter;
diff --git a/src/core/SkBitmapCache.cpp b/src/core/SkBitmapCache.cpp
index 193a5ae..3af5822 100644
--- a/src/core/SkBitmapCache.cpp
+++ b/src/core/SkBitmapCache.cpp
@@ -61,8 +61,8 @@
     BitmapKey   fKey;
     SkBitmap    fBitmap;
 
-    virtual const Key& getKey() const SK_OVERRIDE { return fKey; }
-    virtual size_t bytesUsed() const SK_OVERRIDE { return sizeof(fKey) + fBitmap.getSize(); }
+    const Key& getKey() const SK_OVERRIDE { return fKey; }
+    size_t bytesUsed() const SK_OVERRIDE { return sizeof(fKey) + fBitmap.getSize(); }
 
     static bool Visitor(const SkResourceCache::Rec& baseRec, void* contextBitmap) {
         const BitmapRec& rec = static_cast<const BitmapRec&>(baseRec);
@@ -139,8 +139,8 @@
         fMipMap->detachFromCacheAndUnref();
     }
 
-    virtual const Key& getKey() const SK_OVERRIDE { return fKey; }
-    virtual size_t bytesUsed() const SK_OVERRIDE { return sizeof(fKey) + fMipMap->size(); }
+    const Key& getKey() const SK_OVERRIDE { return fKey; }
+    size_t bytesUsed() const SK_OVERRIDE { return sizeof(fKey) + fMipMap->size(); }
 
     static bool Visitor(const SkResourceCache::Rec& baseRec, void* contextMip) {
         const MipMapRec& rec = static_cast<const MipMapRec&>(baseRec);
diff --git a/src/core/SkBitmapFilter.h b/src/core/SkBitmapFilter.h
index 8ef0f6e..139e990 100644
--- a/src/core/SkBitmapFilter.h
+++ b/src/core/SkBitmapFilter.h
@@ -79,7 +79,7 @@
       : SkBitmapFilter(width), B(b), C(c) {
       }
 
-      virtual float evaluate(float x) const SK_OVERRIDE {
+      float evaluate(float x) const SK_OVERRIDE {
           x = fabsf(x);
           if (x > 2.f) {
               return 0;
@@ -102,7 +102,7 @@
       : SkBitmapFilter(width), alpha(a), expWidth(expf(-alpha * width * width)) {
       }
 
-      virtual float evaluate(float x) const SK_OVERRIDE {
+      float evaluate(float x) const SK_OVERRIDE {
           return SkTMax(0.f, float(expf(-alpha*x*x) - expWidth));
       }
   protected:
@@ -115,7 +115,7 @@
       : SkBitmapFilter(width) {
       }
 
-      virtual float evaluate(float x) const SK_OVERRIDE {
+      float evaluate(float x) const SK_OVERRIDE {
           return SkTMax(0.f, fWidth - fabsf(x));
       }
   protected:
@@ -127,7 +127,7 @@
       : SkBitmapFilter(width) {
       }
 
-      virtual float evaluate(float x) const SK_OVERRIDE {
+      float evaluate(float x) const SK_OVERRIDE {
           return (x >= -fWidth && x < fWidth) ? 1.0f : 0.0f;
       }
   protected:
@@ -138,7 +138,7 @@
     SkHammingFilter(float width=1.f)
     : SkBitmapFilter(width) {
     }
-    virtual float evaluate(float x) const SK_OVERRIDE {
+    float evaluate(float x) const SK_OVERRIDE {
         if (x <= -fWidth || x >= fWidth) {
             return 0.0f;  // Outside of the window.
         }
@@ -158,7 +158,7 @@
       : SkBitmapFilter(width) {
       }
 
-      virtual float evaluate(float x) const SK_OVERRIDE {
+      float evaluate(float x) const SK_OVERRIDE {
           if (x <= -fWidth || x >= fWidth) {
               return 0.0f;  // Outside of the window.
           }
diff --git a/src/core/SkBitmapHeap.h b/src/core/SkBitmapHeap.h
index 148ae13..95e2724 100644
--- a/src/core/SkBitmapHeap.h
+++ b/src/core/SkBitmapHeap.h
@@ -117,7 +117,7 @@
      *
      * @return  The bitmap located at that slot or NULL if external storage is being used.
      */
-    virtual SkBitmap* getBitmap(int32_t slot) const SK_OVERRIDE {
+    SkBitmap* getBitmap(int32_t slot) const SK_OVERRIDE {
         SkASSERT(fExternalStorage == NULL);
         SkBitmapHeapEntry* entry = getEntry(slot);
         if (entry) {
@@ -131,7 +131,7 @@
      *
      * @return  The bitmap located at that slot or NULL if external storage is being used.
      */
-    virtual void releaseRef(int32_t slot) SK_OVERRIDE {
+    void releaseRef(int32_t slot) SK_OVERRIDE {
         SkASSERT(fExternalStorage == NULL);
         if (fOwnerCount != IGNORE_OWNERS) {
             SkBitmapHeapEntry* entry = getEntry(slot);
diff --git a/src/core/SkBitmapProcShader.h b/src/core/SkBitmapProcShader.h
index ab00c11..f73d56f 100644
--- a/src/core/SkBitmapProcShader.h
+++ b/src/core/SkBitmapProcShader.h
@@ -20,10 +20,10 @@
                        const SkMatrix* localMatrix = NULL);
 
     // overrides from SkShader
-    virtual bool isOpaque() const SK_OVERRIDE;
-    virtual BitmapType asABitmap(SkBitmap*, SkMatrix*, TileMode*) const SK_OVERRIDE;
+    bool isOpaque() const SK_OVERRIDE;
+    BitmapType asABitmap(SkBitmap*, SkMatrix*, TileMode*) const SK_OVERRIDE;
 
-    virtual size_t contextSize() const SK_OVERRIDE;
+    size_t contextSize() const SK_OVERRIDE;
 
     static bool CanDo(const SkBitmap&, TileMode tx, TileMode ty);
 
@@ -41,11 +41,11 @@
         BitmapProcShaderContext(const SkBitmapProcShader&, const ContextRec&, SkBitmapProcState*);
         virtual ~BitmapProcShaderContext();
 
-        virtual void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE;
-        virtual ShadeProc asAShadeProc(void** ctx) SK_OVERRIDE;
-        virtual void shadeSpan16(int x, int y, uint16_t dstC[], int count) SK_OVERRIDE;
+        void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE;
+        ShadeProc asAShadeProc(void** ctx) SK_OVERRIDE;
+        void shadeSpan16(int x, int y, uint16_t dstC[], int count) SK_OVERRIDE;
 
-        virtual uint32_t getFlags() const SK_OVERRIDE { return fFlags; }
+        uint32_t getFlags() const SK_OVERRIDE { return fFlags; }
 
     private:
         SkBitmapProcState*  fState;
@@ -55,8 +55,8 @@
     };
 
 protected:
-    virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
-    virtual Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE;
+    void flatten(SkWriteBuffer&) const SK_OVERRIDE;
+    Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE;
 
     SkBitmap    fRawBitmap;   // experimental for RLE encoding
     uint8_t     fTileModeX, fTileModeY;
diff --git a/src/core/SkBlitter.cpp b/src/core/SkBlitter.cpp
index 5bb7ac8..a5d2b05 100644
--- a/src/core/SkBlitter.cpp
+++ b/src/core/SkBlitter.cpp
@@ -580,7 +580,7 @@
         SkSafeUnref(fProxy);
     }
 
-    virtual size_t contextSize() const SK_OVERRIDE {
+    size_t contextSize() const SK_OVERRIDE {
         size_t size = sizeof(Sk3DShaderContext);
         if (fProxy) {
             size += fProxy->contextSize();
@@ -588,7 +588,7 @@
         return size;
     }
 
-    virtual Context* onCreateContext(const ContextRec& rec, void* storage) const SK_OVERRIDE {
+    Context* onCreateContext(const ContextRec& rec, void* storage) const SK_OVERRIDE {
         SkShader::Context* proxyContext = NULL;
         if (fProxy) {
             char* proxyContextStorage = (char*) storage + sizeof(Sk3DShaderContext);
@@ -620,9 +620,9 @@
             }
         }
 
-        virtual void set3DMask(const SkMask* mask) SK_OVERRIDE { fMask = mask; }
+        void set3DMask(const SkMask* mask) SK_OVERRIDE { fMask = mask; }
 
-        virtual void shadeSpan(int x, int y, SkPMColor span[], int count) SK_OVERRIDE {
+        void shadeSpan(int x, int y, SkPMColor span[], int count) SK_OVERRIDE {
             if (fProxyContext) {
                 fProxyContext->shadeSpan(x, y, span, count);
             }
@@ -697,7 +697,7 @@
     };
 
 #ifndef SK_IGNORE_TO_STRING
-    virtual void toString(SkString* str) const SK_OVERRIDE {
+    void toString(SkString* str) const SK_OVERRIDE {
         str->append("Sk3DShader: (");
 
         if (fProxy) {
@@ -714,7 +714,7 @@
     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(Sk3DShader)
 
 protected:
-    virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE {
+    void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE {
         buffer.writeFlattenable(fProxy);
     }
 
@@ -736,7 +736,7 @@
         , fShaderContext(shaderContext)
     {}
 
-    virtual void blitH(int x, int y, int width) SK_OVERRIDE {
+    void blitH(int x, int y, int width) SK_OVERRIDE {
         fProxy->blitH(x, y, width);
     }
 
@@ -745,15 +745,15 @@
         fProxy->blitAntiH(x, y, antialias, runs);
     }
 
-    virtual void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE {
+    void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE {
         fProxy->blitV(x, y, height, alpha);
     }
 
-    virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE {
+    void blitRect(int x, int y, int width, int height) SK_OVERRIDE {
         fProxy->blitRect(x, y, width, height);
     }
 
-    virtual void blitMask(const SkMask& mask, const SkIRect& clip) SK_OVERRIDE {
+    void blitMask(const SkMask& mask, const SkIRect& clip) SK_OVERRIDE {
         if (mask.fFormat == SkMask::k3D_Format) {
             fShaderContext->set3DMask(&mask);
 
@@ -991,7 +991,7 @@
         // Override rec with the identity matrix, so it is guaranteed to be invertible.
         : INHERITED(shader, SkShader::ContextRec(*rec.fDevice, *rec.fPaint, SkMatrix::I())) {}
 
-    virtual void shadeSpan(int x, int y, SkPMColor colors[], int count) SK_OVERRIDE {
+    void shadeSpan(int x, int y, SkPMColor colors[], int count) SK_OVERRIDE {
         sk_bzero(colors, count * sizeof(SkPMColor));
     }
 
diff --git a/src/core/SkBlitter.h b/src/core/SkBlitter.h
index e0e77cc..b0745c8 100644
--- a/src/core/SkBlitter.h
+++ b/src/core/SkBlitter.h
@@ -119,14 +119,14 @@
 */
 class SkNullBlitter : public SkBlitter {
 public:
-    virtual void blitH(int x, int y, int width) SK_OVERRIDE;
+    void blitH(int x, int y, int width) SK_OVERRIDE;
     virtual void blitAntiH(int x, int y, const SkAlpha[],
                            const int16_t runs[]) SK_OVERRIDE;
-    virtual void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE;
-    virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE;
-    virtual void blitMask(const SkMask&, const SkIRect& clip) SK_OVERRIDE;
-    virtual const SkBitmap* justAnOpaqueColor(uint32_t* value) SK_OVERRIDE;
-    virtual bool isNullBlitter() const SK_OVERRIDE;
+    void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE;
+    void blitRect(int x, int y, int width, int height) SK_OVERRIDE;
+    void blitMask(const SkMask&, const SkIRect& clip) SK_OVERRIDE;
+    const SkBitmap* justAnOpaqueColor(uint32_t* value) SK_OVERRIDE;
+    bool isNullBlitter() const SK_OVERRIDE;
 };
 
 /** Wraps another (real) blitter, and ensures that the real blitter is only
@@ -141,21 +141,21 @@
         fClipRect = clipRect;
     }
 
-    virtual void blitH(int x, int y, int width) SK_OVERRIDE;
+    void blitH(int x, int y, int width) SK_OVERRIDE;
     virtual void blitAntiH(int x, int y, const SkAlpha[],
                            const int16_t runs[]) SK_OVERRIDE;
-    virtual void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE;
-    virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE;
+    void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE;
+    void blitRect(int x, int y, int width, int height) SK_OVERRIDE;
     virtual void blitAntiRect(int x, int y, int width, int height,
                      SkAlpha leftAlpha, SkAlpha rightAlpha) SK_OVERRIDE;
-    virtual void blitMask(const SkMask&, const SkIRect& clip) SK_OVERRIDE;
-    virtual const SkBitmap* justAnOpaqueColor(uint32_t* value) SK_OVERRIDE;
+    void blitMask(const SkMask&, const SkIRect& clip) SK_OVERRIDE;
+    const SkBitmap* justAnOpaqueColor(uint32_t* value) SK_OVERRIDE;
 
-    virtual int requestRowsPreserved() const SK_OVERRIDE {
+    int requestRowsPreserved() const SK_OVERRIDE {
         return fBlitter->requestRowsPreserved();
     }
 
-    virtual void* allocBlitMemory(size_t sz) SK_OVERRIDE {
+    void* allocBlitMemory(size_t sz) SK_OVERRIDE {
         return fBlitter->allocBlitMemory(sz);
     }
 
@@ -176,21 +176,21 @@
         fRgn = clipRgn;
     }
 
-    virtual void blitH(int x, int y, int width) SK_OVERRIDE;
+    void blitH(int x, int y, int width) SK_OVERRIDE;
     virtual void blitAntiH(int x, int y, const SkAlpha[],
                            const int16_t runs[]) SK_OVERRIDE;
-    virtual void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE;
-    virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE;
+    void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE;
+    void blitRect(int x, int y, int width, int height) SK_OVERRIDE;
     virtual void blitAntiRect(int x, int y, int width, int height,
                      SkAlpha leftAlpha, SkAlpha rightAlpha) SK_OVERRIDE;
-    virtual void blitMask(const SkMask&, const SkIRect& clip) SK_OVERRIDE;
-    virtual const SkBitmap* justAnOpaqueColor(uint32_t* value) SK_OVERRIDE;
+    void blitMask(const SkMask&, const SkIRect& clip) SK_OVERRIDE;
+    const SkBitmap* justAnOpaqueColor(uint32_t* value) SK_OVERRIDE;
 
-    virtual int requestRowsPreserved() const SK_OVERRIDE {
+    int requestRowsPreserved() const SK_OVERRIDE {
         return fBlitter->requestRowsPreserved();
     }
 
-    virtual void* allocBlitMemory(size_t sz) SK_OVERRIDE {
+    void* allocBlitMemory(size_t sz) SK_OVERRIDE {
         return fBlitter->allocBlitMemory(sz);
     }
 
diff --git a/src/core/SkBlitter_RGB16.cpp b/src/core/SkBlitter_RGB16.cpp
index f8d663f..7c30fb1 100644
--- a/src/core/SkBlitter_RGB16.cpp
+++ b/src/core/SkBlitter_RGB16.cpp
@@ -59,14 +59,14 @@
 class SkRGB16_Blitter : public SkRasterBlitter {
 public:
     SkRGB16_Blitter(const SkBitmap& device, const SkPaint& paint);
-    virtual void blitH(int x, int y, int width) SK_OVERRIDE;
+    void blitH(int x, int y, int width) SK_OVERRIDE;
     virtual void blitAntiH(int x, int y, const SkAlpha* antialias,
                            const int16_t* runs) SK_OVERRIDE;
-    virtual void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE;
-    virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE;
+    void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE;
+    void blitRect(int x, int y, int width, int height) SK_OVERRIDE;
     virtual void blitMask(const SkMask&,
                           const SkIRect&) SK_OVERRIDE;
-    virtual const SkBitmap* justAnOpaqueColor(uint32_t*) SK_OVERRIDE;
+    const SkBitmap* justAnOpaqueColor(uint32_t*) SK_OVERRIDE;
 
 protected:
     SkPMColor   fSrcColor32;
@@ -86,11 +86,11 @@
 class SkRGB16_Opaque_Blitter : public SkRGB16_Blitter {
 public:
     SkRGB16_Opaque_Blitter(const SkBitmap& device, const SkPaint& paint);
-    virtual void blitH(int x, int y, int width) SK_OVERRIDE;
+    void blitH(int x, int y, int width) SK_OVERRIDE;
     virtual void blitAntiH(int x, int y, const SkAlpha* antialias,
                            const int16_t* runs) SK_OVERRIDE;
-    virtual void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE;
-    virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE;
+    void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE;
+    void blitRect(int x, int y, int width, int height) SK_OVERRIDE;
     virtual void blitMask(const SkMask&,
                           const SkIRect&) SK_OVERRIDE;
 
@@ -102,7 +102,7 @@
 class SkRGB16_Black_Blitter : public SkRGB16_Opaque_Blitter {
 public:
     SkRGB16_Black_Blitter(const SkBitmap& device, const SkPaint& paint);
-    virtual void blitMask(const SkMask&, const SkIRect&) SK_OVERRIDE;
+    void blitMask(const SkMask&, const SkIRect&) SK_OVERRIDE;
     virtual void blitAntiH(int x, int y, const SkAlpha* antialias,
                            const int16_t* runs) SK_OVERRIDE;
 
@@ -116,10 +116,10 @@
     SkRGB16_Shader_Blitter(const SkBitmap& device, const SkPaint& paint,
                            SkShader::Context* shaderContext);
     virtual ~SkRGB16_Shader_Blitter();
-    virtual void blitH(int x, int y, int width) SK_OVERRIDE;
+    void blitH(int x, int y, int width) SK_OVERRIDE;
     virtual void blitAntiH(int x, int y, const SkAlpha* antialias,
                            const int16_t* runs) SK_OVERRIDE;
-    virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE;
+    void blitRect(int x, int y, int width, int height) SK_OVERRIDE;
 
 protected:
     SkPMColor*      fBuffer;
@@ -138,10 +138,10 @@
 public:
     SkRGB16_Shader16_Blitter(const SkBitmap& device, const SkPaint& paint,
                              SkShader::Context* shaderContext);
-    virtual void blitH(int x, int y, int width) SK_OVERRIDE;
+    void blitH(int x, int y, int width) SK_OVERRIDE;
     virtual void blitAntiH(int x, int y, const SkAlpha* antialias,
                            const int16_t* runs) SK_OVERRIDE;
-    virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE;
+    void blitRect(int x, int y, int width, int height) SK_OVERRIDE;
 
 private:
     typedef SkRGB16_Shader_Blitter INHERITED;
@@ -152,7 +152,7 @@
     SkRGB16_Shader_Xfermode_Blitter(const SkBitmap& device, const SkPaint& paint,
                                     SkShader::Context* shaderContext);
     virtual ~SkRGB16_Shader_Xfermode_Blitter();
-    virtual void blitH(int x, int y, int width) SK_OVERRIDE;
+    void blitH(int x, int y, int width) SK_OVERRIDE;
     virtual void blitAntiH(int x, int y, const SkAlpha* antialias,
                            const int16_t* runs) SK_OVERRIDE;
 
diff --git a/src/core/SkBuffer.h b/src/core/SkBuffer.h
index 9791cf5..96e225b 100644
--- a/src/core/SkBuffer.h
+++ b/src/core/SkBuffer.h
@@ -105,7 +105,7 @@
         null and the number of bytes to read does not overflow this object's data,
         copy those bytes into buffer.
     */
-    virtual bool read(void* buffer, size_t size) SK_OVERRIDE;
+    bool read(void* buffer, size_t size) SK_OVERRIDE;
 
     /** Returns whether or not a read operation attempted to read past the end of the data.
     */
diff --git a/src/core/SkColorShader.h b/src/core/SkColorShader.h
index e024718..9fbd5e1 100644
--- a/src/core/SkColorShader.h
+++ b/src/core/SkColorShader.h
@@ -23,9 +23,9 @@
     */
     explicit SkColorShader(SkColor c);
 
-    virtual bool isOpaque() const SK_OVERRIDE;
+    bool isOpaque() const SK_OVERRIDE;
 
-    virtual size_t contextSize() const SK_OVERRIDE {
+    size_t contextSize() const SK_OVERRIDE {
         return sizeof(ColorShaderContext);
     }
 
@@ -33,11 +33,11 @@
     public:
         ColorShaderContext(const SkColorShader& shader, const ContextRec&);
 
-        virtual uint32_t getFlags() const SK_OVERRIDE;
-        virtual uint8_t getSpan16Alpha() const SK_OVERRIDE;
-        virtual void shadeSpan(int x, int y, SkPMColor span[], int count) SK_OVERRIDE;
-        virtual void shadeSpan16(int x, int y, uint16_t span[], int count) SK_OVERRIDE;
-        virtual void shadeSpanAlpha(int x, int y, uint8_t alpha[], int count) SK_OVERRIDE;
+        uint32_t getFlags() const SK_OVERRIDE;
+        uint8_t getSpan16Alpha() const SK_OVERRIDE;
+        void shadeSpan(int x, int y, SkPMColor span[], int count) SK_OVERRIDE;
+        void shadeSpan16(int x, int y, uint16_t span[], int count) SK_OVERRIDE;
+        void shadeSpanAlpha(int x, int y, uint8_t alpha[], int count) SK_OVERRIDE;
 
     private:
         SkPMColor   fPMColor;
@@ -52,7 +52,7 @@
                                  SkMatrix* outMatrix,
                                  TileMode xy[2]) const SK_OVERRIDE;
 
-    virtual GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE;
+    GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE;
 
     virtual bool asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix& viewM,
                                      const SkMatrix*, GrColor*,
@@ -63,9 +63,9 @@
 
 protected:
     SkColorShader(SkReadBuffer&);
-    virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
-    virtual Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE;
-    virtual bool onAsLuminanceColor(SkColor* lum) const SK_OVERRIDE {
+    void flatten(SkWriteBuffer&) const SK_OVERRIDE;
+    Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE;
+    bool onAsLuminanceColor(SkColor* lum) const SK_OVERRIDE {
         *lum = fColor;
         return true;
     }
diff --git a/src/core/SkCoreBlitters.h b/src/core/SkCoreBlitters.h
index 20f9437..60211c9 100644
--- a/src/core/SkCoreBlitters.h
+++ b/src/core/SkCoreBlitters.h
@@ -41,9 +41,9 @@
       *  Will create the context at the same location as the old one (this is safe
       *  because the shader itself is unchanged).
       */
-    virtual bool resetShaderContext(const SkShader::ContextRec&) SK_OVERRIDE;
+    bool resetShaderContext(const SkShader::ContextRec&) SK_OVERRIDE;
 
-    virtual SkShader::Context* getShaderContext() const SK_OVERRIDE { return fShaderContext; }
+    SkShader::Context* getShaderContext() const SK_OVERRIDE { return fShaderContext; }
 
 protected:
     uint32_t            fShaderFlags;
@@ -62,12 +62,12 @@
 class SkA8_Coverage_Blitter : public SkRasterBlitter {
 public:
     SkA8_Coverage_Blitter(const SkBitmap& device, const SkPaint& paint);
-    virtual void blitH(int x, int y, int width) SK_OVERRIDE;
-    virtual void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]) SK_OVERRIDE;
-    virtual void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE;
-    virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE;
-    virtual void blitMask(const SkMask&, const SkIRect&) SK_OVERRIDE;
-    virtual const SkBitmap* justAnOpaqueColor(uint32_t*) SK_OVERRIDE;
+    void blitH(int x, int y, int width) SK_OVERRIDE;
+    void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]) SK_OVERRIDE;
+    void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE;
+    void blitRect(int x, int y, int width, int height) SK_OVERRIDE;
+    void blitMask(const SkMask&, const SkIRect&) SK_OVERRIDE;
+    const SkBitmap* justAnOpaqueColor(uint32_t*) SK_OVERRIDE;
 };
 
 class SkA8_Blitter : public SkRasterBlitter {
@@ -161,11 +161,11 @@
     SkARGB32_Shader_Blitter(const SkBitmap& device, const SkPaint& paint,
                             SkShader::Context* shaderContext);
     virtual ~SkARGB32_Shader_Blitter();
-    virtual void blitH(int x, int y, int width) SK_OVERRIDE;
-    virtual void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE;
-    virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE;
-    virtual void blitAntiH(int x, int y, const SkAlpha[], const int16_t[]) SK_OVERRIDE;
-    virtual void blitMask(const SkMask&, const SkIRect&) SK_OVERRIDE;
+    void blitH(int x, int y, int width) SK_OVERRIDE;
+    void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE;
+    void blitRect(int x, int y, int width, int height) SK_OVERRIDE;
+    void blitAntiH(int x, int y, const SkAlpha[], const int16_t[]) SK_OVERRIDE;
+    void blitMask(const SkMask&, const SkIRect&) SK_OVERRIDE;
 
 private:
     SkXfermode*         fXfermode;
diff --git a/src/core/SkDeviceImageFilterProxy.h b/src/core/SkDeviceImageFilterProxy.h
index 621ff3f..0ae686d 100644
--- a/src/core/SkDeviceImageFilterProxy.h
+++ b/src/core/SkDeviceImageFilterProxy.h
@@ -22,13 +22,13 @@
                                                           props.pixelGeometry()))
     {}
 
-    virtual SkBaseDevice* createDevice(int w, int h) SK_OVERRIDE {
+    SkBaseDevice* createDevice(int w, int h) SK_OVERRIDE {
         SkBaseDevice::CreateInfo cinfo(SkImageInfo::MakeN32Premul(w, h),
                                        SkBaseDevice::kImageFilter_Usage,
                                        kUnknown_SkPixelGeometry);
         return fDevice->onCreateCompatibleDevice(cinfo);
     }
-    virtual bool canHandleImageFilter(const SkImageFilter* filter) SK_OVERRIDE {
+    bool canHandleImageFilter(const SkImageFilter* filter) SK_OVERRIDE {
         return fDevice->canHandleImageFilter(filter);
     }
     virtual bool filterImage(const SkImageFilter* filter, const SkBitmap& src,
@@ -37,7 +37,7 @@
         return fDevice->filterImage(filter, src, ctx, result, offset);
     }
 
-    virtual const SkSurfaceProps* surfaceProps() const SK_OVERRIDE {
+    const SkSurfaceProps* surfaceProps() const SK_OVERRIDE {
         return &fProps;
     }
 
diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp
index 1e1ce07..6007532 100644
--- a/src/core/SkDraw.cpp
+++ b/src/core/SkDraw.cpp
@@ -2016,7 +2016,7 @@
 public:
     SkTriColorShader() {}
 
-    virtual size_t contextSize() const SK_OVERRIDE;
+    size_t contextSize() const SK_OVERRIDE;
 
     class TriColorShaderContext : public SkShader::Context {
     public:
@@ -2025,7 +2025,7 @@
 
         bool setup(const SkPoint pts[], const SkColor colors[], int, int, int);
 
-        virtual void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE;
+        void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE;
 
     private:
         SkMatrix    fDstToUnit;
@@ -2040,7 +2040,7 @@
     Factory getFactory() const SK_OVERRIDE { sk_throw(); return NULL; }
 
 protected:
-    virtual Context* onCreateContext(const ContextRec& rec, void* storage) const SK_OVERRIDE {
+    Context* onCreateContext(const ContextRec& rec, void* storage) const SK_OVERRIDE {
         return SkNEW_PLACEMENT_ARGS(storage, TriColorShaderContext, (*this, rec));
     }
 
diff --git a/src/core/SkEmptyShader.h b/src/core/SkEmptyShader.h
index b7fefbe..0de85ca 100644
--- a/src/core/SkEmptyShader.h
+++ b/src/core/SkEmptyShader.h
@@ -20,7 +20,7 @@
 public:
     SkEmptyShader() {}
 
-    virtual size_t contextSize() const SK_OVERRIDE {
+    size_t contextSize() const SK_OVERRIDE {
         // Even though createContext returns NULL we have to return a value of at least
         // sizeof(SkShader::Context) to satisfy SkSmallAllocator.
         return sizeof(SkShader::Context);
@@ -30,7 +30,7 @@
     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkEmptyShader)
 
 protected:
-    virtual SkShader::Context* onCreateContext(const ContextRec&, void*) const SK_OVERRIDE {
+    SkShader::Context* onCreateContext(const ContextRec&, void*) const SK_OVERRIDE {
         return NULL;
     }
 
diff --git a/src/core/SkFilterShader.h b/src/core/SkFilterShader.h
index 44c2632..dca9567 100644
--- a/src/core/SkFilterShader.h
+++ b/src/core/SkFilterShader.h
@@ -17,7 +17,7 @@
     SkFilterShader(SkShader* shader, SkColorFilter* filter);
     virtual ~SkFilterShader();
 
-    virtual size_t contextSize() const SK_OVERRIDE;
+    size_t contextSize() const SK_OVERRIDE;
 
     class FilterShaderContext : public SkShader::Context {
     public:
@@ -25,12 +25,12 @@
         FilterShaderContext(const SkFilterShader&, SkShader::Context*, const ContextRec&);
         virtual ~FilterShaderContext();
 
-        virtual uint32_t getFlags() const SK_OVERRIDE;
+        uint32_t getFlags() const SK_OVERRIDE;
 
-        virtual void shadeSpan(int x, int y, SkPMColor[], int count) SK_OVERRIDE;
-        virtual void shadeSpan16(int x, int y, uint16_t[], int count) SK_OVERRIDE;
+        void shadeSpan(int x, int y, SkPMColor[], int count) SK_OVERRIDE;
+        void shadeSpan16(int x, int y, uint16_t[], int count) SK_OVERRIDE;
 
-        virtual void set3DMask(const SkMask* mask) SK_OVERRIDE {
+        void set3DMask(const SkMask* mask) SK_OVERRIDE {
             // forward to our proxy
             fShaderContext->set3DMask(mask);
         }
@@ -45,8 +45,8 @@
     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkFilterShader)
 
 protected:
-    virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
-    virtual Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE;
+    void flatten(SkWriteBuffer&) const SK_OVERRIDE;
+    Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE;
 
 
 private:
diff --git a/src/core/SkFontHost.cpp b/src/core/SkFontHost.cpp
index 79b7b73..8092a59 100644
--- a/src/core/SkFontHost.cpp
+++ b/src/core/SkFontHost.cpp
@@ -80,15 +80,15 @@
 
 class SkEmptyFontStyleSet : public SkFontStyleSet {
 public:
-    virtual int count() SK_OVERRIDE { return 0; }
-    virtual void getStyle(int, SkFontStyle*, SkString*) SK_OVERRIDE {
+    int count() SK_OVERRIDE { return 0; }
+    void getStyle(int, SkFontStyle*, SkString*) SK_OVERRIDE {
         SkDEBUGFAIL("SkFontStyleSet::getStyle called on empty set");
     }
-    virtual SkTypeface* createTypeface(int index) SK_OVERRIDE {
+    SkTypeface* createTypeface(int index) SK_OVERRIDE {
         SkDEBUGFAIL("SkFontStyleSet::createTypeface called on empty set");
         return NULL;
     }
-    virtual SkTypeface* matchStyle(const SkFontStyle&) SK_OVERRIDE {
+    SkTypeface* matchStyle(const SkFontStyle&) SK_OVERRIDE {
         return NULL;
     }
 };
@@ -101,17 +101,17 @@
 
 class SkEmptyFontMgr : public SkFontMgr {
 protected:
-    virtual int onCountFamilies() const SK_OVERRIDE {
+    int onCountFamilies() const SK_OVERRIDE {
         return 0;
     }
-    virtual void onGetFamilyName(int index, SkString* familyName) const SK_OVERRIDE {
+    void onGetFamilyName(int index, SkString* familyName) const SK_OVERRIDE {
         SkDEBUGFAIL("onGetFamilyName called with bad index");
     }
-    virtual SkFontStyleSet* onCreateStyleSet(int index) const SK_OVERRIDE {
+    SkFontStyleSet* onCreateStyleSet(int index) const SK_OVERRIDE {
         SkDEBUGFAIL("onCreateStyleSet called with bad index");
         return NULL;
     }
-    virtual SkFontStyleSet* onMatchFamily(const char[]) const SK_OVERRIDE {
+    SkFontStyleSet* onMatchFamily(const char[]) const SK_OVERRIDE {
         return SkFontStyleSet::CreateEmpty();
     }
 
@@ -130,16 +130,16 @@
                                          const SkFontStyle&) const SK_OVERRIDE {
         return NULL;
     }
-    virtual SkTypeface* onCreateFromData(SkData*, int) const SK_OVERRIDE {
+    SkTypeface* onCreateFromData(SkData*, int) const SK_OVERRIDE {
         return NULL;
     }
-    virtual SkTypeface* onCreateFromStream(SkStream*, int) const SK_OVERRIDE {
+    SkTypeface* onCreateFromStream(SkStream*, int) const SK_OVERRIDE {
         return NULL;
     }
-    virtual SkTypeface* onCreateFromFile(const char[], int) const SK_OVERRIDE {
+    SkTypeface* onCreateFromFile(const char[], int) const SK_OVERRIDE {
         return NULL;
     }
-    virtual SkTypeface* onLegacyCreateTypeface(const char [], unsigned) const SK_OVERRIDE {
+    SkTypeface* onLegacyCreateTypeface(const char [], unsigned) const SK_OVERRIDE {
         return NULL;
     }
 };
diff --git a/src/core/SkImageFilter.cpp b/src/core/SkImageFilter.cpp
index 3285e22..34b1b9b 100644
--- a/src/core/SkImageFilter.cpp
+++ b/src/core/SkImageFilter.cpp
@@ -432,7 +432,7 @@
         }
         SK_DECLARE_INTERNAL_LLIST_INTERFACE(Value);
     };
-    virtual bool get(const Key& key, SkBitmap* result, SkIPoint* offset) const SK_OVERRIDE {
+    bool get(const Key& key, SkBitmap* result, SkIPoint* offset) const SK_OVERRIDE {
         SkAutoMutexAcquire mutex(fMutex);
         if (Value* v = fLookup.find(key)) {
             *result = v->fBitmap;
@@ -445,7 +445,7 @@
         }
         return false;
     }
-    virtual void set(const Key& key, const SkBitmap& result, const SkIPoint& offset) SK_OVERRIDE {
+    void set(const Key& key, const SkBitmap& result, const SkIPoint& offset) SK_OVERRIDE {
         SkAutoMutexAcquire mutex(fMutex);
         if (Value* v = fLookup.find(key)) {
             removeInternal(v);
diff --git a/src/core/SkLocalMatrixShader.h b/src/core/SkLocalMatrixShader.h
index 0a5cb7a..be78bee 100644
--- a/src/core/SkLocalMatrixShader.h
+++ b/src/core/SkLocalMatrixShader.h
@@ -19,7 +19,7 @@
     , fProxyShader(SkRef(proxy))
     {}
 
-    virtual size_t contextSize() const SK_OVERRIDE {
+    size_t contextSize() const SK_OVERRIDE {
         return fProxyShader->contextSize();
     }
 
@@ -28,7 +28,7 @@
         return fProxyShader->asABitmap(bitmap, matrix, mode);
     }
 
-    virtual GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE {
+    GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE {
         return fProxyShader->asAGradient(info);
     }
 
@@ -55,7 +55,7 @@
 
 #endif
 
-    virtual SkShader* refAsALocalMatrixShader(SkMatrix* localMatrix) const SK_OVERRIDE {
+    SkShader* refAsALocalMatrixShader(SkMatrix* localMatrix) const SK_OVERRIDE {
         if (localMatrix) {
             *localMatrix = this->getLocalMatrix();
         }
@@ -66,8 +66,8 @@
     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLocalMatrixShader)
 
 protected:
-    virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
-    virtual Context* onCreateContext(const ContextRec&, void*) const SK_OVERRIDE;
+    void flatten(SkWriteBuffer&) const SK_OVERRIDE;
+    Context* onCreateContext(const ContextRec&, void*) const SK_OVERRIDE;
 
 private:
     SkAutoTUnref<SkShader> fProxyShader;
diff --git a/src/core/SkMaskCache.cpp b/src/core/SkMaskCache.cpp
index b4b8b4f..a360fc5 100644
--- a/src/core/SkMaskCache.cpp
+++ b/src/core/SkMaskCache.cpp
@@ -51,8 +51,8 @@
     RRectBlurKey   fKey;
     MaskValue      fValue;
 
-    virtual const Key& getKey() const SK_OVERRIDE { return fKey; }
-    virtual size_t bytesUsed() const SK_OVERRIDE { return sizeof(*this) + fValue.fData->size(); }
+    const Key& getKey() const SK_OVERRIDE { return fKey; }
+    size_t bytesUsed() const SK_OVERRIDE { return sizeof(*this) + fValue.fData->size(); }
 
     static bool Visitor(const SkResourceCache::Rec& baseRec, void* contextData) {
         const RRectBlurRec& rec = static_cast<const RRectBlurRec&>(baseRec);
@@ -142,8 +142,8 @@
     RectsBlurKey   fKey;
     MaskValue      fValue;
 
-    virtual const Key& getKey() const SK_OVERRIDE { return fKey; }
-    virtual size_t bytesUsed() const SK_OVERRIDE { return sizeof(*this) + fValue.fData->size(); }
+    const Key& getKey() const SK_OVERRIDE { return fKey; }
+    size_t bytesUsed() const SK_OVERRIDE { return sizeof(*this) + fValue.fData->size(); }
 
     static bool Visitor(const SkResourceCache::Rec& baseRec, void* contextData) {
         const RectsBlurRec& rec = static_cast<const RectsBlurRec&>(baseRec);
diff --git a/src/core/SkMaskGamma.cpp b/src/core/SkMaskGamma.cpp
index a305d72..abc729b 100644
--- a/src/core/SkMaskGamma.cpp
+++ b/src/core/SkMaskGamma.cpp
@@ -12,27 +12,27 @@
 #include "SkMaskGamma.h"
 
 class SkLinearColorSpaceLuminance : public SkColorSpaceLuminance {
-    virtual SkScalar toLuma(SkScalar SkDEBUGCODE(gamma), SkScalar luminance) const SK_OVERRIDE {
+    SkScalar toLuma(SkScalar SkDEBUGCODE(gamma), SkScalar luminance) const SK_OVERRIDE {
         SkASSERT(SK_Scalar1 == gamma);
         return luminance;
     }
-    virtual SkScalar fromLuma(SkScalar SkDEBUGCODE(gamma), SkScalar luma) const SK_OVERRIDE {
+    SkScalar fromLuma(SkScalar SkDEBUGCODE(gamma), SkScalar luma) const SK_OVERRIDE {
         SkASSERT(SK_Scalar1 == gamma);
         return luma;
     }
 };
 
 class SkGammaColorSpaceLuminance : public SkColorSpaceLuminance {
-    virtual SkScalar toLuma(SkScalar gamma, SkScalar luminance) const SK_OVERRIDE {
+    SkScalar toLuma(SkScalar gamma, SkScalar luminance) const SK_OVERRIDE {
         return SkScalarPow(luminance, gamma);
     }
-    virtual SkScalar fromLuma(SkScalar gamma, SkScalar luma) const SK_OVERRIDE {
+    SkScalar fromLuma(SkScalar gamma, SkScalar luma) const SK_OVERRIDE {
         return SkScalarPow(luma, SkScalarInvert(gamma));
     }
 };
 
 class SkSRGBColorSpaceLuminance : public SkColorSpaceLuminance {
-    virtual SkScalar toLuma(SkScalar SkDEBUGCODE(gamma), SkScalar luminance) const SK_OVERRIDE {
+    SkScalar toLuma(SkScalar SkDEBUGCODE(gamma), SkScalar luminance) const SK_OVERRIDE {
         SkASSERT(0 == gamma);
         //The magic numbers are derived from the sRGB specification.
         //See http://www.color.org/chardata/rgb/srgb.xalter .
@@ -42,7 +42,7 @@
         return SkScalarPow((luminance + 0.055f) / 1.055f,
                         2.4f);
     }
-    virtual SkScalar fromLuma(SkScalar SkDEBUGCODE(gamma), SkScalar luma) const SK_OVERRIDE {
+    SkScalar fromLuma(SkScalar SkDEBUGCODE(gamma), SkScalar luma) const SK_OVERRIDE {
         SkASSERT(0 == gamma);
         //The magic numbers are derived from the sRGB specification.
         //See http://www.color.org/chardata/rgb/srgb.xalter .
diff --git a/src/core/SkMipMap.h b/src/core/SkMipMap.h
index 4e83b12..d403968 100644
--- a/src/core/SkMipMap.h
+++ b/src/core/SkMipMap.h
@@ -30,7 +30,7 @@
     bool extractLevel(SkScalar scale, Level*) const;
 
 protected:
-    virtual void onDataChange(void* oldData, void* newData) SK_OVERRIDE {
+    void onDataChange(void* oldData, void* newData) SK_OVERRIDE {
         fLevels = (Level*)newData; // could be NULL
     }
 
diff --git a/src/core/SkPictureRecord.h b/src/core/SkPictureRecord.h
index ca2c133..3ce0007 100644
--- a/src/core/SkPictureRecord.h
+++ b/src/core/SkPictureRecord.h
@@ -29,9 +29,9 @@
     SkPictureRecord(const SkISize& dimensions, uint32_t recordFlags);
     virtual ~SkPictureRecord();
 
-    virtual void beginCommentGroup(const char* description) SK_OVERRIDE;
-    virtual void addComment(const char* kywd, const char* value) SK_OVERRIDE;
-    virtual void endCommentGroup() SK_OVERRIDE;
+    void beginCommentGroup(const char* description) SK_OVERRIDE;
+    void addComment(const char* kywd, const char* value) SK_OVERRIDE;
+    void endCommentGroup() SK_OVERRIDE;
 
     const SkTDArray<const SkPicture* >& getPictureRefs() const {
         return fPictureRefs;
@@ -146,19 +146,19 @@
         SkASSERT(fWriter.bytesWritten() == initialOffset + size);
     }
 
-    virtual SkSurface* onNewSurface(const SkImageInfo&, const SkSurfaceProps&) SK_OVERRIDE;
+    SkSurface* onNewSurface(const SkImageInfo&, const SkSurfaceProps&) SK_OVERRIDE;
     const void* onPeekPixels(SkImageInfo*, size_t*) SK_OVERRIDE {
         return NULL;
     }
 
-    virtual void willSave() SK_OVERRIDE;
-    virtual SaveLayerStrategy willSaveLayer(const SkRect*, const SkPaint*, SaveFlags) SK_OVERRIDE;
-    virtual void willRestore() SK_OVERRIDE;
+    void willSave() SK_OVERRIDE;
+    SaveLayerStrategy willSaveLayer(const SkRect*, const SkPaint*, SaveFlags) SK_OVERRIDE;
+    void willRestore() SK_OVERRIDE;
 
-    virtual void didConcat(const SkMatrix&) SK_OVERRIDE;
-    virtual void didSetMatrix(const SkMatrix&) SK_OVERRIDE;
+    void didConcat(const SkMatrix&) SK_OVERRIDE;
+    void didSetMatrix(const SkMatrix&) SK_OVERRIDE;
 
-    virtual void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK_OVERRIDE;
+    void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK_OVERRIDE;
 
     virtual void onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y,
                             const SkPaint&) SK_OVERRIDE;
@@ -199,12 +199,12 @@
                         const uint16_t indices[], int indexCount,
                         const SkPaint&) SK_OVERRIDE;
 
-    virtual void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
-    virtual void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
-    virtual void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
-    virtual void onClipRegion(const SkRegion&, SkRegion::Op) SK_OVERRIDE;
+    void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
+    void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
+    void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
+    void onClipRegion(const SkRegion&, SkRegion::Op) SK_OVERRIDE;
 
-    virtual void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) SK_OVERRIDE;
+    void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) SK_OVERRIDE;
 
     int addPathToHeap(const SkPath& path);  // does not write to ops stream
 
diff --git a/src/core/SkPictureShader.cpp b/src/core/SkPictureShader.cpp
index b602294..5a1e618 100644
--- a/src/core/SkPictureShader.cpp
+++ b/src/core/SkPictureShader.cpp
@@ -70,8 +70,8 @@
     SkAutoTUnref<SkShader> fShader;
     size_t                 fBitmapBytes;
 
-    virtual const Key& getKey() const SK_OVERRIDE { return fKey; }
-    virtual size_t bytesUsed() const SK_OVERRIDE {
+    const Key& getKey() const SK_OVERRIDE { return fKey; }
+    size_t bytesUsed() const SK_OVERRIDE {
         return sizeof(fKey) + sizeof(SkShader) + fBitmapBytes;
     }
 
diff --git a/src/core/SkPictureShader.h b/src/core/SkPictureShader.h
index 5f8cc01..8df9f53 100644
--- a/src/core/SkPictureShader.h
+++ b/src/core/SkPictureShader.h
@@ -25,7 +25,7 @@
                                    const SkRect*);
     virtual ~SkPictureShader();
 
-    virtual size_t contextSize() const SK_OVERRIDE;
+    size_t contextSize() const SK_OVERRIDE;
 
     SK_TO_STRING_OVERRIDE()
     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkPictureShader)
@@ -35,8 +35,8 @@
 
 protected:
     SkPictureShader(SkReadBuffer&);
-    virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
-    virtual Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE;
+    void flatten(SkWriteBuffer&) const SK_OVERRIDE;
+    Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE;
 
 private:
     SkPictureShader(const SkPicture*, TileMode, TileMode, const SkMatrix*, const SkRect*);
@@ -54,11 +54,11 @@
 
         virtual ~PictureShaderContext();
 
-        virtual uint32_t getFlags() const SK_OVERRIDE;
+        uint32_t getFlags() const SK_OVERRIDE;
 
-        virtual ShadeProc asAShadeProc(void** ctx) SK_OVERRIDE;
-        virtual void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE;
-        virtual void shadeSpan16(int x, int y, uint16_t dstC[], int count) SK_OVERRIDE;
+        ShadeProc asAShadeProc(void** ctx) SK_OVERRIDE;
+        void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE;
+        void shadeSpan16(int x, int y, uint16_t dstC[], int count) SK_OVERRIDE;
 
     private:
         PictureShaderContext(const SkPictureShader&, const ContextRec&, SkShader* bitmapShader);
diff --git a/src/core/SkRTree.h b/src/core/SkRTree.h
index 4021c09..7934324 100644
--- a/src/core/SkRTree.h
+++ b/src/core/SkRTree.h
@@ -41,9 +41,9 @@
     explicit SkRTree(SkScalar aspectRatio = 1);
     virtual ~SkRTree() {}
 
-    virtual void insert(SkAutoTMalloc<SkRect>* boundsArray, int N) SK_OVERRIDE;
-    virtual void search(const SkRect& query, SkTDArray<unsigned>* results) const SK_OVERRIDE;
-    virtual size_t bytesUsed() const SK_OVERRIDE;
+    void insert(SkAutoTMalloc<SkRect>* boundsArray, int N) SK_OVERRIDE;
+    void search(const SkRect& query, SkTDArray<unsigned>* results) const SK_OVERRIDE;
+    size_t bytesUsed() const SK_OVERRIDE;
 
     // Methods and constants below here are only public for tests.
 
diff --git a/src/core/SkRegion_path.cpp b/src/core/SkRegion_path.cpp
index c3c0423..e9224d8 100644
--- a/src/core/SkRegion_path.cpp
+++ b/src/core/SkRegion_path.cpp
@@ -43,7 +43,7 @@
     void    copyToRect(SkIRect*) const;
     void    copyToRgn(SkRegion::RunType runs[]) const;
 
-    virtual void blitH(int x, int y, int width) SK_OVERRIDE;
+    void blitH(int x, int y, int width) SK_OVERRIDE;
 
 #ifdef SK_DEBUG
     void dump() const {
diff --git a/src/core/SkResourceCache.cpp b/src/core/SkResourceCache.cpp
index ae8412d..efcff26 100644
--- a/src/core/SkResourceCache.cpp
+++ b/src/core/SkResourceCache.cpp
@@ -73,9 +73,9 @@
     ~SkOneShotDiscardablePixelRef();
 
 protected:
-    virtual bool onNewLockPixels(LockRec*) SK_OVERRIDE;
-    virtual void onUnlockPixels() SK_OVERRIDE;
-    virtual size_t getAllocatedSizeInBytes() const SK_OVERRIDE;
+    bool onNewLockPixels(LockRec*) SK_OVERRIDE;
+    void onUnlockPixels() SK_OVERRIDE;
+    size_t getAllocatedSizeInBytes() const SK_OVERRIDE;
 
 private:
     SkDiscardableMemory* fDM;
@@ -143,7 +143,7 @@
         fFactory = factory;
     }
 
-    virtual bool allocPixelRef(SkBitmap*, SkColorTable*) SK_OVERRIDE;
+    bool allocPixelRef(SkBitmap*, SkColorTable*) SK_OVERRIDE;
 
 private:
     SkResourceCache::DiscardableFactory fFactory;
diff --git a/src/core/SkScalerContext.cpp b/src/core/SkScalerContext.cpp
index 771db50..dad8e5e 100644
--- a/src/core/SkScalerContext.cpp
+++ b/src/core/SkScalerContext.cpp
@@ -856,21 +856,21 @@
         : SkScalerContext(face, desc) {}
 
 protected:
-    virtual unsigned generateGlyphCount() SK_OVERRIDE {
+    unsigned generateGlyphCount() SK_OVERRIDE {
         return 0;
     }
-    virtual uint16_t generateCharToGlyph(SkUnichar uni) SK_OVERRIDE {
+    uint16_t generateCharToGlyph(SkUnichar uni) SK_OVERRIDE {
         return 0;
     }
-    virtual void generateAdvance(SkGlyph* glyph) SK_OVERRIDE {
+    void generateAdvance(SkGlyph* glyph) SK_OVERRIDE {
         glyph->zeroMetrics();
     }
-    virtual void generateMetrics(SkGlyph* glyph) SK_OVERRIDE {
+    void generateMetrics(SkGlyph* glyph) SK_OVERRIDE {
         glyph->zeroMetrics();
     }
-    virtual void generateImage(const SkGlyph& glyph) SK_OVERRIDE {}
-    virtual void generatePath(const SkGlyph& glyph, SkPath* path) SK_OVERRIDE {}
-    virtual void generateFontMetrics(SkPaint::FontMetrics* metrics) SK_OVERRIDE {
+    void generateImage(const SkGlyph& glyph) SK_OVERRIDE {}
+    void generatePath(const SkGlyph& glyph, SkPath* path) SK_OVERRIDE {}
+    void generateFontMetrics(SkPaint::FontMetrics* metrics) SK_OVERRIDE {
         if (metrics) {
             sk_bzero(metrics, sizeof(*metrics));
         }
diff --git a/src/core/SkScan_AntiPath.cpp b/src/core/SkScan_AntiPath.cpp
index 545a701..4329ef5 100644
--- a/src/core/SkScan_AntiPath.cpp
+++ b/src/core/SkScan_AntiPath.cpp
@@ -53,7 +53,7 @@
         SkDEBUGFAIL("How did I get here?");
     }
     /// May not be called on BaseSuperBlitter because it blits out of order.
-    virtual void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE {
+    void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE {
         SkDEBUGFAIL("How did I get here?");
     }
 
@@ -120,10 +120,10 @@
 
     /// Blits a row of pixels, with location and width specified
     /// in supersampled coordinates.
-    virtual void blitH(int x, int y, int width) SK_OVERRIDE;
+    void blitH(int x, int y, int width) SK_OVERRIDE;
     /// Blits a rectangle of pixels, with location and size specified
     /// in supersampled coordinates.
-    virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE;
+    void blitRect(int x, int y, int width, int height) SK_OVERRIDE;
 
 private:
     // The next three variables are used to track a circular buffer that
@@ -408,7 +408,7 @@
         fRealBlitter->blitMask(fMask, fClipRect);
     }
 
-    virtual void blitH(int x, int y, int width) SK_OVERRIDE;
+    void blitH(int x, int y, int width) SK_OVERRIDE;
 
     static bool CanHandleRect(const SkIRect& bounds) {
 #ifdef FORCE_RLE
diff --git a/src/core/SkScan_Antihair.cpp b/src/core/SkScan_Antihair.cpp
index e31f66c..d034151 100644
--- a/src/core/SkScan_Antihair.cpp
+++ b/src/core/SkScan_Antihair.cpp
@@ -106,7 +106,7 @@
 
 class HLine_SkAntiHairBlitter : public SkAntiHairBlitter {
 public:
-    virtual SkFixed drawCap(int x, SkFixed fy, SkFixed slope, int mod64) SK_OVERRIDE {
+    SkFixed drawCap(int x, SkFixed fy, SkFixed slope, int mod64) SK_OVERRIDE {
         fy += SK_Fixed1/2;
 
         int y = fy >> 16;
@@ -153,7 +153,7 @@
 
 class Horish_SkAntiHairBlitter : public SkAntiHairBlitter {
 public:
-    virtual SkFixed drawCap(int x, SkFixed fy, SkFixed dy, int mod64) SK_OVERRIDE {
+    SkFixed drawCap(int x, SkFixed fy, SkFixed dy, int mod64) SK_OVERRIDE {
         int16_t runs[2];
         uint8_t  aa[1];
 
@@ -186,7 +186,7 @@
         return fy - SK_Fixed1/2;
     }
 
-    virtual SkFixed drawLine(int x, int stopx, SkFixed fy, SkFixed dy) SK_OVERRIDE {
+    SkFixed drawLine(int x, int stopx, SkFixed fy, SkFixed dy) SK_OVERRIDE {
         SkASSERT(x < stopx);
 
         int16_t runs[2];
@@ -224,7 +224,7 @@
 
 class VLine_SkAntiHairBlitter : public SkAntiHairBlitter {
 public:
-    virtual SkFixed drawCap(int y, SkFixed fx, SkFixed dx, int mod64) SK_OVERRIDE {
+    SkFixed drawCap(int y, SkFixed fx, SkFixed dx, int mod64) SK_OVERRIDE {
         SkASSERT(0 == dx);
         fx += SK_Fixed1/2;
 
@@ -243,7 +243,7 @@
         return fx - SK_Fixed1/2;
     }
 
-    virtual SkFixed drawLine(int y, int stopy, SkFixed fx, SkFixed dx) SK_OVERRIDE {
+    SkFixed drawLine(int y, int stopy, SkFixed fx, SkFixed dx) SK_OVERRIDE {
         SkASSERT(y < stopy);
         SkASSERT(0 == dx);
         fx += SK_Fixed1/2;
@@ -265,7 +265,7 @@
 
 class Vertish_SkAntiHairBlitter : public SkAntiHairBlitter {
 public:
-    virtual SkFixed drawCap(int y, SkFixed fx, SkFixed dx, int mod64) SK_OVERRIDE {
+    SkFixed drawCap(int y, SkFixed fx, SkFixed dx, int mod64) SK_OVERRIDE {
         int16_t runs[3];
         uint8_t  aa[2];
 
@@ -289,7 +289,7 @@
         return fx - SK_Fixed1/2;
     }
 
-    virtual SkFixed drawLine(int y, int stopy, SkFixed fx, SkFixed dx) SK_OVERRIDE {
+    SkFixed drawLine(int y, int stopy, SkFixed fx, SkFixed dx) SK_OVERRIDE {
         SkASSERT(y < stopy);
         int16_t runs[3];
         uint8_t  aa[2];
diff --git a/src/core/SkScan_Path.cpp b/src/core/SkScan_Path.cpp
index 84794c6..5d9e0ca 100644
--- a/src/core/SkScan_Path.cpp
+++ b/src/core/SkScan_Path.cpp
@@ -332,7 +332,7 @@
     }
 
     // overrides
-    virtual void blitH(int x, int y, int width) SK_OVERRIDE {
+    void blitH(int x, int y, int width) SK_OVERRIDE {
         int invWidth = x - fPrevX;
         if (invWidth > 0) {
             fBlitter->blitH(fPrevX, y, invWidth);
@@ -341,19 +341,19 @@
     }
 
     // we do not expect to get called with these entrypoints
-    virtual void blitAntiH(int, int, const SkAlpha[], const int16_t runs[]) SK_OVERRIDE {
+    void blitAntiH(int, int, const SkAlpha[], const int16_t runs[]) SK_OVERRIDE {
         SkDEBUGFAIL("blitAntiH unexpected");
     }
-    virtual void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE {
+    void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE {
         SkDEBUGFAIL("blitV unexpected");
     }
-    virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE {
+    void blitRect(int x, int y, int width, int height) SK_OVERRIDE {
         SkDEBUGFAIL("blitRect unexpected");
     }
-    virtual void blitMask(const SkMask&, const SkIRect& clip) SK_OVERRIDE {
+    void blitMask(const SkMask&, const SkIRect& clip) SK_OVERRIDE {
         SkDEBUGFAIL("blitMask unexpected");
     }
-    virtual const SkBitmap* justAnOpaqueColor(uint32_t* value) SK_OVERRIDE {
+    const SkBitmap* justAnOpaqueColor(uint32_t* value) SK_OVERRIDE {
         SkDEBUGFAIL("justAnOpaqueColor unexpected");
         return NULL;
     }
diff --git a/src/core/SkSpriteBlitter_ARGB32.cpp b/src/core/SkSpriteBlitter_ARGB32.cpp
index 0d0d6d0..0993a4c 100644
--- a/src/core/SkSpriteBlitter_ARGB32.cpp
+++ b/src/core/SkSpriteBlitter_ARGB32.cpp
@@ -34,7 +34,7 @@
         fAlpha = alpha;
     }
 
-    virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE {
+    void blitRect(int x, int y, int width, int height) SK_OVERRIDE {
         SkASSERT(width > 0 && height > 0);
         uint32_t* SK_RESTRICT dst = fDevice->getAddr32(x, y);
         const uint32_t* SK_RESTRICT src = fSource->getAddr32(x - fLeft,
@@ -122,7 +122,7 @@
     Sprite_D32_S32A_XferFilter(const SkBitmap& source, const SkPaint& paint)
         : Sprite_D32_XferFilter(source, paint) {}
 
-    virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE {
+    void blitRect(int x, int y, int width, int height) SK_OVERRIDE {
         SkASSERT(width > 0 && height > 0);
         uint32_t* SK_RESTRICT dst = fDevice->getAddr32(x, y);
         const uint32_t* SK_RESTRICT src = fSource->getAddr32(x - fLeft,
@@ -169,7 +169,7 @@
     Sprite_D32_S4444_XferFilter(const SkBitmap& source, const SkPaint& paint)
         : Sprite_D32_XferFilter(source, paint) {}
 
-    virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE {
+    void blitRect(int x, int y, int width, int height) SK_OVERRIDE {
         SkASSERT(width > 0 && height > 0);
         SkPMColor* SK_RESTRICT dst = fDevice->getAddr32(x, y);
         const SkPMColor16* SK_RESTRICT src = fSource->getAddr16(x - fLeft,
@@ -216,7 +216,7 @@
 public:
     Sprite_D32_S4444_Opaque(const SkBitmap& source) : SkSpriteBlitter(source) {}
 
-    virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE {
+    void blitRect(int x, int y, int width, int height) SK_OVERRIDE {
         SkASSERT(width > 0 && height > 0);
         SkPMColor* SK_RESTRICT dst = fDevice->getAddr32(x, y);
         const SkPMColor16* SK_RESTRICT src = fSource->getAddr16(x - fLeft,
@@ -245,7 +245,7 @@
 public:
     Sprite_D32_S4444(const SkBitmap& source) : SkSpriteBlitter(source) {}
 
-    virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE {
+    void blitRect(int x, int y, int width, int height) SK_OVERRIDE {
         SkASSERT(width > 0 && height > 0);
         SkPMColor* SK_RESTRICT dst = fDevice->getAddr32(x, y);
         const SkPMColor16* SK_RESTRICT src = fSource->getAddr16(x - fLeft,
diff --git a/src/core/SkSpriteBlitter_RGB16.cpp b/src/core/SkSpriteBlitter_RGB16.cpp
index 3ac5127..2f257a0 100644
--- a/src/core/SkSpriteBlitter_RGB16.cpp
+++ b/src/core/SkSpriteBlitter_RGB16.cpp
@@ -54,7 +54,7 @@
         : SkSpriteBlitter(source) {}
 
     // overrides
-    virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE {
+    void blitRect(int x, int y, int width, int height) SK_OVERRIDE {
         uint16_t* SK_RESTRICT dst = fDevice->getAddr16(x, y);
         const uint16_t* SK_RESTRICT src = fSource->getAddr16(x - fLeft,
                                                              y - fTop);
@@ -281,7 +281,7 @@
         fProc = SkBlitRow::Factory(flags, kRGB_565_SkColorType);
     }
 
-    virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE {
+    void blitRect(int x, int y, int width, int height) SK_OVERRIDE {
         uint16_t* SK_RESTRICT dst = fDevice->getAddr16(x, y);
         const SkPMColor* SK_RESTRICT src = fSource->getAddr32(x - fLeft,
                                                               y - fTop);
diff --git a/src/core/SkStream.cpp b/src/core/SkStream.cpp
index fe6728d..2b190b0 100644
--- a/src/core/SkStream.cpp
+++ b/src/core/SkStream.cpp
@@ -674,7 +674,7 @@
         : fBlockMemory(SkRef(headRef)), fCurrent(fBlockMemory->fHead)
         , fSize(size) , fOffset(0), fCurrentOffset(0) { }
 
-    virtual size_t read(void* buffer, size_t rawCount) SK_OVERRIDE {
+    size_t read(void* buffer, size_t rawCount) SK_OVERRIDE {
         size_t count = rawCount;
         if (fOffset + count > fSize) {
             count = fSize - fOffset;
@@ -700,26 +700,26 @@
         return 0;
     }
 
-    virtual bool isAtEnd() const SK_OVERRIDE {
+    bool isAtEnd() const SK_OVERRIDE {
         return fOffset == fSize;
     }
 
-    virtual bool rewind() SK_OVERRIDE {
+    bool rewind() SK_OVERRIDE {
         fCurrent = fBlockMemory->fHead;
         fOffset = 0;
         fCurrentOffset = 0;
         return true;
     }
 
-    virtual SkBlockMemoryStream* duplicate() const SK_OVERRIDE {
+    SkBlockMemoryStream* duplicate() const SK_OVERRIDE {
         return SkNEW_ARGS(SkBlockMemoryStream, (fBlockMemory.get(), fSize));
     }
 
-    virtual size_t getPosition() const SK_OVERRIDE {
+    size_t getPosition() const SK_OVERRIDE {
         return fOffset;
     }
 
-    virtual bool seek(size_t position) SK_OVERRIDE {
+    bool seek(size_t position) SK_OVERRIDE {
         // If possible, skip forward.
         if (position >= fOffset) {
             size_t skipAmount = position - fOffset;
@@ -736,11 +736,11 @@
         return this->rewind() && this->skip(position) == position;
     }
 
-    virtual bool move(long offset) SK_OVERRIDE {
+    bool move(long offset) SK_OVERRIDE {
         return seek(fOffset + offset);
     }
 
-    virtual SkBlockMemoryStream* fork() const SK_OVERRIDE {
+    SkBlockMemoryStream* fork() const SK_OVERRIDE {
         SkAutoTUnref<SkBlockMemoryStream> that(this->duplicate());
         that->fCurrent = this->fCurrent;
         that->fOffset = this->fOffset;
@@ -748,11 +748,11 @@
         return that.detach();
     }
 
-    virtual size_t getLength() const SK_OVERRIDE {
+    size_t getLength() const SK_OVERRIDE {
         return fSize;
     }
 
-    virtual const void* getMemoryBase() SK_OVERRIDE {
+    const void* getMemoryBase() SK_OVERRIDE {
         if (NULL == fBlockMemory->fHead->fNext) {
             return fBlockMemory->fHead->start();
         }
diff --git a/src/core/SkTypeface.cpp b/src/core/SkTypeface.cpp
index 02d2bc8..75ff58e 100644
--- a/src/core/SkTypeface.cpp
+++ b/src/core/SkTypeface.cpp
@@ -29,15 +29,15 @@
 protected:
     SkEmptyTypeface() : SkTypeface(SkFontStyle(), 0, true) { }
 
-    virtual SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE { return NULL; }
-    virtual SkScalerContext* onCreateScalerContext(const SkDescriptor*) const SK_OVERRIDE {
+    SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE { return NULL; }
+    SkScalerContext* onCreateScalerContext(const SkDescriptor*) const SK_OVERRIDE {
         return NULL;
     }
-    virtual void onFilterRec(SkScalerContextRec*) const SK_OVERRIDE { }
+    void onFilterRec(SkScalerContextRec*) const SK_OVERRIDE { }
     virtual SkAdvancedTypefaceMetrics* onGetAdvancedTypefaceMetrics(
                                 SkAdvancedTypefaceMetrics::PerGlyphInfo,
                                 const uint32_t*, uint32_t) const SK_OVERRIDE { return NULL; }
-    virtual void onGetFontDescriptor(SkFontDescriptor*, bool*) const SK_OVERRIDE { }
+    void onGetFontDescriptor(SkFontDescriptor*, bool*) const SK_OVERRIDE { }
     virtual int onCharsToGlyphs(const void* chars, Encoding encoding,
                                 uint16_t glyphs[], int glyphCount) const SK_OVERRIDE {
         if (glyphs && glyphCount > 0) {
@@ -45,20 +45,20 @@
         }
         return 0;
     }
-    virtual int onCountGlyphs() const SK_OVERRIDE { return 0; };
-    virtual int onGetUPEM() const SK_OVERRIDE { return 0; };
+    int onCountGlyphs() const SK_OVERRIDE { return 0; };
+    int onGetUPEM() const SK_OVERRIDE { return 0; };
     class EmptyLocalizedStrings : public SkTypeface::LocalizedStrings {
     public:
-        virtual bool next(SkTypeface::LocalizedString*) SK_OVERRIDE { return false; }
+        bool next(SkTypeface::LocalizedString*) SK_OVERRIDE { return false; }
     };
-    virtual void onGetFamilyName(SkString* familyName) const SK_OVERRIDE {
+    void onGetFamilyName(SkString* familyName) const SK_OVERRIDE {
         familyName->reset();
     }
-    virtual SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const SK_OVERRIDE {
+    SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const SK_OVERRIDE {
         return SkNEW(EmptyLocalizedStrings);
     };
-    virtual int onGetTableTags(SkFontTableTag tags[]) const SK_OVERRIDE { return 0; }
-    virtual size_t onGetTableData(SkFontTableTag, size_t, size_t, void*) const SK_OVERRIDE {
+    int onGetTableTags(SkFontTableTag tags[]) const SK_OVERRIDE { return 0; }
+    size_t onGetTableData(SkFontTableTag, size_t, size_t, void*) const SK_OVERRIDE {
         return 0;
     }
 };
diff --git a/src/core/SkValidatingReadBuffer.h b/src/core/SkValidatingReadBuffer.h
index 5cf3abe..916bed4 100644
--- a/src/core/SkValidatingReadBuffer.h
+++ b/src/core/SkValidatingReadBuffer.h
@@ -23,48 +23,48 @@
     SkValidatingReadBuffer(const void* data, size_t size);
     virtual ~SkValidatingReadBuffer();
 
-    virtual const void* skip(size_t size) SK_OVERRIDE;
+    const void* skip(size_t size) SK_OVERRIDE;
 
     // primitives
-    virtual bool readBool() SK_OVERRIDE;
-    virtual SkColor readColor() SK_OVERRIDE;
-    virtual SkFixed readFixed() SK_OVERRIDE;
-    virtual int32_t readInt() SK_OVERRIDE;
-    virtual SkScalar readScalar() SK_OVERRIDE;
-    virtual uint32_t readUInt() SK_OVERRIDE;
-    virtual int32_t read32() SK_OVERRIDE;
+    bool readBool() SK_OVERRIDE;
+    SkColor readColor() SK_OVERRIDE;
+    SkFixed readFixed() SK_OVERRIDE;
+    int32_t readInt() SK_OVERRIDE;
+    SkScalar readScalar() SK_OVERRIDE;
+    uint32_t readUInt() SK_OVERRIDE;
+    int32_t read32() SK_OVERRIDE;
 
     // strings -- the caller is responsible for freeing the string contents
-    virtual void readString(SkString* string) SK_OVERRIDE;
-    virtual void* readEncodedString(size_t* length, SkPaint::TextEncoding encoding) SK_OVERRIDE;
+    void readString(SkString* string) SK_OVERRIDE;
+    void* readEncodedString(size_t* length, SkPaint::TextEncoding encoding) SK_OVERRIDE;
 
     // common data structures
-    virtual SkFlattenable* readFlattenable(SkFlattenable::Type type) SK_OVERRIDE;
-    virtual void skipFlattenable() SK_OVERRIDE;
-    virtual void readPoint(SkPoint* point) SK_OVERRIDE;
-    virtual void readMatrix(SkMatrix* matrix) SK_OVERRIDE;
-    virtual void readIRect(SkIRect* rect) SK_OVERRIDE;
-    virtual void readRect(SkRect* rect) SK_OVERRIDE;
-    virtual void readRegion(SkRegion* region) SK_OVERRIDE;
-    virtual void readPath(SkPath* path) SK_OVERRIDE;
+    SkFlattenable* readFlattenable(SkFlattenable::Type type) SK_OVERRIDE;
+    void skipFlattenable() SK_OVERRIDE;
+    void readPoint(SkPoint* point) SK_OVERRIDE;
+    void readMatrix(SkMatrix* matrix) SK_OVERRIDE;
+    void readIRect(SkIRect* rect) SK_OVERRIDE;
+    void readRect(SkRect* rect) SK_OVERRIDE;
+    void readRegion(SkRegion* region) SK_OVERRIDE;
+    void readPath(SkPath* path) SK_OVERRIDE;
 
     // binary data and arrays
-    virtual bool readByteArray(void* value, size_t size) SK_OVERRIDE;
-    virtual bool readColorArray(SkColor* colors, size_t size) SK_OVERRIDE;
-    virtual bool readIntArray(int32_t* values, size_t size) SK_OVERRIDE;
-    virtual bool readPointArray(SkPoint* points, size_t size) SK_OVERRIDE;
-    virtual bool readScalarArray(SkScalar* values, size_t size) SK_OVERRIDE;
+    bool readByteArray(void* value, size_t size) SK_OVERRIDE;
+    bool readColorArray(SkColor* colors, size_t size) SK_OVERRIDE;
+    bool readIntArray(int32_t* values, size_t size) SK_OVERRIDE;
+    bool readPointArray(SkPoint* points, size_t size) SK_OVERRIDE;
+    bool readScalarArray(SkScalar* values, size_t size) SK_OVERRIDE;
 
     // helpers to get info about arrays and binary data
-    virtual uint32_t getArrayCount() SK_OVERRIDE;
+    uint32_t getArrayCount() SK_OVERRIDE;
 
     // TODO: Implement this (securely) when needed
-    virtual SkTypeface* readTypeface() SK_OVERRIDE;
+    SkTypeface* readTypeface() SK_OVERRIDE;
 
-    virtual bool validate(bool isValid) SK_OVERRIDE;
-    virtual bool isValid() const SK_OVERRIDE;
+    bool validate(bool isValid) SK_OVERRIDE;
+    bool isValid() const SK_OVERRIDE;
 
-    virtual bool validateAvailable(size_t size) SK_OVERRIDE;
+    bool validateAvailable(size_t size) SK_OVERRIDE;
 
 private:
     bool readArray(void* value, size_t size, size_t elementSize);
diff --git a/src/core/SkXfermode.cpp b/src/core/SkXfermode.cpp
index d2ba299..dc0dd88 100644
--- a/src/core/SkXfermode.cpp
+++ b/src/core/SkXfermode.cpp
@@ -828,11 +828,11 @@
         GLProcessor::GenKey(*this, caps, b);
     }
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE {
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE {
         return SkNEW_ARGS(GLProcessor, (*this));
     }
 
-    virtual const char* name() const SK_OVERRIDE { return "XferEffect"; }
+    const char* name() const SK_OVERRIDE { return "XferEffect"; }
 
     SkXfermode::Mode mode() const { return fMode; }
     const GrTextureAccess&  backgroundAccess() const { return fBackgroundAccess; }
@@ -1235,12 +1235,12 @@
             this->setWillReadDstColor();
         }
     }
-    virtual bool onIsEqual(const GrFragmentProcessor& other) const SK_OVERRIDE {
+    bool onIsEqual(const GrFragmentProcessor& other) const SK_OVERRIDE {
         const XferEffect& s = other.cast<XferEffect>();
         return fMode == s.fMode;
     }
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE {
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE {
         inout->setToUnknown(GrInvariantOutput::kWill_ReadInput);
     }
 
@@ -1448,8 +1448,8 @@
         return SkNEW_ARGS(SkClearXfermode, (rec));
     }
 
-    virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE;
-    virtual void xferA8(SkAlpha*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE;
+    void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE;
+    void xferA8(SkAlpha*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE;
 
     SK_TO_STRING_OVERRIDE()
 
@@ -1510,8 +1510,8 @@
         return SkNEW_ARGS(SkSrcXfermode, (rec));
     }
 
-    virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE;
-    virtual void xferA8(SkAlpha*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE;
+    void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE;
+    void xferA8(SkAlpha*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE;
 
     SK_TO_STRING_OVERRIDE()
 
@@ -1576,7 +1576,7 @@
         return SkNEW_ARGS(SkDstInXfermode, (rec));
     }
 
-    virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE;
+    void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE;
 
     SK_TO_STRING_OVERRIDE()
 
@@ -1620,7 +1620,7 @@
         return SkNEW_ARGS(SkDstOutXfermode, (rec));
     }
 
-    virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE;
+    void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE;
 
     SK_TO_STRING_OVERRIDE()
 
diff --git a/src/core/SkXfermode_proccoeff.h b/src/core/SkXfermode_proccoeff.h
index d7b4704..504e64d 100644
--- a/src/core/SkXfermode_proccoeff.h
+++ b/src/core/SkXfermode_proccoeff.h
@@ -30,9 +30,9 @@
     virtual void xferA8(SkAlpha dst[], const SkPMColor src[], int count,
                         const SkAlpha aa[]) const SK_OVERRIDE;
 
-    virtual bool asMode(Mode* mode) const SK_OVERRIDE;
+    bool asMode(Mode* mode) const SK_OVERRIDE;
 
-    virtual bool asCoeff(Coeff* sc, Coeff* dc) const SK_OVERRIDE;
+    bool asCoeff(Coeff* sc, Coeff* dc) const SK_OVERRIDE;
 
 #if SK_SUPPORT_GPU
     virtual bool asFragmentProcessor(GrFragmentProcessor**,
@@ -43,7 +43,7 @@
     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkProcCoeffXfermode)
 
 protected:
-    virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
+    void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
 
     Mode getMode() const { return fMode; }
 
diff --git a/src/doc/SkDocument_PDF.cpp b/src/doc/SkDocument_PDF.cpp
index 834cbc3..de65efe 100644
--- a/src/doc/SkDocument_PDF.cpp
+++ b/src/doc/SkDocument_PDF.cpp
@@ -49,7 +49,7 @@
         return fCanvas;
     }
 
-    virtual void onEndPage() SK_OVERRIDE {
+    void onEndPage() SK_OVERRIDE {
         SkASSERT(fCanvas);
         SkASSERT(fDevice);
 
@@ -63,7 +63,7 @@
         fDevice = NULL;
     }
 
-    virtual bool onClose(SkWStream* stream) SK_OVERRIDE {
+    bool onClose(SkWStream* stream) SK_OVERRIDE {
         SkASSERT(NULL == fCanvas);
         SkASSERT(NULL == fDevice);
 
@@ -73,7 +73,7 @@
         return success;
     }
 
-    virtual void onAbort() SK_OVERRIDE {
+    void onAbort() SK_OVERRIDE {
         SkDELETE(fDoc);
         fDoc = NULL;
     }
diff --git a/src/effects/SkAlphaThresholdFilter.cpp b/src/effects/SkAlphaThresholdFilter.cpp
index 791d1fe..ab84a0c 100644
--- a/src/effects/SkAlphaThresholdFilter.cpp
+++ b/src/effects/SkAlphaThresholdFilter.cpp
@@ -20,7 +20,7 @@
     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkAlphaThresholdFilterImpl)
 
 protected:
-    virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
+    void flatten(SkWriteBuffer&) const SK_OVERRIDE;
 
     virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&,
                                SkBitmap* result, SkIPoint* offset) const SK_OVERRIDE;
@@ -71,14 +71,14 @@
 
     virtual ~AlphaThresholdEffect() {};
 
-    virtual const char* name() const SK_OVERRIDE { return "Alpha Threshold"; }
+    const char* name() const SK_OVERRIDE { return "Alpha Threshold"; }
 
     float innerThreshold() const { return fInnerThreshold; }
     float outerThreshold() const { return fOuterThreshold; }
 
-    virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
+    void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
 private:
     AlphaThresholdEffect(GrTexture* texture,
@@ -102,9 +102,9 @@
         this->addTextureAccess(&fMaskTextureAccess);
     }
 
-    virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
+    bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
 
     GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
 
@@ -129,7 +129,7 @@
                           const TransformedCoordsArray&,
                           const TextureSamplerArray&) SK_OVERRIDE;
 
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
 private:
 
diff --git a/src/effects/SkArithmeticMode.cpp b/src/effects/SkArithmeticMode.cpp
index 468e9e4..cbedcb6 100644
--- a/src/effects/SkArithmeticMode.cpp
+++ b/src/effects/SkArithmeticMode.cpp
@@ -48,7 +48,7 @@
         fEnforcePMColor = enforcePMColor;
     }
 
-    virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE {
+    void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE {
         buffer.writeScalar(fK[0]);
         buffer.writeScalar(fK[1]);
         buffer.writeScalar(fK[2]);
@@ -250,7 +250,7 @@
                           const TransformedCoordsArray&,
                           const TextureSamplerArray&) SK_OVERRIDE;
 
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
     static void GenKey(const GrProcessor&, const GrGLCaps& caps, GrProcessorKeyBuilder* b);
 
@@ -272,14 +272,14 @@
 
     virtual ~GrArithmeticEffect();
 
-    virtual const char* name() const SK_OVERRIDE { return "Arithmetic"; }
+    const char* name() const SK_OVERRIDE { return "Arithmetic"; }
 
     virtual void getGLProcessorKey(const GrGLCaps& caps,
                                    GrProcessorKeyBuilder* b) const SK_OVERRIDE {
         GrGLArithmeticEffect::GenKey(*this, caps, b);
     }
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE {
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE {
         return SkNEW_ARGS(GrGLArithmeticEffect, (*this));
     }
 
@@ -292,9 +292,9 @@
     bool enforcePMColor() const { return fEnforcePMColor; }
 
 private:
-    virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
+    bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
 
     GrArithmeticEffect(float k1, float k2, float k3, float k4, bool enforcePMColor,
                        GrTexture* background);
diff --git a/src/effects/SkBlurMaskFilter.cpp b/src/effects/SkBlurMaskFilter.cpp
index 97ae436..7c534d6 100644
--- a/src/effects/SkBlurMaskFilter.cpp
+++ b/src/effects/SkBlurMaskFilter.cpp
@@ -39,7 +39,7 @@
     SkBlurMaskFilterImpl(SkScalar sigma, SkBlurStyle, uint32_t flags);
 
     // overrides from SkMaskFilter
-    virtual SkMask::Format getFormat() const SK_OVERRIDE;
+    SkMask::Format getFormat() const SK_OVERRIDE;
     virtual bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&,
                             SkIPoint* margin) const SK_OVERRIDE;
 
@@ -66,8 +66,8 @@
                                bool canOverwriteSrc) const SK_OVERRIDE;
 #endif
 
-    virtual void computeFastBounds(const SkRect&, SkRect*) const SK_OVERRIDE;
-    virtual bool asABlur(BlurRec*) const SK_OVERRIDE;
+    void computeFastBounds(const SkRect&, SkRect*) const SK_OVERRIDE;
+    bool asABlur(BlurRec*) const SK_OVERRIDE;
 
     SK_TO_STRING_OVERRIDE()
     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBlurMaskFilterImpl)
@@ -102,7 +102,7 @@
     }
 
     SkBlurMaskFilterImpl(SkReadBuffer&);
-    virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
+    void flatten(SkWriteBuffer&) const SK_OVERRIDE;
 
     SkScalar computeXformedSigma(const SkMatrix& ctm) const {
         bool ignoreTransform = SkToBool(fBlurFlags & SkBlurMaskFilter::kIgnoreTransform_BlurFlag);
@@ -607,12 +607,12 @@
 public:
     virtual ~GrRectBlurEffect();
 
-    virtual const char* name() const SK_OVERRIDE { return "RectBlur"; }
+    const char* name() const SK_OVERRIDE { return "RectBlur"; }
 
     virtual void getGLProcessorKey(const GrGLCaps& caps,
                                    GrProcessorKeyBuilder* b) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
     /**
      * Create a simple filter effect with custom bicubic coefficients.
@@ -641,9 +641,9 @@
 
 private:
     GrRectBlurEffect(const SkRect& rect, float sigma, GrTexture *blur_profile);
-    virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
+    bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
 
     static bool CreateBlurProfileTexture(GrContext *context, float sigma,
                                          GrTexture **blurProfileTexture);
@@ -667,7 +667,7 @@
                           const TransformedCoordsArray&,
                           const TextureSamplerArray&) SK_OVERRIDE;
 
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
 private:
     typedef GrGLProgramDataManager::UniformHandle UniformHandle;
@@ -876,7 +876,7 @@
     static GrFragmentProcessor* Create(GrContext* context, float sigma, const SkRRect&);
 
     virtual ~GrRRectBlurEffect() {};
-    virtual const char* name() const SK_OVERRIDE { return "GrRRectBlur"; }
+    const char* name() const SK_OVERRIDE { return "GrRRectBlur"; }
 
     const SkRRect& getRRect() const { return fRRect; }
     float getSigma() const { return fSigma; }
@@ -884,14 +884,14 @@
     virtual void getGLProcessorKey(const GrGLCaps& caps,
                                    GrProcessorKeyBuilder* b) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
 private:
     GrRRectBlurEffect(float sigma, const SkRRect&, GrTexture* profileTexture);
 
-    virtual bool onIsEqual(const GrFragmentProcessor& other) const SK_OVERRIDE;
+    bool onIsEqual(const GrFragmentProcessor& other) const SK_OVERRIDE;
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
 
     SkRRect             fRRect;
     float               fSigma;
@@ -1024,7 +1024,7 @@
                           const TransformedCoordsArray&,
                           const TextureSamplerArray&) SK_OVERRIDE;
 
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
 private:
     GrGLProgramDataManager::UniformHandle fProxyRectUniform;
diff --git a/src/effects/SkColorCubeFilter.cpp b/src/effects/SkColorCubeFilter.cpp
index 9e2b08c..78f8ba3 100644
--- a/src/effects/SkColorCubeFilter.cpp
+++ b/src/effects/SkColorCubeFilter.cpp
@@ -192,16 +192,16 @@
 
     virtual ~GrColorCubeEffect();
 
-    virtual const char* name() const SK_OVERRIDE { return "ColorCube"; }
+    const char* name() const SK_OVERRIDE { return "ColorCube"; }
 
     virtual void getGLProcessorKey(const GrGLCaps& caps,
                                    GrProcessorKeyBuilder* b) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
     int colorCubeSize() const { return fColorCubeAccess.getTexture()->width(); }
 
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput*) const SK_OVERRIDE;
+    void onComputeInvariantOutput(GrInvariantOutput*) const SK_OVERRIDE;
 
     class GLProcessor : public GrGLFragmentProcessor {
     public:
@@ -217,7 +217,7 @@
 
         static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKeyBuilder*);
 
-        virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+        void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
     private:
         GrGLProgramDataManager::UniformHandle fColorCubeSizeUni;
@@ -227,7 +227,7 @@
     };
 
 private:
-    virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE { return true; }
+    bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE { return true; }
 
     GrColorCubeEffect(GrTexture* colorCube);
 
diff --git a/src/effects/SkColorFilters.cpp b/src/effects/SkColorFilters.cpp
index f162d2d..95041b5 100644
--- a/src/effects/SkColorFilters.cpp
+++ b/src/effects/SkColorFilters.cpp
@@ -28,7 +28,7 @@
     SkXfermode::Mode getMode() const { return fMode; }
     SkPMColor getPMColor() const { return fPMColor; }
 
-    virtual bool asColorMode(SkColor* color, SkXfermode::Mode* mode) const SK_OVERRIDE {
+    bool asColorMode(SkColor* color, SkXfermode::Mode* mode) const SK_OVERRIDE {
         if (color) {
             *color = fColor;
         }
@@ -38,7 +38,7 @@
         return true;
     }
 
-    virtual uint32_t getFlags() const SK_OVERRIDE {
+    uint32_t getFlags() const SK_OVERRIDE {
         return fProc16 ? (kAlphaUnchanged_Flag | kHasFilter16_Flag) : 0;
     }
 
@@ -65,7 +65,7 @@
     }
 
 #ifndef SK_IGNORE_TO_STRING
-    virtual void toString(SkString* str) const SK_OVERRIDE {
+    void toString(SkString* str) const SK_OVERRIDE {
         str->append("SkModeColorFilter: color: 0x");
         str->appendHex(fColor);
         str->append(" mode: ");
@@ -74,12 +74,12 @@
 #endif
 
 #if SK_SUPPORT_GPU
-    virtual GrFragmentProcessor* asFragmentProcessor(GrContext*) const SK_OVERRIDE;
+    GrFragmentProcessor* asFragmentProcessor(GrContext*) const SK_OVERRIDE;
 #endif
     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkModeColorFilter)
 
 protected:
-    virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE {
+    void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE {
         buffer.writeColor(fColor);
         buffer.writeUInt(fMode);
     }
@@ -199,11 +199,11 @@
         GLProcessor::GenKey(*this, caps, b);
     }
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE {
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE {
         return SkNEW_ARGS(GLProcessor, (*this));
     }
 
-    virtual const char* name() const SK_OVERRIDE { return "ModeColorFilterEffect"; }
+    const char* name() const SK_OVERRIDE { return "ModeColorFilterEffect"; }
 
     SkXfermode::Mode mode() const { return fMode; }
     GrColor color() const { return fColor; }
@@ -271,12 +271,12 @@
         this->initClassID<ModeColorFilterEffect>();
     }
 
-    virtual bool onIsEqual(const GrFragmentProcessor& other) const SK_OVERRIDE {
+    bool onIsEqual(const GrFragmentProcessor& other) const SK_OVERRIDE {
         const ModeColorFilterEffect& s = other.cast<ModeColorFilterEffect>();
         return fMode == s.fMode && fColor == s.fColor;
     }
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
 
     SkXfermode::Mode fMode;
     GrColor fColor;
@@ -424,7 +424,7 @@
 public:
     Src_SkModeColorFilter(SkColor color) : INHERITED(color, SkXfermode::kSrc_Mode) {}
 
-    virtual uint32_t getFlags() const SK_OVERRIDE {
+    uint32_t getFlags() const SK_OVERRIDE {
         if (SkGetPackedA32(this->getPMColor()) == 0xFF) {
             return kAlphaUnchanged_Flag | kHasFilter16_Flag;
         } else {
@@ -454,7 +454,7 @@
         fColor32Proc = SkBlitRow::ColorProcFactory();
     }
 
-    virtual uint32_t getFlags() const SK_OVERRIDE {
+    uint32_t getFlags() const SK_OVERRIDE {
         if (SkGetPackedA32(this->getPMColor()) == 0xFF) {
             return kAlphaUnchanged_Flag | kHasFilter16_Flag;
         } else {
diff --git a/src/effects/SkColorMatrixFilter.cpp b/src/effects/SkColorMatrixFilter.cpp
index 2fa9e5d..c9cb186 100644
--- a/src/effects/SkColorMatrixFilter.cpp
+++ b/src/effects/SkColorMatrixFilter.cpp
@@ -334,14 +334,14 @@
         return SkNEW_ARGS(ColorMatrixEffect, (matrix));
     }
 
-    virtual const char* name() const SK_OVERRIDE { return "Color Matrix"; }
+    const char* name() const SK_OVERRIDE { return "Color Matrix"; }
 
     virtual void getGLProcessorKey(const GrGLCaps& caps,
                                    GrProcessorKeyBuilder* b) const SK_OVERRIDE {
         GLProcessor::GenKey(*this, caps, b);
     }
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE {
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE {
         return SkNEW_ARGS(GLProcessor, (*this));
     }
 
@@ -416,12 +416,12 @@
         this->initClassID<ColorMatrixEffect>();
     }
 
-    virtual bool onIsEqual(const GrFragmentProcessor& s) const SK_OVERRIDE {
+    bool onIsEqual(const GrFragmentProcessor& s) const SK_OVERRIDE {
         const ColorMatrixEffect& cme = s.cast<ColorMatrixEffect>();
         return cme.fMatrix == fMatrix;
     }
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE {
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE {
         // We only bother to check whether the alpha channel will be constant. If SkColorMatrix had
         // type flags it might be worth checking the other components.
 
diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp
index d18d3c3..263ac8c 100644
--- a/src/effects/SkDisplacementMapEffect.cpp
+++ b/src/effects/SkDisplacementMapEffect.cpp
@@ -314,7 +314,7 @@
 
     static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKeyBuilder*);
 
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
 private:
     SkDisplacementMapEffect::ChannelSelectorType fXChannelSelector;
@@ -347,7 +347,7 @@
         GrGLDisplacementMapEffect::GenKey(*this, caps, b);
     }
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE {
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE {
         return SkNEW_ARGS(GrGLDisplacementMapEffect, (*this));
     }
 
@@ -357,12 +357,12 @@
         { return fYChannelSelector; }
     const SkVector& scale() const { return fScale; }
 
-    virtual const char* name() const SK_OVERRIDE { return "DisplacementMap"; }
+    const char* name() const SK_OVERRIDE { return "DisplacementMap"; }
 
 private:
-    virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
+    bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
 
     GrDisplacementMapEffect(SkDisplacementMapEffect::ChannelSelectorType xChannelSelector,
                             SkDisplacementMapEffect::ChannelSelectorType yChannelSelector,
diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp
index b1271d8..2454dc1 100644
--- a/src/effects/SkLightingImageFilter.cpp
+++ b/src/effects/SkLightingImageFilter.cpp
@@ -290,7 +290,7 @@
     SkDiffuseLightingImageFilter(SkLight* light, SkScalar surfaceScale,
                                  SkScalar kd, SkImageFilter* input, const CropRect* cropRect,
                                  uint32_t uniqueID);
-    virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
+    void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
     virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&,
                                SkBitmap* result, SkIPoint* offset) const SK_OVERRIDE;
 #if SK_SUPPORT_GPU
@@ -320,7 +320,7 @@
     SkSpecularLightingImageFilter(SkLight* light, SkScalar surfaceScale, SkScalar ks,
                                   SkScalar shininess, SkImageFilter* input, const CropRect*,
                                   uint32_t uniqueID);
-    virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
+    void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
     virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&,
                                SkBitmap* result, SkIPoint* offset) const SK_OVERRIDE;
 #if SK_SUPPORT_GPU
@@ -347,9 +347,9 @@
     const SkMatrix& filterMatrix() const { return fFilterMatrix; }
 
 protected:
-    virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
+    bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE {
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE {
         // lighting shaders are complicated. We just throw up our hands.
         inout->mulByUnknownFourComponents();
     }
@@ -375,16 +375,16 @@
                                                     kd));
     }
 
-    virtual const char* name() const SK_OVERRIDE { return "DiffuseLighting"; }
+    const char* name() const SK_OVERRIDE { return "DiffuseLighting"; }
 
-    virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
+    void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
     SkScalar kd() const { return fKD; }
 
 private:
-    virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
+    bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
 
     GrDiffuseLightingEffect(GrTexture* texture,
                             const SkLight* light,
@@ -413,17 +413,17 @@
                                                      shininess));
     }
 
-    virtual const char* name() const SK_OVERRIDE { return "SpecularLighting"; }
+    const char* name() const SK_OVERRIDE { return "SpecularLighting"; }
 
-    virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
+    void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
     SkScalar ks() const { return fKS; }
     SkScalar shininess() const { return fShininess; }
 
 private:
-    virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
+    bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
 
     GrSpecularLightingEffect(GrTexture* texture,
                              const SkLight* light,
@@ -486,7 +486,7 @@
     virtual ~GrGLDistantLight() {}
     virtual void setData(const GrGLProgramDataManager&,
                          const SkLight* light) const SK_OVERRIDE;
-    virtual void emitSurfaceToLight(GrGLFPBuilder*, const char* z) SK_OVERRIDE;
+    void emitSurfaceToLight(GrGLFPBuilder*, const char* z) SK_OVERRIDE;
 
 private:
     typedef GrGLLight INHERITED;
@@ -500,7 +500,7 @@
     virtual ~GrGLPointLight() {}
     virtual void setData(const GrGLProgramDataManager&,
                          const SkLight* light) const SK_OVERRIDE;
-    virtual void emitSurfaceToLight(GrGLFPBuilder*, const char* z) SK_OVERRIDE;
+    void emitSurfaceToLight(GrGLFPBuilder*, const char* z) SK_OVERRIDE;
 
 private:
     typedef GrGLLight INHERITED;
@@ -514,8 +514,8 @@
     virtual ~GrGLSpotLight() {}
     virtual void setData(const GrGLProgramDataManager&,
                          const SkLight* light) const SK_OVERRIDE;
-    virtual void emitSurfaceToLight(GrGLFPBuilder*, const char* z) SK_OVERRIDE;
-    virtual void emitLightColor(GrGLFPBuilder*, const char *surfaceToLight) SK_OVERRIDE;
+    void emitSurfaceToLight(GrGLFPBuilder*, const char* z) SK_OVERRIDE;
+    void emitLightColor(GrGLFPBuilder*, const char *surfaceToLight) SK_OVERRIDE;
 
 private:
     typedef GrGLLight INHERITED;
@@ -592,9 +592,9 @@
         return fDirection;
     };
     SkPoint3 lightColor(const SkPoint3&) const { return color(); }
-    virtual LightType type() const SK_OVERRIDE { return kDistant_LightType; }
+    LightType type() const SK_OVERRIDE { return kDistant_LightType; }
     const SkPoint3& direction() const { return fDirection; }
-    virtual GrGLLight* createGLLight() const SK_OVERRIDE {
+    GrGLLight* createGLLight() const SK_OVERRIDE {
 #if SK_SUPPORT_GPU
         return SkNEW(GrGLDistantLight);
 #else
@@ -602,9 +602,9 @@
         return NULL;
 #endif
     }
-    virtual bool requiresFragmentPosition() const SK_OVERRIDE { return false; }
+    bool requiresFragmentPosition() const SK_OVERRIDE { return false; }
 
-    virtual bool isEqual(const SkLight& other) const SK_OVERRIDE {
+    bool isEqual(const SkLight& other) const SK_OVERRIDE {
         if (other.type() != kDistant_LightType) {
             return false;
         }
@@ -622,10 +622,10 @@
     SkDistantLight(const SkPoint3& direction, const SkPoint3& color)
       : INHERITED(color), fDirection(direction) {
     }
-    virtual SkLight* transform(const SkMatrix& matrix) const SK_OVERRIDE {
+    SkLight* transform(const SkMatrix& matrix) const SK_OVERRIDE {
         return new SkDistantLight(direction(), color());
     }
-    virtual void onFlattenLight(SkWriteBuffer& buffer) const SK_OVERRIDE {
+    void onFlattenLight(SkWriteBuffer& buffer) const SK_OVERRIDE {
         writePoint3(fDirection, buffer);
     }
 
@@ -649,9 +649,9 @@
         return direction;
     };
     SkPoint3 lightColor(const SkPoint3&) const { return color(); }
-    virtual LightType type() const SK_OVERRIDE { return kPoint_LightType; }
+    LightType type() const SK_OVERRIDE { return kPoint_LightType; }
     const SkPoint3& location() const { return fLocation; }
-    virtual GrGLLight* createGLLight() const SK_OVERRIDE {
+    GrGLLight* createGLLight() const SK_OVERRIDE {
 #if SK_SUPPORT_GPU
         return SkNEW(GrGLPointLight);
 #else
@@ -659,8 +659,8 @@
         return NULL;
 #endif
     }
-    virtual bool requiresFragmentPosition() const SK_OVERRIDE { return true; }
-    virtual bool isEqual(const SkLight& other) const SK_OVERRIDE {
+    bool requiresFragmentPosition() const SK_OVERRIDE { return true; }
+    bool isEqual(const SkLight& other) const SK_OVERRIDE {
         if (other.type() != kPoint_LightType) {
             return false;
         }
@@ -668,7 +668,7 @@
         return INHERITED::isEqual(other) &&
                fLocation == o.fLocation;
     }
-    virtual SkLight* transform(const SkMatrix& matrix) const SK_OVERRIDE {
+    SkLight* transform(const SkMatrix& matrix) const SK_OVERRIDE {
         SkPoint location2 = SkPoint::Make(fLocation.fX, fLocation.fY);
         matrix.mapPoints(&location2, 1);
         // Use X scale and Y scale on Z and average the result
@@ -685,7 +685,7 @@
 protected:
     SkPointLight(const SkPoint3& location, const SkPoint3& color)
      : INHERITED(color), fLocation(location) {}
-    virtual void onFlattenLight(SkWriteBuffer& buffer) const SK_OVERRIDE {
+    void onFlattenLight(SkWriteBuffer& buffer) const SK_OVERRIDE {
         writePoint3(fLocation, buffer);
     }
 
@@ -712,7 +712,7 @@
        fConeScale = SkScalarInvert(antiAliasThreshold);
     }
 
-    virtual SkLight* transform(const SkMatrix& matrix) const SK_OVERRIDE {
+    SkLight* transform(const SkMatrix& matrix) const SK_OVERRIDE {
         SkPoint location2 = SkPoint::Make(fLocation.fX, fLocation.fY);
         matrix.mapPoints(&location2, 1);
         // Use X scale and Y scale on Z and average the result
@@ -748,7 +748,7 @@
         }
         return color() * scale;
     }
-    virtual GrGLLight* createGLLight() const SK_OVERRIDE {
+    GrGLLight* createGLLight() const SK_OVERRIDE {
 #if SK_SUPPORT_GPU
         return SkNEW(GrGLSpotLight);
 #else
@@ -756,8 +756,8 @@
         return NULL;
 #endif
     }
-    virtual bool requiresFragmentPosition() const SK_OVERRIDE { return true; }
-    virtual LightType type() const SK_OVERRIDE { return kSpot_LightType; }
+    bool requiresFragmentPosition() const SK_OVERRIDE { return true; }
+    LightType type() const SK_OVERRIDE { return kSpot_LightType; }
     const SkPoint3& location() const { return fLocation; }
     const SkPoint3& target() const { return fTarget; }
     SkScalar specularExponent() const { return fSpecularExponent; }
@@ -791,7 +791,7 @@
        fS(s)
     {
     }
-    virtual void onFlattenLight(SkWriteBuffer& buffer) const SK_OVERRIDE {
+    void onFlattenLight(SkWriteBuffer& buffer) const SK_OVERRIDE {
         writePoint3(fLocation, buffer);
         writePoint3(fTarget, buffer);
         buffer.writeScalar(fSpecularExponent);
@@ -801,7 +801,7 @@
         writePoint3(fS, buffer);
     }
 
-    virtual bool isEqual(const SkLight& other) const SK_OVERRIDE {
+    bool isEqual(const SkLight& other) const SK_OVERRIDE {
         if (other.type() != kSpot_LightType) {
             return false;
         }
@@ -1225,7 +1225,7 @@
     /**
      * Subclasses of GrGLLightingEffect must call INHERITED::setData();
      */
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
 protected:
     virtual void emitLightFunc(GrGLFPBuilder*, SkString* funcName) = 0;
@@ -1243,8 +1243,8 @@
 class GrGLDiffuseLightingEffect  : public GrGLLightingEffect {
 public:
     GrGLDiffuseLightingEffect(const GrProcessor&);
-    virtual void emitLightFunc(GrGLFPBuilder*, SkString* funcName) SK_OVERRIDE;
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void emitLightFunc(GrGLFPBuilder*, SkString* funcName) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
 private:
     typedef GrGLLightingEffect INHERITED;
@@ -1257,8 +1257,8 @@
 class GrGLSpecularLightingEffect  : public GrGLLightingEffect {
 public:
     GrGLSpecularLightingEffect(const GrProcessor&);
-    virtual void emitLightFunc(GrGLFPBuilder*, SkString* funcName) SK_OVERRIDE;
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void emitLightFunc(GrGLFPBuilder*, SkString* funcName) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
 private:
     typedef GrGLLightingEffect INHERITED;
diff --git a/src/effects/SkLumaColorFilter.cpp b/src/effects/SkLumaColorFilter.cpp
index 47cc8f1..20e0659 100644
--- a/src/effects/SkLumaColorFilter.cpp
+++ b/src/effects/SkLumaColorFilter.cpp
@@ -63,14 +63,14 @@
         return SkRef(gLumaEffect);
     }
 
-    virtual const char* name() const SK_OVERRIDE { return "Luminance-to-Alpha"; }
+    const char* name() const SK_OVERRIDE { return "Luminance-to-Alpha"; }
 
     virtual void getGLProcessorKey(const GrGLCaps& caps,
                                    GrProcessorKeyBuilder* b) const SK_OVERRIDE {
         GLProcessor::GenKey(*this, caps, b);
     }
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE {
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE {
         return SkNEW_ARGS(GLProcessor, (*this));
     }
 
@@ -110,9 +110,9 @@
         this->initClassID<LumaColorFilterEffect>();
     }
 
-    virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE { return true; }
+    bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE { return true; }
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE {
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE {
         // The output is always black. The alpha value for the color passed in is arbitrary.
         inout->setToOther(kRGB_GrColorComponentFlags, GrColorPackRGBA(0, 0, 0, 0),
                           GrInvariantOutput::kWill_ReadInput);
diff --git a/src/effects/SkMagnifierImageFilter.cpp b/src/effects/SkMagnifierImageFilter.cpp
index e236da5..4b34755 100644
--- a/src/effects/SkMagnifierImageFilter.cpp
+++ b/src/effects/SkMagnifierImageFilter.cpp
@@ -42,11 +42,11 @@
 
     virtual ~GrMagnifierEffect() {};
 
-    virtual const char* name() const SK_OVERRIDE { return "Magnifier"; }
+    const char* name() const SK_OVERRIDE { return "Magnifier"; }
 
-    virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
+    void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
     float x_offset() const { return fXOffset; }
     float y_offset() const { return fYOffset; }
@@ -73,9 +73,9 @@
         this->initClassID<GrMagnifierEffect>();
     }
 
-    virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
+    bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
 
     GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
 
@@ -103,7 +103,7 @@
                           const TransformedCoordsArray&,
                           const TextureSamplerArray&) SK_OVERRIDE;
 
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
 private:
     UniformHandle       fOffsetVar;
diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp
index d18dc39..e895cac 100644
--- a/src/effects/SkMorphologyImageFilter.cpp
+++ b/src/effects/SkMorphologyImageFilter.cpp
@@ -307,20 +307,20 @@
 
     MorphologyType type() const { return fType; }
 
-    virtual const char* name() const SK_OVERRIDE { return "Morphology"; }
+    const char* name() const SK_OVERRIDE { return "Morphology"; }
 
-    virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
+    void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
 protected:
 
     MorphologyType fType;
 
 private:
-    virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
+    bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
 
     GrMorphologyEffect(GrTexture*, Direction, int radius, MorphologyType);
 
@@ -344,7 +344,7 @@
 
     static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKeyBuilder* b);
 
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
 private:
     int width() const { return GrMorphologyEffect::WidthFromRadius(fRadius); }
diff --git a/src/effects/SkPerlinNoiseShader.cpp b/src/effects/SkPerlinNoiseShader.cpp
index 37c96df..b721296 100644
--- a/src/effects/SkPerlinNoiseShader.cpp
+++ b/src/effects/SkPerlinNoiseShader.cpp
@@ -498,7 +498,7 @@
                           const TransformedCoordsArray&,
                           const TextureSamplerArray&) SK_OVERRIDE;
 
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
     static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKeyBuilder* b);
 
@@ -532,14 +532,14 @@
         SkDELETE(fPaintingData);
     }
 
-    virtual const char* name() const SK_OVERRIDE { return "PerlinNoise"; }
+    const char* name() const SK_OVERRIDE { return "PerlinNoise"; }
 
     virtual void getGLProcessorKey(const GrGLCaps& caps,
                                    GrProcessorKeyBuilder* b) const SK_OVERRIDE {
         GrGLPerlinNoise::GenKey(*this, caps, b);
     }
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE {
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE {
         return SkNEW_ARGS(GrGLPerlinNoise, (*this));
     }
 
@@ -553,7 +553,7 @@
     uint8_t alpha() const { return fAlpha; }
 
 private:
-    virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
+    bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
         const GrPerlinNoiseEffect& s = sBase.cast<GrPerlinNoiseEffect>();
         return fType == s.fType &&
                fPaintingData->fBaseFrequency == s.fPaintingData->fBaseFrequency &&
diff --git a/src/effects/SkTableColorFilter.cpp b/src/effects/SkTableColorFilter.cpp
index e12b3d7..37fdd90 100644
--- a/src/effects/SkTableColorFilter.cpp
+++ b/src/effects/SkTableColorFilter.cpp
@@ -40,10 +40,10 @@
         SkDELETE(fBitmap);
     }
 
-    virtual bool asComponentTable(SkBitmap* table) const SK_OVERRIDE;
+    bool asComponentTable(SkBitmap* table) const SK_OVERRIDE;
 
 #if SK_SUPPORT_GPU
-    virtual GrFragmentProcessor* asFragmentProcessor(GrContext* context) const SK_OVERRIDE;
+    GrFragmentProcessor* asFragmentProcessor(GrContext* context) const SK_OVERRIDE;
 #endif
 
     virtual void filterSpan(const SkPMColor src[], int count,
@@ -61,7 +61,7 @@
     };
 
 protected:
-    virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
+    void flatten(SkWriteBuffer&) const SK_OVERRIDE;
 
 private:
     mutable const SkBitmap* fBitmap; // lazily allocated
@@ -289,19 +289,19 @@
 
     virtual ~ColorTableEffect();
 
-    virtual const char* name() const SK_OVERRIDE { return "ColorTable"; }
+    const char* name() const SK_OVERRIDE { return "ColorTable"; }
 
-    virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
+    void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
     const GrTextureStripAtlas* atlas() const { return fAtlas; }
     int atlasRow() const { return fRow; }
 
 private:
-    virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
+    bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
 
     ColorTableEffect(GrTexture* texture, GrTextureStripAtlas* atlas, int row, unsigned flags);
 
@@ -329,7 +329,7 @@
                           const TransformedCoordsArray&,
                           const TextureSamplerArray&) SK_OVERRIDE;
 
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
     static void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKeyBuilder* b) {}
 
diff --git a/src/effects/gradients/SkGradientShaderPriv.h b/src/effects/gradients/SkGradientShaderPriv.h
index 125c7b0..99ad70c 100644
--- a/src/effects/gradients/SkGradientShaderPriv.h
+++ b/src/effects/gradients/SkGradientShaderPriv.h
@@ -166,7 +166,7 @@
     public:
         GradientShaderBaseContext(const SkGradientShaderBase& shader, const ContextRec&);
 
-        virtual uint32_t getFlags() const SK_OVERRIDE { return fFlags; }
+        uint32_t getFlags() const SK_OVERRIDE { return fFlags; }
 
     protected:
         SkMatrix    fDstToIndex;
@@ -180,7 +180,7 @@
         typedef SkShader::Context INHERITED;
     };
 
-    virtual bool isOpaque() const SK_OVERRIDE;
+    bool isOpaque() const SK_OVERRIDE;
 
     void getGradientTableBitmap(SkBitmap*) const;
 
@@ -220,7 +220,7 @@
 
 protected:
     SkGradientShaderBase(SkReadBuffer& );
-    virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
+    void flatten(SkWriteBuffer&) const SK_OVERRIDE;
     SK_TO_STRING_OVERRIDE()
 
     const SkMatrix fPtsToUnit;
@@ -237,7 +237,7 @@
 
     void commonAsAGradient(GradientInfo*, bool flipGrad = false) const;
 
-    virtual bool onAsLuminanceColor(SkColor*) const SK_OVERRIDE;
+    bool onAsLuminanceColor(SkColor*) const SK_OVERRIDE;
 
     /*
      * Takes in pointers to gradient color and Rec info as colorSrc and recSrc respectively.
@@ -368,9 +368,9 @@
                                     SkScalar** stops,
                                     SkShader::TileMode* tm);
 
-    virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
+    bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
 
     const GrCoordTransform& getCoordTransform() const { return fCoordTransform; }
 
@@ -399,7 +399,7 @@
     GrGLGradientEffect();
     virtual ~GrGLGradientEffect();
 
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
 protected:
     /**
diff --git a/src/effects/gradients/SkLinearGradient.cpp b/src/effects/gradients/SkLinearGradient.cpp
index 885a1b5..b34c796 100644
--- a/src/effects/gradients/SkLinearGradient.cpp
+++ b/src/effects/gradients/SkLinearGradient.cpp
@@ -495,14 +495,14 @@
 
     virtual ~GrLinearGradient() { }
 
-    virtual const char* name() const SK_OVERRIDE { return "Linear Gradient"; }
+    const char* name() const SK_OVERRIDE { return "Linear Gradient"; }
 
     virtual void getGLProcessorKey(const GrGLCaps& caps,
                                    GrProcessorKeyBuilder* b) const SK_OVERRIDE {
         GrGLLinearGradient::GenKey(*this, caps, b);
     }
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE {
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE {
         return SkNEW_ARGS(GrGLLinearGradient, (*this));
     }
 
diff --git a/src/effects/gradients/SkLinearGradient.h b/src/effects/gradients/SkLinearGradient.h
index 1a7688d..e63a1b8 100644
--- a/src/effects/gradients/SkLinearGradient.h
+++ b/src/effects/gradients/SkLinearGradient.h
@@ -14,22 +14,22 @@
 public:
     SkLinearGradient(const SkPoint pts[2], const Descriptor&);
 
-    virtual size_t contextSize() const SK_OVERRIDE;
+    size_t contextSize() const SK_OVERRIDE;
 
     class LinearGradientContext : public SkGradientShaderBase::GradientShaderBaseContext {
     public:
         LinearGradientContext(const SkLinearGradient&, const ContextRec&);
         ~LinearGradientContext() {}
 
-        virtual void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE;
-        virtual void shadeSpan16(int x, int y, uint16_t dstC[], int count) SK_OVERRIDE;
+        void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE;
+        void shadeSpan16(int x, int y, uint16_t dstC[], int count) SK_OVERRIDE;
 
     private:
         typedef SkGradientShaderBase::GradientShaderBaseContext INHERITED;
     };
 
-    virtual BitmapType asABitmap(SkBitmap*, SkMatrix*, TileMode*) const SK_OVERRIDE;
-    virtual GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE;
+    BitmapType asABitmap(SkBitmap*, SkMatrix*, TileMode*) const SK_OVERRIDE;
+    GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE;
     virtual bool asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix& viewM,
                                      const SkMatrix*,
                                      GrColor*, GrFragmentProcessor**) const SK_OVERRIDE;
@@ -39,8 +39,8 @@
 
 protected:
     SkLinearGradient(SkReadBuffer& buffer);
-    virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
-    virtual Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE;
+    void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
+    Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE;
 
 private:
     friend class SkGradientShader;
diff --git a/src/effects/gradients/SkRadialGradient.cpp b/src/effects/gradients/SkRadialGradient.cpp
index 4f451b7..5ea2e72 100644
--- a/src/effects/gradients/SkRadialGradient.cpp
+++ b/src/effects/gradients/SkRadialGradient.cpp
@@ -498,14 +498,14 @@
 
     virtual ~GrRadialGradient() { }
 
-    virtual const char* name() const SK_OVERRIDE { return "Radial Gradient"; }
+    const char* name() const SK_OVERRIDE { return "Radial Gradient"; }
 
     virtual void getGLProcessorKey(const GrGLCaps& caps,
                                    GrProcessorKeyBuilder* b) const SK_OVERRIDE {
         GrGLRadialGradient::GenKey(*this, caps, b);
     }
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE {
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE {
         return SkNEW_ARGS(GrGLRadialGradient, (*this));
     }
 
diff --git a/src/effects/gradients/SkRadialGradient.h b/src/effects/gradients/SkRadialGradient.h
index 56d4d7e..a690bb5 100644
--- a/src/effects/gradients/SkRadialGradient.h
+++ b/src/effects/gradients/SkRadialGradient.h
@@ -15,14 +15,14 @@
 public:
     SkRadialGradient(const SkPoint& center, SkScalar radius, const Descriptor&);
 
-    virtual size_t contextSize() const SK_OVERRIDE;
+    size_t contextSize() const SK_OVERRIDE;
 
     class RadialGradientContext : public SkGradientShaderBase::GradientShaderBaseContext {
     public:
         RadialGradientContext(const SkRadialGradient&, const ContextRec&);
 
-        virtual void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE;
-        virtual void shadeSpan16(int x, int y, uint16_t dstC[], int count) SK_OVERRIDE;
+        void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE;
+        void shadeSpan16(int x, int y, uint16_t dstC[], int count) SK_OVERRIDE;
 
     private:
         typedef SkGradientShaderBase::GradientShaderBaseContext INHERITED;
@@ -31,7 +31,7 @@
     virtual BitmapType asABitmap(SkBitmap* bitmap,
                                  SkMatrix* matrix,
                                  TileMode* xy) const SK_OVERRIDE;
-    virtual GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE;
+    GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE;
     virtual bool asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix& viewM,
                                      const SkMatrix*, GrColor*,
                                      GrFragmentProcessor**) const SK_OVERRIDE;
@@ -41,8 +41,8 @@
 
 protected:
     SkRadialGradient(SkReadBuffer& buffer);
-    virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
-    virtual Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE;
+    void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
+    Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE;
 
 private:
     friend class SkGradientShader;
diff --git a/src/effects/gradients/SkSweepGradient.cpp b/src/effects/gradients/SkSweepGradient.cpp
index bcb2b0d..f8ee458 100644
--- a/src/effects/gradients/SkSweepGradient.cpp
+++ b/src/effects/gradients/SkSweepGradient.cpp
@@ -217,14 +217,14 @@
     }
     virtual ~GrSweepGradient() { }
 
-    virtual const char* name() const SK_OVERRIDE { return "Sweep Gradient"; }
+    const char* name() const SK_OVERRIDE { return "Sweep Gradient"; }
 
     virtual void getGLProcessorKey(const GrGLCaps& caps,
                                    GrProcessorKeyBuilder* b) const SK_OVERRIDE {
         GrGLSweepGradient::GenKey(*this, caps, b);
     }
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE {
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE {
         return SkNEW_ARGS(GrGLSweepGradient, (*this));
     }
 
diff --git a/src/effects/gradients/SkSweepGradient.h b/src/effects/gradients/SkSweepGradient.h
index 9408fea..b72a08d 100644
--- a/src/effects/gradients/SkSweepGradient.h
+++ b/src/effects/gradients/SkSweepGradient.h
@@ -15,14 +15,14 @@
 public:
     SkSweepGradient(SkScalar cx, SkScalar cy, const Descriptor&);
 
-    virtual size_t contextSize() const SK_OVERRIDE;
+    size_t contextSize() const SK_OVERRIDE;
 
     class SweepGradientContext : public SkGradientShaderBase::GradientShaderBaseContext {
     public:
         SweepGradientContext(const SkSweepGradient& shader, const ContextRec&);
 
-        virtual void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE;
-        virtual void shadeSpan16(int x, int y, uint16_t dstC[], int count) SK_OVERRIDE;
+        void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE;
+        void shadeSpan16(int x, int y, uint16_t dstC[], int count) SK_OVERRIDE;
 
     private:
         typedef SkGradientShaderBase::GradientShaderBaseContext INHERITED;
@@ -32,7 +32,7 @@
                                  SkMatrix* matrix,
                                  TileMode* xy) const SK_OVERRIDE;
 
-    virtual GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE;
+    GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE;
 
     virtual bool asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix& viewM,
                                      const SkMatrix*, GrColor*,
@@ -42,8 +42,8 @@
     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSweepGradient)
 
 protected:
-    virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
-    virtual Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE;
+    void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
+    Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE;
 
 private:
     const SkPoint fCenter;
diff --git a/src/effects/gradients/SkTwoPointConicalGradient.h b/src/effects/gradients/SkTwoPointConicalGradient.h
index 217400e..ff12236 100644
--- a/src/effects/gradients/SkTwoPointConicalGradient.h
+++ b/src/effects/gradients/SkTwoPointConicalGradient.h
@@ -45,14 +45,14 @@
                               bool flippedGrad, const Descriptor&);
 
 
-    virtual size_t contextSize() const SK_OVERRIDE;
+    size_t contextSize() const SK_OVERRIDE;
 
     class TwoPointConicalGradientContext : public SkGradientShaderBase::GradientShaderBaseContext {
     public:
         TwoPointConicalGradientContext(const SkTwoPointConicalGradient&, const ContextRec&);
         ~TwoPointConicalGradientContext() {}
 
-        virtual void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE;
+        void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE;
 
     private:
         typedef SkGradientShaderBase::GradientShaderBaseContext INHERITED;
@@ -61,10 +61,10 @@
     virtual BitmapType asABitmap(SkBitmap* bitmap,
                                  SkMatrix* matrix,
                                  TileMode* xy) const SK_OVERRIDE;
-    virtual SkShader::GradientType asAGradient(GradientInfo* info) const  SK_OVERRIDE;
+    SkShader::GradientType asAGradient(GradientInfo* info) const  SK_OVERRIDE;
     virtual bool asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix&, const SkMatrix*,
                                      GrColor*, GrFragmentProcessor**) const SK_OVERRIDE;
-    virtual bool isOpaque() const SK_OVERRIDE;
+    bool isOpaque() const SK_OVERRIDE;
 
     SkScalar getCenterX1() const { return SkPoint::Distance(fCenter1, fCenter2); }
     SkScalar getStartRadius() const { return fRadius1; }
@@ -79,8 +79,8 @@
 
 protected:
     SkTwoPointConicalGradient(SkReadBuffer& buffer);
-    virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
-    virtual Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE;
+    void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
+    Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE;
 
 private:
     SkPoint fCenter1;
diff --git a/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp b/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp
index 8783de7..c9f2d2f 100644
--- a/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp
+++ b/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp
@@ -66,13 +66,13 @@
 
     virtual ~Edge2PtConicalEffect() {}
 
-    virtual const char* name() const SK_OVERRIDE {
+    const char* name() const SK_OVERRIDE {
         return "Two-Point Conical Gradient Edge Touching";
     }
 
-    virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
+    void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
     // The radial gradient parameters can collapse to a linear (instead of quadratic) equation.
     SkScalar center() const { return fCenterX1; }
@@ -80,7 +80,7 @@
     SkScalar radius() const { return fRadius0; }
 
 private:
-    virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
+    bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
         const Edge2PtConicalEffect& s = sBase.cast<Edge2PtConicalEffect>();
         return (INHERITED::onIsEqual(sBase) &&
                 this->fCenterX1 == s.fCenterX1 &&
@@ -147,7 +147,7 @@
                           const char* inputColor,
                           const TransformedCoordsArray&,
                           const TextureSamplerArray&) SK_OVERRIDE;
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
     static void GenKey(const GrProcessor&, const GrGLCaps& caps, GrProcessorKeyBuilder* b);
 
@@ -388,19 +388,19 @@
 
     virtual ~FocalOutside2PtConicalEffect() { }
 
-    virtual const char* name() const SK_OVERRIDE {
+    const char* name() const SK_OVERRIDE {
         return "Two-Point Conical Gradient Focal Outside";
     }
 
-    virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
+    void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
     bool isFlipped() const { return fIsFlipped; }
     SkScalar focal() const { return fFocalX; }
 
 private:
-    virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
+    bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
         const FocalOutside2PtConicalEffect& s = sBase.cast<FocalOutside2PtConicalEffect>();
         return (INHERITED::onIsEqual(sBase) &&
                 this->fFocalX == s.fFocalX &&
@@ -435,7 +435,7 @@
                           const char* inputColor,
                           const TransformedCoordsArray&,
                           const TextureSamplerArray&) SK_OVERRIDE;
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
     static void GenKey(const GrProcessor&, const GrGLCaps& caps, GrProcessorKeyBuilder* b);
 
@@ -610,20 +610,20 @@
 
     virtual ~FocalInside2PtConicalEffect() {}
 
-    virtual const char* name() const SK_OVERRIDE {
+    const char* name() const SK_OVERRIDE {
         return "Two-Point Conical Gradient Focal Inside";
     }
 
-    virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
+    void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
     SkScalar focal() const { return fFocalX; }
 
     typedef GLFocalInside2PtConicalEffect GLProcessor;
 
 private:
-    virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
+    bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
         const FocalInside2PtConicalEffect& s = sBase.cast<FocalInside2PtConicalEffect>();
         return (INHERITED::onIsEqual(sBase) &&
                 this->fFocalX == s.fFocalX);
@@ -656,7 +656,7 @@
                           const char* inputColor,
                           const TransformedCoordsArray&,
                           const TextureSamplerArray&) SK_OVERRIDE;
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
     static void GenKey(const GrProcessor&, const GrGLCaps& caps, GrProcessorKeyBuilder* b);
 
@@ -857,12 +857,12 @@
 
     virtual ~CircleInside2PtConicalEffect() {}
 
-    virtual const char* name() const SK_OVERRIDE { return "Two-Point Conical Gradient Inside"; }
+    const char* name() const SK_OVERRIDE { return "Two-Point Conical Gradient Inside"; }
 
     virtual void getGLProcessorKey(const GrGLCaps& caps,
                                    GrProcessorKeyBuilder* b) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
     SkScalar centerX() const { return fInfo.fCenterEnd.fX; }
     SkScalar centerY() const { return fInfo.fCenterEnd.fY; }
@@ -871,7 +871,7 @@
     SkScalar C() const { return fInfo.fC; }
 
 private:
-    virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
+    bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
         const CircleInside2PtConicalEffect& s = sBase.cast<CircleInside2PtConicalEffect>();
         return (INHERITED::onIsEqual(sBase) &&
                 this->fInfo.fCenterEnd == s.fInfo.fCenterEnd &&
@@ -907,7 +907,7 @@
                           const char* inputColor,
                           const TransformedCoordsArray&,
                           const TextureSamplerArray&) SK_OVERRIDE;
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
     static void GenKey(const GrProcessor&, const GrGLCaps& caps, GrProcessorKeyBuilder* b);
 
@@ -1081,11 +1081,11 @@
 
     virtual ~CircleOutside2PtConicalEffect() {}
 
-    virtual const char* name() const SK_OVERRIDE { return "Two-Point Conical Gradient Outside"; }
+    const char* name() const SK_OVERRIDE { return "Two-Point Conical Gradient Outside"; }
 
-    virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
+    void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
     SkScalar centerX() const { return fInfo.fCenterEnd.fX; }
     SkScalar centerY() const { return fInfo.fCenterEnd.fY; }
@@ -1096,7 +1096,7 @@
     bool isFlipped() const { return fIsFlipped; }
 
 private:
-    virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
+    bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
         const CircleOutside2PtConicalEffect& s = sBase.cast<CircleOutside2PtConicalEffect>();
         return (INHERITED::onIsEqual(sBase) &&
                 this->fInfo.fCenterEnd == s.fInfo.fCenterEnd &&
@@ -1144,7 +1144,7 @@
                           const char* inputColor,
                           const TransformedCoordsArray&,
                           const TextureSamplerArray&) SK_OVERRIDE;
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
     static void GenKey(const GrProcessor&, const GrGLCaps& caps, GrProcessorKeyBuilder* b);
 
diff --git a/src/effects/gradients/SkTwoPointRadialGradient.cpp b/src/effects/gradients/SkTwoPointRadialGradient.cpp
index 1a345bf..e0ea35e 100644
--- a/src/effects/gradients/SkTwoPointRadialGradient.cpp
+++ b/src/effects/gradients/SkTwoPointRadialGradient.cpp
@@ -406,7 +406,7 @@
                           const char* inputColor,
                           const TransformedCoordsArray&,
                           const TextureSamplerArray&) SK_OVERRIDE;
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
     static void GenKey(const GrProcessor&, const GrGLCaps& caps, GrProcessorKeyBuilder* b);
 
@@ -447,14 +447,14 @@
 
     virtual ~GrRadial2Gradient() { }
 
-    virtual const char* name() const SK_OVERRIDE { return "Two-Point Radial Gradient"; }
+    const char* name() const SK_OVERRIDE { return "Two-Point Radial Gradient"; }
 
     virtual void getGLProcessorKey(const GrGLCaps& caps,
                                    GrProcessorKeyBuilder* b) const SK_OVERRIDE {
         GrGLRadial2Gradient::GenKey(*this, caps, b);
     }
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE {
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE {
         return SkNEW_ARGS(GrGLRadial2Gradient, (*this));
     }
 
@@ -465,7 +465,7 @@
     bool isPosRoot() const { return SkToBool(fPosRoot); }
 
 private:
-    virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
+    bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
         const GrRadial2Gradient& s = sBase.cast<GrRadial2Gradient>();
         return (INHERITED::onIsEqual(sBase) &&
                 this->fCenterX1 == s.fCenterX1 &&
diff --git a/src/effects/gradients/SkTwoPointRadialGradient.h b/src/effects/gradients/SkTwoPointRadialGradient.h
index 43f9f57..ece3858 100644
--- a/src/effects/gradients/SkTwoPointRadialGradient.h
+++ b/src/effects/gradients/SkTwoPointRadialGradient.h
@@ -20,18 +20,18 @@
     virtual BitmapType asABitmap(SkBitmap* bitmap,
                                  SkMatrix* matrix,
                                  TileMode* xy) const SK_OVERRIDE;
-    virtual GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE;
+    GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE;
     virtual bool asFragmentProcessor(GrContext* context, const SkPaint&, const SkMatrix& viewM,
                                      const SkMatrix*, GrColor*,
                                      GrFragmentProcessor**)  const SK_OVERRIDE;
 
-    virtual size_t contextSize() const SK_OVERRIDE;
+    size_t contextSize() const SK_OVERRIDE;
 
     class TwoPointRadialGradientContext : public SkGradientShaderBase::GradientShaderBaseContext {
     public:
         TwoPointRadialGradientContext(const SkTwoPointRadialGradient&, const ContextRec&);
 
-        virtual void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE;
+        void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE;
 
     private:
         typedef SkGradientShaderBase::GradientShaderBaseContext INHERITED;
@@ -46,8 +46,8 @@
 
 protected:
     SkTwoPointRadialGradient(SkReadBuffer& buffer);
-    virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
-    virtual Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE;
+    void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
+    Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE;
 
 private:
     const SkPoint fCenter1;
diff --git a/src/fonts/SkFontMgr_fontconfig.cpp b/src/fonts/SkFontMgr_fontconfig.cpp
index bc667e7..a3989fc 100644
--- a/src/fonts/SkFontMgr_fontconfig.cpp
+++ b/src/fonts/SkFontMgr_fontconfig.cpp
@@ -142,10 +142,10 @@
     SkFontStyleSet_FC(FcPattern** matches, int count);
     virtual ~SkFontStyleSet_FC();
 
-    virtual int count() SK_OVERRIDE { return fRecCount; }
-    virtual void getStyle(int index, SkFontStyle*, SkString* style) SK_OVERRIDE;
-    virtual SkTypeface* createTypeface(int index) SK_OVERRIDE;
-    virtual SkTypeface* matchStyle(const SkFontStyle& pattern) SK_OVERRIDE;
+    int count() SK_OVERRIDE { return fRecCount; }
+    void getStyle(int index, SkFontStyle*, SkString* style) SK_OVERRIDE;
+    SkTypeface* createTypeface(int index) SK_OVERRIDE;
+    SkTypeface* matchStyle(const SkFontStyle& pattern) SK_OVERRIDE;
 
 private:
     struct Rec {
@@ -226,19 +226,19 @@
     }
 
 protected:
-    virtual int onCountFamilies() const SK_OVERRIDE {
+    int onCountFamilies() const SK_OVERRIDE {
         return fFamilyNames->count();
     }
 
-    virtual void onGetFamilyName(int index, SkString* familyName) const SK_OVERRIDE {
+    void onGetFamilyName(int index, SkString* familyName) const SK_OVERRIDE {
         familyName->set(fFamilyNames->atStr(index));
     }
 
-    virtual SkFontStyleSet* onCreateStyleSet(int index) const SK_OVERRIDE {
+    SkFontStyleSet* onCreateStyleSet(int index) const SK_OVERRIDE {
         return this->onMatchFamily(fFamilyNames->atStr(index));
     }
 
-    virtual SkFontStyleSet* onMatchFamily(const char familyName[]) const SK_OVERRIDE {
+    SkFontStyleSet* onMatchFamily(const char familyName[]) const SK_OVERRIDE {
         FCLocker lock;
 
         FcPattern* pattern = FcPatternCreate();
@@ -293,9 +293,9 @@
     virtual SkTypeface* onMatchFaceStyle(const SkTypeface*,
                                          const SkFontStyle&) const SK_OVERRIDE { return NULL; }
 
-    virtual SkTypeface* onCreateFromData(SkData*, int ttcIndex) const SK_OVERRIDE { return NULL; }
+    SkTypeface* onCreateFromData(SkData*, int ttcIndex) const SK_OVERRIDE { return NULL; }
 
-    virtual SkTypeface* onCreateFromStream(SkStream* stream, int ttcIndex) const SK_OVERRIDE {
+    SkTypeface* onCreateFromStream(SkStream* stream, int ttcIndex) const SK_OVERRIDE {
         const size_t length = stream->getLength();
         if (!length) {
             return NULL;
@@ -315,7 +315,7 @@
         return face;
     }
 
-    virtual SkTypeface* onCreateFromFile(const char path[], int ttcIndex) const SK_OVERRIDE {
+    SkTypeface* onCreateFromFile(const char path[], int ttcIndex) const SK_OVERRIDE {
         SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(path));
         return stream.get() ? this->createFromStream(stream, ttcIndex) : NULL;
     }
diff --git a/src/fonts/SkFontMgr_indirect.cpp b/src/fonts/SkFontMgr_indirect.cpp
index 39270b4..c438623 100644
--- a/src/fonts/SkFontMgr_indirect.cpp
+++ b/src/fonts/SkFontMgr_indirect.cpp
@@ -25,9 +25,9 @@
         : fOwner(SkRef(owner)), fFamilyIndex(familyIndex), fData(data)
     { }
 
-    virtual int count() SK_OVERRIDE { return fData->count(); }
+    int count() SK_OVERRIDE { return fData->count(); }
 
-    virtual void getStyle(int index, SkFontStyle* fs, SkString* style) SK_OVERRIDE {
+    void getStyle(int index, SkFontStyle* fs, SkString* style) SK_OVERRIDE {
         if (fs) {
             *fs = fData->at(index).fFontStyle;
         }
@@ -37,11 +37,11 @@
         }
     }
 
-    virtual SkTypeface* createTypeface(int index) SK_OVERRIDE {
+    SkTypeface* createTypeface(int index) SK_OVERRIDE {
         return fOwner->createTypefaceFromFontId(fData->at(index));
     }
 
-    virtual SkTypeface* matchStyle(const SkFontStyle& pattern) SK_OVERRIDE {
+    SkTypeface* matchStyle(const SkFontStyle& pattern) SK_OVERRIDE {
         if (fFamilyIndex >= 0) {
             SkFontIdentity id = fOwner->fProxy->matchIndexStyle(fFamilyIndex, pattern);
             return fOwner->createTypefaceFromFontId(id);
diff --git a/src/fonts/SkGScalerContext.cpp b/src/fonts/SkGScalerContext.cpp
index cacc270..7c44709 100644
--- a/src/fonts/SkGScalerContext.cpp
+++ b/src/fonts/SkGScalerContext.cpp
@@ -16,13 +16,13 @@
     virtual ~SkGScalerContext();
 
 protected:
-    virtual unsigned generateGlyphCount() SK_OVERRIDE;
-    virtual uint16_t generateCharToGlyph(SkUnichar) SK_OVERRIDE;
-    virtual void generateAdvance(SkGlyph*) SK_OVERRIDE;
-    virtual void generateMetrics(SkGlyph*) SK_OVERRIDE;
-    virtual void generateImage(const SkGlyph&) SK_OVERRIDE;
-    virtual void generatePath(const SkGlyph&, SkPath*) SK_OVERRIDE;
-    virtual void generateFontMetrics(SkPaint::FontMetrics*) SK_OVERRIDE;
+    unsigned generateGlyphCount() SK_OVERRIDE;
+    uint16_t generateCharToGlyph(SkUnichar) SK_OVERRIDE;
+    void generateAdvance(SkGlyph*) SK_OVERRIDE;
+    void generateMetrics(SkGlyph*) SK_OVERRIDE;
+    void generateImage(const SkGlyph&) SK_OVERRIDE;
+    void generatePath(const SkGlyph&, SkPath*) SK_OVERRIDE;
+    void generateFontMetrics(SkPaint::FontMetrics*) SK_OVERRIDE;
 
 private:
     SkGTypeface*     fFace;
diff --git a/src/fonts/SkGScalerContext.h b/src/fonts/SkGScalerContext.h
index 8ad2817..54af3c3 100644
--- a/src/fonts/SkGScalerContext.h
+++ b/src/fonts/SkGScalerContext.h
@@ -20,24 +20,24 @@
     const SkPaint& paint() const { return fPaint; }
 
 protected:
-    virtual SkScalerContext* onCreateScalerContext(const SkDescriptor*) const SK_OVERRIDE;
-    virtual void onFilterRec(SkScalerContextRec*) const SK_OVERRIDE;
+    SkScalerContext* onCreateScalerContext(const SkDescriptor*) const SK_OVERRIDE;
+    void onFilterRec(SkScalerContextRec*) const SK_OVERRIDE;
     virtual SkAdvancedTypefaceMetrics* onGetAdvancedTypefaceMetrics(
                                     SkAdvancedTypefaceMetrics::PerGlyphInfo,
                                     const uint32_t* glyphIDs,
                                     uint32_t glyphIDsCount) const SK_OVERRIDE;
-    virtual SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE;
-    virtual void onGetFontDescriptor(SkFontDescriptor*, bool* isLocal) const SK_OVERRIDE;
+    SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE;
+    void onGetFontDescriptor(SkFontDescriptor*, bool* isLocal) const SK_OVERRIDE;
 
     virtual int onCharsToGlyphs(const void* chars, Encoding encoding,
                                 uint16_t glyphs[], int glyphCount) const SK_OVERRIDE;
-    virtual int onCountGlyphs() const SK_OVERRIDE;
-    virtual int onGetUPEM() const SK_OVERRIDE;
+    int onCountGlyphs() const SK_OVERRIDE;
+    int onGetUPEM() const SK_OVERRIDE;
 
-    virtual void onGetFamilyName(SkString* familyName) const SK_OVERRIDE;
-    virtual SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const SK_OVERRIDE;
+    void onGetFamilyName(SkString* familyName) const SK_OVERRIDE;
+    SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const SK_OVERRIDE;
 
-    virtual int onGetTableTags(SkFontTableTag tags[]) const SK_OVERRIDE;
+    int onGetTableTags(SkFontTableTag tags[]) const SK_OVERRIDE;
     virtual size_t onGetTableData(SkFontTableTag, size_t offset,
                                   size_t length, void* data) const SK_OVERRIDE;
 
diff --git a/src/fonts/SkTestScalerContext.cpp b/src/fonts/SkTestScalerContext.cpp
index b148375..b9aa6c7 100644
--- a/src/fonts/SkTestScalerContext.cpp
+++ b/src/fonts/SkTestScalerContext.cpp
@@ -201,17 +201,17 @@
     }
 
 protected:
-    virtual unsigned generateGlyphCount() SK_OVERRIDE {
+    unsigned generateGlyphCount() SK_OVERRIDE {
         return fFace->onCountGlyphs();
     }
 
-    virtual uint16_t generateCharToGlyph(SkUnichar uni) SK_OVERRIDE {
+    uint16_t generateCharToGlyph(SkUnichar uni) SK_OVERRIDE {
         uint16_t glyph;
         (void) fFace->onCharsToGlyphs((const void *) &uni, SkTypeface::kUTF16_Encoding, &glyph, 1);
         return glyph;
     }
 
-    virtual void generateAdvance(SkGlyph* glyph) SK_OVERRIDE {
+    void generateAdvance(SkGlyph* glyph) SK_OVERRIDE {
         fFace->getAdvance(glyph);
 
         SkVector advance;
@@ -221,7 +221,7 @@
         glyph->fAdvanceY = SkScalarToFixed(advance.fY);
     }
 
-    virtual void generateMetrics(SkGlyph* glyph) SK_OVERRIDE {
+    void generateMetrics(SkGlyph* glyph) SK_OVERRIDE {
         fFace->getMetrics(glyph);
 
         SkVector advance;
@@ -248,7 +248,7 @@
         glyph->fMaskFormat = SkMask::kARGB32_Format;
     }
 
-    virtual void generateImage(const SkGlyph& glyph) SK_OVERRIDE {
+    void generateImage(const SkGlyph& glyph) SK_OVERRIDE {
         SkPath path;
         fFace->getPath(glyph, &path);
 
@@ -266,12 +266,12 @@
         canvas.drawPath(path, paint);
     }
 
-    virtual void generatePath(const SkGlyph& glyph, SkPath* path) SK_OVERRIDE {
+    void generatePath(const SkGlyph& glyph, SkPath* path) SK_OVERRIDE {
         fFace->getPath(glyph, path);
         path->transform(fMatrix);
     }
 
-    virtual void generateFontMetrics(SkPaint::FontMetrics* metrics) SK_OVERRIDE {
+    void generateFontMetrics(SkPaint::FontMetrics* metrics) SK_OVERRIDE {
         fFace->getFontMetrics(metrics);
         if (metrics) {
             SkScalar scale = fMatrix.getScaleY();
diff --git a/src/fonts/SkTestScalerContext.h b/src/fonts/SkTestScalerContext.h
index 3e6dc97..6a78e5a 100644
--- a/src/fonts/SkTestScalerContext.h
+++ b/src/fonts/SkTestScalerContext.h
@@ -66,36 +66,36 @@
     void getMetrics(SkGlyph* glyph);
     void getPath(const SkGlyph& glyph, SkPath* path);
 protected:
-    virtual SkScalerContext* onCreateScalerContext(const SkDescriptor* desc) const SK_OVERRIDE;
-    virtual void onFilterRec(SkScalerContextRec* rec) const SK_OVERRIDE;
+    SkScalerContext* onCreateScalerContext(const SkDescriptor* desc) const SK_OVERRIDE;
+    void onFilterRec(SkScalerContextRec* rec) const SK_OVERRIDE;
     virtual SkAdvancedTypefaceMetrics* onGetAdvancedTypefaceMetrics(
                                     SkAdvancedTypefaceMetrics::PerGlyphInfo ,
                                     const uint32_t* glyphIDs,
                                     uint32_t glyphIDsCount) const SK_OVERRIDE;
 
-    virtual SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE {
+    SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE {
         SkASSERT(0);  // don't expect to get here
         return NULL;
     }
 
-    virtual void onGetFontDescriptor(SkFontDescriptor* desc, bool* isLocal) const SK_OVERRIDE;
+    void onGetFontDescriptor(SkFontDescriptor* desc, bool* isLocal) const SK_OVERRIDE;
 
     virtual int onCharsToGlyphs(const void* chars, Encoding encoding,
                                 uint16_t glyphs[], int glyphCount) const SK_OVERRIDE;
 
-    virtual int onCountGlyphs() const SK_OVERRIDE {
+    int onCountGlyphs() const SK_OVERRIDE {
         return (int) fTestFont->fCharCodesCount;
     }
 
-    virtual int onGetUPEM() const SK_OVERRIDE {
+    int onGetUPEM() const SK_OVERRIDE {
         SkASSERT(0);  // don't expect to get here
         return 1;
     }
 
-    virtual void onGetFamilyName(SkString* familyName) const SK_OVERRIDE;
-    virtual SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const SK_OVERRIDE;
+    void onGetFamilyName(SkString* familyName) const SK_OVERRIDE;
+    SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const SK_OVERRIDE;
 
-    virtual int onGetTableTags(SkFontTableTag tags[]) const SK_OVERRIDE {
+    int onGetTableTags(SkFontTableTag tags[]) const SK_OVERRIDE {
         return 0;
     }
 
diff --git a/src/gpu/GrAAConvexPathRenderer.cpp b/src/gpu/GrAAConvexPathRenderer.cpp
index fcf38ef..784f685 100644
--- a/src/gpu/GrAAConvexPathRenderer.cpp
+++ b/src/gpu/GrAAConvexPathRenderer.cpp
@@ -524,7 +524,7 @@
 
     virtual ~QuadEdgeEffect() {}
 
-    virtual const char* name() const SK_OVERRIDE { return "QuadEdge"; }
+    const char* name() const SK_OVERRIDE { return "QuadEdge"; }
 
     const GrAttribute* inPosition() const { return fInPosition; }
     const GrAttribute* inQuadEdge() const { return fInQuadEdge; }
@@ -535,7 +535,7 @@
                     const GrBatchTracker&)
             : fColor(GrColor_ILLEGAL) {}
 
-        virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
+        void emitCode(const EmitArgs& args) SK_OVERRIDE {
             const QuadEdgeEffect& qe = args.fGP.cast<QuadEdgeEffect>();
             GrGLGPBuilder* pb = args.fPB;
             GrGLVertexBuilder* vsBuilder = pb->getVertexShaderBuilder();
@@ -622,7 +622,7 @@
         GLProcessor::GenKey(*this, bt, caps, b);
     }
 
-    virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE {
+    GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE {
         return SkNEW_ARGS(GLProcessor, (*this, bt));
     }
 
@@ -651,11 +651,11 @@
         fInQuadEdge = &this->addVertexAttrib(GrAttribute("inQuadEdge", kVec4f_GrVertexAttribType));
     }
 
-    virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE {
+    bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE {
         return true;
     }
 
-    virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE {
+    void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE {
         out->setUnknownSingleComponent();
     }
 
diff --git a/src/gpu/GrBitmapTextContext.h b/src/gpu/GrBitmapTextContext.h
index f1e6b03..bffacd5 100644
--- a/src/gpu/GrBitmapTextContext.h
+++ b/src/gpu/GrBitmapTextContext.h
@@ -39,7 +39,7 @@
 
     GrBitmapTextContext(GrContext*, const SkDeviceProperties&);
 
-    virtual bool canDraw(const SkPaint& paint, const SkMatrix& viewMatrix) SK_OVERRIDE;
+    bool canDraw(const SkPaint& paint, const SkMatrix& viewMatrix) SK_OVERRIDE;
 
     virtual void onDrawText(const GrPaint&, const SkPaint&, const SkMatrix& viewMatrix,
                             const char text[], size_t byteLength,
diff --git a/src/gpu/GrDefaultGeoProcFactory.cpp b/src/gpu/GrDefaultGeoProcFactory.cpp
index b64c456..49c663d 100644
--- a/src/gpu/GrDefaultGeoProcFactory.cpp
+++ b/src/gpu/GrDefaultGeoProcFactory.cpp
@@ -35,7 +35,7 @@
                                            coverage));
     }
 
-    virtual const char* name() const SK_OVERRIDE { return "DefaultGeometryProcessor"; }
+    const char* name() const SK_OVERRIDE { return "DefaultGeometryProcessor"; }
 
     const GrAttribute* inPosition() const { return fInPosition; }
     const GrAttribute* inColor() const { return fInColor; }
@@ -83,7 +83,7 @@
         GLProcessor(const GrGeometryProcessor& gp, const GrBatchTracker&)
             : fColor(GrColor_ILLEGAL), fCoverage(0xff) {}
 
-        virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
+        void emitCode(const EmitArgs& args) SK_OVERRIDE {
             const DefaultGeoProc& gp = args.fGP.cast<DefaultGeoProc>();
             GrGLGPBuilder* pb = args.fPB;
             GrGLVertexBuilder* vs = pb->getVertexShaderBuilder();
@@ -174,7 +174,7 @@
         GLProcessor::GenKey(*this, bt, caps, b);
     }
 
-    virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE {
+    GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE {
         return SkNEW_ARGS(GLProcessor, (*this, bt));
     }
 
@@ -212,12 +212,12 @@
         }
     }
 
-    virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE {
+    bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE {
         const DefaultGeoProc& gp = other.cast<DefaultGeoProc>();
         return gp.fFlags == this->fFlags;
     }
 
-    virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE {
+    void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE {
         if (fInCoverage) {
             out->setUnknownSingleComponent();
         } else {
diff --git a/src/gpu/GrDistanceFieldTextContext.h b/src/gpu/GrDistanceFieldTextContext.h
index 8f73b06..c2d0b6d 100644
--- a/src/gpu/GrDistanceFieldTextContext.h
+++ b/src/gpu/GrDistanceFieldTextContext.h
@@ -50,7 +50,7 @@
 
     GrDistanceFieldTextContext(GrContext*, const SkDeviceProperties&, bool enable);
 
-    virtual bool canDraw(const SkPaint& paint, const SkMatrix& viewMatrix) SK_OVERRIDE;
+    bool canDraw(const SkPaint& paint, const SkMatrix& viewMatrix) SK_OVERRIDE;
 
     virtual void onDrawText(const GrPaint&, const SkPaint&, const SkMatrix& viewMatrix,
                             const char text[], size_t byteLength,
diff --git a/src/gpu/GrDrawTarget.h b/src/gpu/GrDrawTarget.h
index b1d1492..0e211ba 100644
--- a/src/gpu/GrDrawTarget.h
+++ b/src/gpu/GrDrawTarget.h
@@ -837,7 +837,7 @@
      * Release any resources that are cached but not currently in use. This
      * is intended to give an application some recourse when resources are low.
      */
-    virtual void purgeResources() SK_OVERRIDE {
+    void purgeResources() SK_OVERRIDE {
         // The clip mask manager can rebuild all its clip masks so just
         // get rid of them all.
         fClipMaskManager.purgeResources();
diff --git a/src/gpu/GrGeometryProcessor.h b/src/gpu/GrGeometryProcessor.h
index d88f3e6..ad75d23 100644
--- a/src/gpu/GrGeometryProcessor.h
+++ b/src/gpu/GrGeometryProcessor.h
@@ -375,7 +375,7 @@
                                    const GrGLCaps& caps,
                                    GrProcessorKeyBuilder* b) const SK_OVERRIDE;
 
-    virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE;
+    GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE;
 
 private:
     GrPathProcessor(GrColor color, const SkMatrix& viewMatrix, const SkMatrix& localMatrix);
diff --git a/src/gpu/GrInOrderDrawBuffer.h b/src/gpu/GrInOrderDrawBuffer.h
index 5a616e1..d415e49 100644
--- a/src/gpu/GrInOrderDrawBuffer.h
+++ b/src/gpu/GrInOrderDrawBuffer.h
@@ -256,7 +256,7 @@
     // Records any trace markers for a command after adding it to the buffer.
     void recordTraceMarkersIfNecessary();
 
-    virtual bool isIssued(uint32_t drawID) SK_OVERRIDE { return drawID != fDrawID; }
+    bool isIssued(uint32_t drawID) SK_OVERRIDE { return drawID != fDrawID; }
 
     // TODO: Use a single allocator for commands and records
     enum {
diff --git a/src/gpu/GrOvalRenderer.cpp b/src/gpu/GrOvalRenderer.cpp
index b43c485..7f93bbe 100644
--- a/src/gpu/GrOvalRenderer.cpp
+++ b/src/gpu/GrOvalRenderer.cpp
@@ -73,7 +73,7 @@
     const GrAttribute* inCircleEdge() const { return fInCircleEdge; }
     virtual ~CircleEdgeEffect() {}
 
-    virtual const char* name() const SK_OVERRIDE { return "CircleEdge"; }
+    const char* name() const SK_OVERRIDE { return "CircleEdge"; }
 
     inline bool isStroked() const { return fStroke; }
 
@@ -83,7 +83,7 @@
                     const GrBatchTracker&)
             : fColor(GrColor_ILLEGAL) {}
 
-        virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
+        void emitCode(const EmitArgs& args) SK_OVERRIDE {
             const CircleEdgeEffect& ce = args.fGP.cast<CircleEdgeEffect>();
             GrGLGPBuilder* pb = args.fPB;
             const BatchTracker& local = args.fBT.cast<BatchTracker>();
@@ -157,7 +157,7 @@
         GLProcessor::GenKey(*this, bt, caps, b);
     }
 
-    virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE {
+    GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE {
         return SkNEW_ARGS(GLProcessor, (*this, bt));
     }
 
@@ -188,12 +188,12 @@
         fStroke = stroke;
     }
 
-    virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE {
+    bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE {
         const CircleEdgeEffect& cee = other.cast<CircleEdgeEffect>();
         return cee.fStroke == fStroke;
     }
 
-    virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE {
+    void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE {
         out->setUnknownSingleComponent();
     }
 
@@ -241,7 +241,7 @@
 
     virtual ~EllipseEdgeEffect() {}
 
-    virtual const char* name() const SK_OVERRIDE { return "EllipseEdge"; }
+    const char* name() const SK_OVERRIDE { return "EllipseEdge"; }
 
     const GrAttribute* inPosition() const { return fInPosition; }
     const GrAttribute* inEllipseOffset() const { return fInEllipseOffset; }
@@ -255,7 +255,7 @@
                     const GrBatchTracker&)
             : fColor(GrColor_ILLEGAL) {}
 
-        virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
+        void emitCode(const EmitArgs& args) SK_OVERRIDE {
             const EllipseEdgeEffect& ee = args.fGP.cast<EllipseEdgeEffect>();
             GrGLGPBuilder* pb = args.fPB;
             const BatchTracker& local = args.fBT.cast<BatchTracker>();
@@ -351,7 +351,7 @@
         GLProcessor::GenKey(*this, bt, caps, b);
     }
 
-    virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE {
+    GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE {
         return SkNEW_ARGS(GLProcessor, (*this, bt));
     }
 
@@ -384,12 +384,12 @@
         fStroke = stroke;
     }
 
-    virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE {
+    bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE {
         const EllipseEdgeEffect& eee = other.cast<EllipseEdgeEffect>();
         return eee.fStroke == fStroke;
     }
 
-    virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE {
+    void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE {
         out->setUnknownSingleComponent();
     }
 
@@ -441,7 +441,7 @@
 
     virtual ~DIEllipseEdgeEffect() {}
 
-    virtual const char* name() const SK_OVERRIDE { return "DIEllipseEdge"; }
+    const char* name() const SK_OVERRIDE { return "DIEllipseEdge"; }
 
     const GrAttribute* inPosition() const { return fInPosition; }
     const GrAttribute* inEllipseOffsets0() const { return fInEllipseOffsets0; }
@@ -455,7 +455,7 @@
                     const GrBatchTracker&)
             : fColor(GrColor_ILLEGAL) {}
 
-        virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
+        void emitCode(const EmitArgs& args) SK_OVERRIDE {
             const DIEllipseEdgeEffect& ee = args.fGP.cast<DIEllipseEdgeEffect>();
             GrGLGPBuilder* pb = args.fPB;
             const BatchTracker& local = args.fBT.cast<BatchTracker>();
@@ -566,7 +566,7 @@
         GLProcessor::GenKey(*this, bt, caps, b);
     }
 
-    virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE {
+    GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE {
         return SkNEW_ARGS(GLProcessor, (*this, bt));
     }
 
@@ -599,12 +599,12 @@
         fMode = mode;
     }
 
-    virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE {
+    bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE {
         const DIEllipseEdgeEffect& eee = other.cast<DIEllipseEdgeEffect>();
         return eee.fMode == fMode;
     }
 
-    virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE {
+    void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE {
         out->setUnknownSingleComponent();
     }
 
diff --git a/src/gpu/GrPathRendering.cpp b/src/gpu/GrPathRendering.cpp
index 1b0ce19..c7f2d9d 100644
--- a/src/gpu/GrPathRendering.cpp
+++ b/src/gpu/GrPathRendering.cpp
@@ -24,11 +24,11 @@
         SkDescriptor::Free(fDesc);
     }
 
-    virtual int getNumPaths() SK_OVERRIDE {
+    int getNumPaths() SK_OVERRIDE {
         return fScalerContext->getGlyphCount();
     }
 
-    virtual void generatePath(int glyphID, SkPath* out) SK_OVERRIDE {
+    void generatePath(int glyphID, SkPath* out) SK_OVERRIDE {
         SkGlyph skGlyph;
         skGlyph.init(SkGlyph::MakeID(glyphID));
         fScalerContext->getMetrics(&skGlyph);
@@ -37,7 +37,7 @@
         out->transform(fFlipMatrix); // Load glyphs with the inverted y-direction.
     }
 
-    virtual bool isEqualTo(const SkDescriptor& desc) const SK_OVERRIDE {
+    bool isEqualTo(const SkDescriptor& desc) const SK_OVERRIDE {
         return fDesc->equals(desc);
     }
 
diff --git a/src/gpu/GrRectanizer_pow2.h b/src/gpu/GrRectanizer_pow2.h
index 7bf2b86..59ef864 100644
--- a/src/gpu/GrRectanizer_pow2.h
+++ b/src/gpu/GrRectanizer_pow2.h
@@ -24,15 +24,15 @@
 
     virtual ~GrRectanizerPow2() { }
 
-    virtual void reset() SK_OVERRIDE {
+    void reset() SK_OVERRIDE {
         fNextStripY = 0;
         fAreaSoFar = 0;
         sk_bzero(fRows, sizeof(fRows));
     }
 
-    virtual bool addRect(int w, int h, SkIPoint16* loc) SK_OVERRIDE;
+    bool addRect(int w, int h, SkIPoint16* loc) SK_OVERRIDE;
 
-    virtual float percentFull() const SK_OVERRIDE {
+    float percentFull() const SK_OVERRIDE {
         return fAreaSoFar / ((float)this->width() * this->height());
     }
 
diff --git a/src/gpu/GrRectanizer_skyline.h b/src/gpu/GrRectanizer_skyline.h
index 21043c0..c9f9255 100644
--- a/src/gpu/GrRectanizer_skyline.h
+++ b/src/gpu/GrRectanizer_skyline.h
@@ -21,7 +21,7 @@
 
     virtual ~GrRectanizerSkyline() { }
 
-    virtual void reset() SK_OVERRIDE{
+    void reset() SK_OVERRIDE{
         fAreaSoFar = 0;
         fSkyline.reset();
         SkylineSegment* seg = fSkyline.append(1);
@@ -30,9 +30,9 @@
         seg->fWidth = this->width();
     }
 
-    virtual bool addRect(int w, int h, SkIPoint16* loc) SK_OVERRIDE;
+    bool addRect(int w, int h, SkIPoint16* loc) SK_OVERRIDE;
 
-    virtual float percentFull() const SK_OVERRIDE {
+    float percentFull() const SK_OVERRIDE {
         return fAreaSoFar / ((float)this->width() * this->height());
     }
 
diff --git a/src/gpu/GrStencilAndCoverTextContext.h b/src/gpu/GrStencilAndCoverTextContext.h
index 89c94eb..c7b06cc 100644
--- a/src/gpu/GrStencilAndCoverTextContext.h
+++ b/src/gpu/GrStencilAndCoverTextContext.h
@@ -69,7 +69,7 @@
 
     GrStencilAndCoverTextContext(GrContext*, const SkDeviceProperties&);
 
-    virtual bool canDraw(const SkPaint& paint, const SkMatrix& viewMatrix) SK_OVERRIDE;
+    bool canDraw(const SkPaint& paint, const SkMatrix& viewMatrix) SK_OVERRIDE;
 
     virtual void onDrawText(const GrPaint&, const SkPaint&, const SkMatrix& viewMatrix,
                             const char text[], size_t byteLength,
diff --git a/src/gpu/SkGpuDevice.h b/src/gpu/SkGpuDevice.h
index 7731100..56dad1b 100644
--- a/src/gpu/SkGpuDevice.h
+++ b/src/gpu/SkGpuDevice.h
@@ -68,13 +68,13 @@
     // set all pixels to 0
     void clearAll();
 
-    virtual GrRenderTarget* accessRenderTarget() SK_OVERRIDE;
+    GrRenderTarget* accessRenderTarget() SK_OVERRIDE;
 
-    virtual SkImageInfo imageInfo() const SK_OVERRIDE {
+    SkImageInfo imageInfo() const SK_OVERRIDE {
         return fRenderTarget ? fRenderTarget->surfacePriv().info() : SkImageInfo::MakeUnknown();
     }
 
-    virtual void drawPaint(const SkDraw&, const SkPaint& paint) SK_OVERRIDE;
+    void drawPaint(const SkDraw&, const SkPaint& paint) SK_OVERRIDE;
     virtual void drawPoints(const SkDraw&, SkCanvas::PointMode mode, size_t count,
                             const SkPoint[], const SkPaint& paint) SK_OVERRIDE;
     virtual void drawRect(const SkDraw&, const SkRect& r,
@@ -112,14 +112,14 @@
     virtual void drawDevice(const SkDraw&, SkBaseDevice*, int x, int y,
                             const SkPaint&) SK_OVERRIDE;
 
-    virtual void flush() SK_OVERRIDE;
+    void flush() SK_OVERRIDE;
 
-    virtual void onAttachToCanvas(SkCanvas* canvas) SK_OVERRIDE;
-    virtual void onDetachFromCanvas() SK_OVERRIDE;
+    void onAttachToCanvas(SkCanvas* canvas) SK_OVERRIDE;
+    void onDetachFromCanvas() SK_OVERRIDE;
 
-    virtual const SkBitmap& onAccessBitmap() SK_OVERRIDE;
+    const SkBitmap& onAccessBitmap() SK_OVERRIDE;
 
-    virtual bool canHandleImageFilter(const SkImageFilter*) SK_OVERRIDE;
+    bool canHandleImageFilter(const SkImageFilter*) SK_OVERRIDE;
     virtual bool filterImage(const SkImageFilter*, const SkBitmap&,
                              const SkImageFilter::Context&,
                              SkBitmap*, SkIPoint*) SK_OVERRIDE;
@@ -129,8 +129,8 @@
                        SkBitmap* result, SkIPoint* offset);
 
 protected:
-    virtual bool onReadPixels(const SkImageInfo&, void*, size_t, int, int) SK_OVERRIDE;
-    virtual bool onWritePixels(const SkImageInfo&, const void*, size_t, int, int) SK_OVERRIDE;
+    bool onReadPixels(const SkImageInfo&, void*, size_t, int, int) SK_OVERRIDE;
+    bool onWritePixels(const SkImageInfo&, const void*, size_t, int, int) SK_OVERRIDE;
     bool onShouldDisableLCD(const SkPaint&) const SK_OVERRIDE;
 
     /**  PRIVATE / EXPERIMENTAL -- do not call */
@@ -155,13 +155,13 @@
 
     SkGpuDevice(GrSurface*, const SkSurfaceProps&, unsigned flags = 0);
 
-    virtual SkBaseDevice* onCreateCompatibleDevice(const CreateInfo&) SK_OVERRIDE;
+    SkBaseDevice* onCreateCompatibleDevice(const CreateInfo&) SK_OVERRIDE;
 
-    virtual SkSurface* newSurface(const SkImageInfo&, const SkSurfaceProps&) SK_OVERRIDE;
+    SkSurface* newSurface(const SkImageInfo&, const SkSurfaceProps&) SK_OVERRIDE;
 
-    virtual SkImageFilter::Cache* getImageFilterCache() SK_OVERRIDE;
+    SkImageFilter::Cache* getImageFilterCache() SK_OVERRIDE;
 
-    virtual bool forceConservativeRasterClip() const SK_OVERRIDE { return true; }
+    bool forceConservativeRasterClip() const SK_OVERRIDE { return true; }
 
     // sets the render target and clip on context
     void prepareDraw(const SkDraw&);
diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp
index d1fc6f0..49d3c6b 100644
--- a/src/gpu/SkGr.cpp
+++ b/src/gpu/SkGr.cpp
@@ -122,7 +122,7 @@
 private:
     GrResourceKey fKey;
 
-    virtual void onChange() SK_OVERRIDE {
+    void onChange() SK_OVERRIDE {
         const GrResourceInvalidatedMessage message = { fKey };
         SkMessageBus<GrResourceInvalidatedMessage>::Post(message);
     }
diff --git a/src/gpu/effects/GrBezierEffect.cpp b/src/gpu/effects/GrBezierEffect.cpp
index e846b79..e16601d 100644
--- a/src/gpu/effects/GrBezierEffect.cpp
+++ b/src/gpu/effects/GrBezierEffect.cpp
@@ -24,7 +24,7 @@
     GrGLConicEffect(const GrGeometryProcessor&,
                     const GrBatchTracker&);
 
-    virtual void emitCode(const EmitArgs&) SK_OVERRIDE;
+    void emitCode(const EmitArgs&) SK_OVERRIDE;
 
     static inline void GenKey(const GrGeometryProcessor&,
                               const GrBatchTracker&,
@@ -258,7 +258,7 @@
     GrGLQuadEffect(const GrGeometryProcessor&,
                    const GrBatchTracker&);
 
-    virtual void emitCode(const EmitArgs&) SK_OVERRIDE;
+    void emitCode(const EmitArgs&) SK_OVERRIDE;
 
     static inline void GenKey(const GrGeometryProcessor&,
                               const GrBatchTracker&,
@@ -478,7 +478,7 @@
     GrGLCubicEffect(const GrGeometryProcessor&,
                     const GrBatchTracker&);
 
-    virtual void emitCode(const EmitArgs&) SK_OVERRIDE;
+    void emitCode(const EmitArgs&) SK_OVERRIDE;
 
     static inline void GenKey(const GrGeometryProcessor&,
                               const GrBatchTracker&,
diff --git a/src/gpu/effects/GrBezierEffect.h b/src/gpu/effects/GrBezierEffect.h
index 1bd93b6..f31542f 100644
--- a/src/gpu/effects/GrBezierEffect.h
+++ b/src/gpu/effects/GrBezierEffect.h
@@ -90,7 +90,7 @@
 
     virtual ~GrConicEffect();
 
-    virtual const char* name() const SK_OVERRIDE { return "Conic"; }
+    const char* name() const SK_OVERRIDE { return "Conic"; }
 
     inline const GrAttribute* inPosition() const { return fInPosition; }
     inline const GrAttribute* inConicCoeffs() const { return fInConicCoeffs; }
@@ -102,7 +102,7 @@
                                    const GrGLCaps& caps,
                                    GrProcessorKeyBuilder* b) const SK_OVERRIDE;
 
-    virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE;
+    GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE;
 
     void initBatchTracker(GrBatchTracker*, const InitBT&) const SK_OVERRIDE;
     bool onCanMakeEqual(const GrBatchTracker&,
@@ -113,9 +113,9 @@
     GrConicEffect(GrColor, const SkMatrix& viewMatrix, uint8_t coverage, GrPrimitiveEdgeType,
                   const SkMatrix& localMatrix);
 
-    virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
+    bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
 
-    virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE {
+    void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE {
         out->setUnknownSingleComponent();
     }
 
@@ -174,7 +174,7 @@
 
     virtual ~GrQuadEffect();
 
-    virtual const char* name() const SK_OVERRIDE { return "Quad"; }
+    const char* name() const SK_OVERRIDE { return "Quad"; }
 
     inline const GrAttribute* inPosition() const { return fInPosition; }
     inline const GrAttribute* inHairQuadEdge() const { return fInHairQuadEdge; }
@@ -186,7 +186,7 @@
                                    const GrGLCaps& caps,
                                    GrProcessorKeyBuilder* b) const SK_OVERRIDE;
 
-    virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE;
+    GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE;
 
     void initBatchTracker(GrBatchTracker*, const InitBT&) const SK_OVERRIDE;
     bool onCanMakeEqual(const GrBatchTracker&,
@@ -197,9 +197,9 @@
     GrQuadEffect(GrColor, const SkMatrix& viewMatrix, uint8_t coverage, GrPrimitiveEdgeType,
                  const SkMatrix& localMatrix);
 
-    virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
+    bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
 
-    virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE {
+    void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE {
         out->setUnknownSingleComponent();
     }
 
@@ -254,7 +254,7 @@
 
     virtual ~GrCubicEffect();
 
-    virtual const char* name() const SK_OVERRIDE { return "Cubic"; }
+    const char* name() const SK_OVERRIDE { return "Cubic"; }
 
     inline const GrAttribute* inPosition() const { return fInPosition; }
     inline const GrAttribute* inCubicCoeffs() const { return fInCubicCoeffs; }
@@ -266,7 +266,7 @@
                                    const GrGLCaps& caps,
                                    GrProcessorKeyBuilder* b) const SK_OVERRIDE;
 
-    virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE;
+    GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE;
 
     void initBatchTracker(GrBatchTracker*, const InitBT&) const SK_OVERRIDE;
     bool onCanMakeEqual(const GrBatchTracker&,
@@ -276,9 +276,9 @@
 private:
     GrCubicEffect(GrColor, const SkMatrix& viewMatrix, GrPrimitiveEdgeType);
 
-    virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
+    bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
 
-    virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE {
+    void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE {
         out->setUnknownSingleComponent();
     }
 
diff --git a/src/gpu/effects/GrBicubicEffect.cpp b/src/gpu/effects/GrBicubicEffect.cpp
index 76edff0..7d2dbf4 100644
--- a/src/gpu/effects/GrBicubicEffect.cpp
+++ b/src/gpu/effects/GrBicubicEffect.cpp
@@ -30,7 +30,7 @@
                           const TransformedCoordsArray&,
                           const TextureSamplerArray&) SK_OVERRIDE;
 
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
     static inline void GenKey(const GrProcessor& effect, const GrGLCaps&,
                               GrProcessorKeyBuilder* b) {
diff --git a/src/gpu/effects/GrBicubicEffect.h b/src/gpu/effects/GrBicubicEffect.h
index 19fce03..89e43c1 100644
--- a/src/gpu/effects/GrBicubicEffect.h
+++ b/src/gpu/effects/GrBicubicEffect.h
@@ -25,11 +25,11 @@
 
     const float* coefficients() const { return fCoefficients; }
 
-    virtual const char* name() const SK_OVERRIDE { return "Bicubic"; }
+    const char* name() const SK_OVERRIDE { return "Bicubic"; }
 
-    virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
+    void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
     const GrTextureDomain& domain() const { return fDomain; }
 
@@ -91,9 +91,9 @@
                     const SkMatrix &matrix, const SkShader::TileMode tileModes[2]);
     GrBicubicEffect(GrTexture*, const SkScalar coefficients[16],
                     const SkMatrix &matrix, const SkRect& domain);
-    virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
+    bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
 
     float           fCoefficients[16];
     GrTextureDomain fDomain;
diff --git a/src/gpu/effects/GrBitmapTextGeoProc.cpp b/src/gpu/effects/GrBitmapTextGeoProc.cpp
index 5f44d32..1cfb644 100644
--- a/src/gpu/effects/GrBitmapTextGeoProc.cpp
+++ b/src/gpu/effects/GrBitmapTextGeoProc.cpp
@@ -25,7 +25,7 @@
     GrGLBitmapTextGeoProc(const GrGeometryProcessor&, const GrBatchTracker&)
         : fColor(GrColor_ILLEGAL) {}
 
-    virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
+    void emitCode(const EmitArgs& args) SK_OVERRIDE {
         const GrBitmapTextGeoProc& cte = args.fGP.cast<GrBitmapTextGeoProc>();
         const BitmapTextBatchTracker& local = args.fBT.cast<BitmapTextBatchTracker>();
 
diff --git a/src/gpu/effects/GrBitmapTextGeoProc.h b/src/gpu/effects/GrBitmapTextGeoProc.h
index c69ffd7..85e4f42 100644
--- a/src/gpu/effects/GrBitmapTextGeoProc.h
+++ b/src/gpu/effects/GrBitmapTextGeoProc.h
@@ -30,7 +30,7 @@
 
     virtual ~GrBitmapTextGeoProc() {}
 
-    virtual const char* name() const SK_OVERRIDE { return "Texture"; }
+    const char* name() const SK_OVERRIDE { return "Texture"; }
 
     const GrAttribute* inPosition() const { return fInPosition; }
     const GrAttribute* inColor() const { return fInColor; }
@@ -40,7 +40,7 @@
                                    const GrGLCaps& caps,
                                    GrProcessorKeyBuilder* b) const SK_OVERRIDE;
 
-    virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE;
+    GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE;
 
     void initBatchTracker(GrBatchTracker*, const InitBT&) const SK_OVERRIDE;
     bool onCanMakeEqual(const GrBatchTracker&,
@@ -51,9 +51,9 @@
     GrBitmapTextGeoProc(GrColor, GrTexture* texture, const GrTextureParams& params,
                         bool useColorAttrib, bool opaqueVertexColors, const SkMatrix& localMatrix);
 
-    virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
+    bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
 
-    virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const SK_OVERRIDE;
+    void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const SK_OVERRIDE;
 
     GrTextureAccess    fTextureAccess;
     const GrAttribute* fInPosition;
diff --git a/src/gpu/effects/GrConfigConversionEffect.h b/src/gpu/effects/GrConfigConversionEffect.h
index d85e783..5760bb4 100644
--- a/src/gpu/effects/GrConfigConversionEffect.h
+++ b/src/gpu/effects/GrConfigConversionEffect.h
@@ -37,11 +37,11 @@
     static const GrFragmentProcessor* Create(GrTexture*, bool swapRedAndBlue, PMConversion,
                                              const SkMatrix&);
 
-    virtual const char* name() const SK_OVERRIDE { return "Config Conversion"; }
+    const char* name() const SK_OVERRIDE { return "Config Conversion"; }
 
-    virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
+    void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
     bool swapsRedAndBlue() const { return fSwapRedAndBlue; }
     PMConversion  pmConversion() const { return fPMConversion; }
@@ -61,9 +61,9 @@
                             PMConversion pmConversion,
                             const SkMatrix& matrix);
 
-    virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
+    bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
 
     bool            fSwapRedAndBlue;
     PMConversion    fPMConversion;
diff --git a/src/gpu/effects/GrConvexPolyEffect.cpp b/src/gpu/effects/GrConvexPolyEffect.cpp
index 1430716..7035094 100644
--- a/src/gpu/effects/GrConvexPolyEffect.cpp
+++ b/src/gpu/effects/GrConvexPolyEffect.cpp
@@ -23,11 +23,11 @@
 
     GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; }
 
-    virtual const char* name() const SK_OVERRIDE { return "AARect"; }
+    const char* name() const SK_OVERRIDE { return "AARect"; }
 
-    virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
+    void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
 private:
     AARectEffect(GrPrimitiveEdgeType edgeType, const SkRect& rect)
@@ -36,12 +36,12 @@
         this->setWillReadFragmentPosition();
     }
 
-    virtual bool onIsEqual(const GrFragmentProcessor& other) const SK_OVERRIDE {
+    bool onIsEqual(const GrFragmentProcessor& other) const SK_OVERRIDE {
         const AARectEffect& aare = other.cast<AARectEffect>();
         return fRect == aare.fRect;
     }
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE {
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE {
         if (fRect.isEmpty()) {
             // An empty rect will have no coverage anywhere.
             inout->mulByKnownSingleComponent(0);
@@ -94,7 +94,7 @@
 
     static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKeyBuilder*);
 
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
 private:
     GrGLProgramDataManager::UniformHandle fRectUniform;
@@ -189,7 +189,7 @@
 
     static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKeyBuilder*);
 
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
 private:
     GrGLProgramDataManager::UniformHandle fEdgeUniform;
diff --git a/src/gpu/effects/GrConvexPolyEffect.h b/src/gpu/effects/GrConvexPolyEffect.h
index fec7e82..e0eee5d 100644
--- a/src/gpu/effects/GrConvexPolyEffect.h
+++ b/src/gpu/effects/GrConvexPolyEffect.h
@@ -61,7 +61,7 @@
 
     virtual ~GrConvexPolyEffect();
 
-    virtual const char* name() const SK_OVERRIDE { return "ConvexPoly"; }
+    const char* name() const SK_OVERRIDE { return "ConvexPoly"; }
 
     GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; }
 
@@ -69,16 +69,16 @@
 
     const SkScalar* getEdges() const { return fEdges; }
 
-    virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
+    void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
 private:
     GrConvexPolyEffect(GrPrimitiveEdgeType edgeType, int n, const SkScalar edges[]);
 
-    virtual bool onIsEqual(const GrFragmentProcessor& other) const SK_OVERRIDE;
+    bool onIsEqual(const GrFragmentProcessor& other) const SK_OVERRIDE;
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
 
     GrPrimitiveEdgeType    fEdgeType;
     int                    fEdgeCount;
diff --git a/src/gpu/effects/GrConvolutionEffect.cpp b/src/gpu/effects/GrConvolutionEffect.cpp
index e3f051b..ef892dc 100644
--- a/src/gpu/effects/GrConvolutionEffect.cpp
+++ b/src/gpu/effects/GrConvolutionEffect.cpp
@@ -25,7 +25,7 @@
                           const TransformedCoordsArray&,
                           const TextureSamplerArray&) SK_OVERRIDE;
 
-    virtual void setData(const GrGLProgramDataManager& pdman, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager& pdman, const GrProcessor&) SK_OVERRIDE;
 
     static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKeyBuilder*);
 
diff --git a/src/gpu/effects/GrConvolutionEffect.h b/src/gpu/effects/GrConvolutionEffect.h
index 0d1226b..4ea436c 100644
--- a/src/gpu/effects/GrConvolutionEffect.h
+++ b/src/gpu/effects/GrConvolutionEffect.h
@@ -57,11 +57,11 @@
     const float* bounds() const { return fBounds; }
     bool useBounds() const { return fUseBounds; }
 
-    virtual const char* name() const SK_OVERRIDE { return "Convolution"; }
+    const char* name() const SK_OVERRIDE { return "Convolution"; }
 
-    virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
+    void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
     enum {
         // This was decided based on the min allowed value for the max texture
@@ -94,9 +94,9 @@
                         bool useBounds,
                         float bounds[2]);
 
-    virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
+    bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE {
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE {
         // If the texture was opaque we could know that the output color if we knew the sum of the
         // kernel values.
         inout->mulByUnknownFourComponents();
diff --git a/src/gpu/effects/GrDashingEffect.cpp b/src/gpu/effects/GrDashingEffect.cpp
index 47b8d65..8b69dca 100644
--- a/src/gpu/effects/GrDashingEffect.cpp
+++ b/src/gpu/effects/GrDashingEffect.cpp
@@ -478,7 +478,7 @@
 
     virtual ~DashingCircleEffect();
 
-    virtual const char* name() const SK_OVERRIDE { return "DashingCircleEffect"; }
+    const char* name() const SK_OVERRIDE { return "DashingCircleEffect"; }
 
     const GrAttribute* inPosition() const { return fInPosition; }
 
@@ -496,7 +496,7 @@
                                    const GrGLCaps&,
                                    GrProcessorKeyBuilder* b) const SK_OVERRIDE;
 
-    virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker&) const SK_OVERRIDE;
+    GrGLGeometryProcessor* createGLInstance(const GrBatchTracker&) const SK_OVERRIDE;
 
     void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERRIDE;
 
@@ -508,9 +508,9 @@
     DashingCircleEffect(GrColor, GrPrimitiveEdgeType edgeType, const DashInfo& info,
                         SkScalar radius, const SkMatrix& localMatrix);
 
-    virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
+    bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
 
-    virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const SK_OVERRIDE;
+    void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const SK_OVERRIDE;
 
     GrPrimitiveEdgeType fEdgeType;
     const GrAttribute*  fInPosition;
@@ -530,7 +530,7 @@
 public:
     GLDashingCircleEffect(const GrGeometryProcessor&, const GrBatchTracker&);
 
-    virtual void emitCode(const EmitArgs&) SK_OVERRIDE;
+    void emitCode(const EmitArgs&) SK_OVERRIDE;
 
     static inline void GenKey(const GrGeometryProcessor&,
                               const GrBatchTracker&,
@@ -767,7 +767,7 @@
 
     virtual ~DashingLineEffect();
 
-    virtual const char* name() const SK_OVERRIDE { return "DashingEffect"; }
+    const char* name() const SK_OVERRIDE { return "DashingEffect"; }
 
     const GrAttribute* inPosition() const { return fInPosition; }
 
@@ -783,7 +783,7 @@
                                    const GrGLCaps& caps,
                                    GrProcessorKeyBuilder* b) const SK_OVERRIDE;
 
-    virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE;
+    GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE;
 
     void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERRIDE;
 
@@ -795,9 +795,9 @@
     DashingLineEffect(GrColor, GrPrimitiveEdgeType edgeType, const DashInfo& info,
                       SkScalar strokeWidth, const SkMatrix& localMatrix);
 
-    virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
+    bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
 
-    virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const SK_OVERRIDE;
+    void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const SK_OVERRIDE;
 
     GrPrimitiveEdgeType fEdgeType;
     const GrAttribute*  fInPosition;
@@ -816,7 +816,7 @@
 public:
     GLDashingLineEffect(const GrGeometryProcessor&, const GrBatchTracker&);
 
-    virtual void emitCode(const EmitArgs&) SK_OVERRIDE;
+    void emitCode(const EmitArgs&) SK_OVERRIDE;
 
     static inline void GenKey(const GrGeometryProcessor&,
                               const GrBatchTracker&,
diff --git a/src/gpu/effects/GrDistanceFieldTextureEffect.cpp b/src/gpu/effects/GrDistanceFieldTextureEffect.cpp
index 21fbb30..cdb6ff7 100755
--- a/src/gpu/effects/GrDistanceFieldTextureEffect.cpp
+++ b/src/gpu/effects/GrDistanceFieldTextureEffect.cpp
@@ -35,7 +35,7 @@
 #endif
         {}
 
-    virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
+    void emitCode(const EmitArgs& args) SK_OVERRIDE {
         const GrDistanceFieldTextureEffect& dfTexEffect =
                 args.fGP.cast<GrDistanceFieldTextureEffect>();
         const DistanceFieldBatchTracker& local = args.fBT.cast<DistanceFieldBatchTracker>();
@@ -321,7 +321,7 @@
                                           const GrBatchTracker&)
         : fColor(GrColor_ILLEGAL), fTextureSize(SkISize::Make(-1, -1)) {}
 
-    virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
+    void emitCode(const EmitArgs& args) SK_OVERRIDE {
         const GrDistanceFieldNoGammaTextureEffect& dfTexEffect =
                 args.fGP.cast<GrDistanceFieldNoGammaTextureEffect>();
 
@@ -562,7 +562,7 @@
     , fTextureSize(SkISize::Make(-1,-1))
     , fTextColor(GrColor_ILLEGAL) {}
 
-    virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
+    void emitCode(const EmitArgs& args) SK_OVERRIDE {
         const GrDistanceFieldLCDTextureEffect& dfTexEffect =
                 args.fGP.cast<GrDistanceFieldLCDTextureEffect>();
         const DistanceFieldLCDBatchTracker& local = args.fBT.cast<DistanceFieldLCDBatchTracker>();
diff --git a/src/gpu/effects/GrDistanceFieldTextureEffect.h b/src/gpu/effects/GrDistanceFieldTextureEffect.h
index 1be06df..6edcf98 100644
--- a/src/gpu/effects/GrDistanceFieldTextureEffect.h
+++ b/src/gpu/effects/GrDistanceFieldTextureEffect.h
@@ -66,7 +66,7 @@
 
     virtual ~GrDistanceFieldTextureEffect() {}
 
-    virtual const char* name() const SK_OVERRIDE { return "DistanceFieldTexture"; }
+    const char* name() const SK_OVERRIDE { return "DistanceFieldTexture"; }
 
     const GrAttribute* inPosition() const { return fInPosition; }
     const GrAttribute* inColor() const { return fInColor; }
@@ -80,7 +80,7 @@
                                    const GrGLCaps& caps,
                                    GrProcessorKeyBuilder* b) const SK_OVERRIDE;
 
-    virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE;
+    GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE;
 
     void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERRIDE;
 
@@ -96,9 +96,9 @@
 #endif
                                  uint32_t flags, bool opaqueVertexColors);
 
-    virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
+    bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
 
-    virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const SK_OVERRIDE;
+    void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const SK_OVERRIDE;
 
     GrTextureAccess    fTextureAccess;
 #ifdef SK_GAMMA_APPLY_TO_A8
@@ -133,7 +133,7 @@
 
     virtual ~GrDistanceFieldNoGammaTextureEffect() {}
 
-    virtual const char* name() const SK_OVERRIDE { return "DistanceFieldTexture"; }
+    const char* name() const SK_OVERRIDE { return "DistanceFieldTexture"; }
 
     const GrAttribute* inPosition() const { return fInPosition; }
     const GrAttribute* inColor() const { return fInColor; }
@@ -144,7 +144,7 @@
                                    const GrGLCaps& caps,
                                    GrProcessorKeyBuilder* b) const SK_OVERRIDE;
 
-    virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE;
+    GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE;
 
     void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERRIDE;
 
@@ -157,9 +157,9 @@
                                         const GrTextureParams& params, uint32_t flags,
                                         bool opaqueVertexColors);
 
-    virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
+    bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
 
-    virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const SK_OVERRIDE;
+    void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const SK_OVERRIDE;
 
     GrTextureAccess    fTextureAccess;
     uint32_t           fFlags;
@@ -190,7 +190,7 @@
 
     virtual ~GrDistanceFieldLCDTextureEffect() {}
 
-    virtual const char* name() const SK_OVERRIDE { return "DistanceFieldLCDTexture"; }
+    const char* name() const SK_OVERRIDE { return "DistanceFieldLCDTexture"; }
 
     const GrAttribute* inPosition() const { return fInPosition; }
     const GrAttribute* inTextureCoords() const { return fInTextureCoords; }
@@ -201,7 +201,7 @@
                                    const GrGLCaps& caps,
                                    GrProcessorKeyBuilder* b) const SK_OVERRIDE;
 
-    virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE;
+    GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE;
 
     void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERRIDE;
 
@@ -215,9 +215,9 @@
                                     GrTexture* gamma, const GrTextureParams& gammaParams,
                                     SkColor textColor, uint32_t flags);
 
-    virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
+    bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
 
-    virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const SK_OVERRIDE;
+    void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const SK_OVERRIDE;
 
     GrTextureAccess    fTextureAccess;
     GrTextureAccess    fGammaTextureAccess;
diff --git a/src/gpu/effects/GrDitherEffect.cpp b/src/gpu/effects/GrDitherEffect.cpp
index 799d970..5e73e3b 100644
--- a/src/gpu/effects/GrDitherEffect.cpp
+++ b/src/gpu/effects/GrDitherEffect.cpp
@@ -24,11 +24,11 @@
 
     virtual ~DitherEffect() {};
 
-    virtual const char* name() const SK_OVERRIDE { return "Dither"; }
+    const char* name() const SK_OVERRIDE { return "Dither"; }
 
-    virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
+    void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
 private:
     DitherEffect() {
@@ -37,9 +37,9 @@
     }
 
     // All dither effects are equal
-    virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE { return true; }
+    bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE { return true; }
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
 
     GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
 
diff --git a/src/gpu/effects/GrMatrixConvolutionEffect.cpp b/src/gpu/effects/GrMatrixConvolutionEffect.cpp
index 6a71099..30f5b5e 100644
--- a/src/gpu/effects/GrMatrixConvolutionEffect.cpp
+++ b/src/gpu/effects/GrMatrixConvolutionEffect.cpp
@@ -22,7 +22,7 @@
 
     static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKeyBuilder*);
 
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
 private:
     typedef GrGLProgramDataManager::UniformHandle UniformHandle;
diff --git a/src/gpu/effects/GrMatrixConvolutionEffect.h b/src/gpu/effects/GrMatrixConvolutionEffect.h
index 8d6bb7c..8f92175 100644
--- a/src/gpu/effects/GrMatrixConvolutionEffect.h
+++ b/src/gpu/effects/GrMatrixConvolutionEffect.h
@@ -60,11 +60,11 @@
     bool convolveAlpha() const { return fConvolveAlpha; }
     const GrTextureDomain& domain() const { return fDomain; }
 
-    virtual const char* name() const SK_OVERRIDE { return "MatrixConvolution"; }
+    const char* name() const SK_OVERRIDE { return "MatrixConvolution"; }
 
-    virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
+    void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
 private:
     GrMatrixConvolutionEffect(GrTexture*,
@@ -77,9 +77,9 @@
                               GrTextureDomain::Mode tileMode,
                               bool convolveAlpha);
 
-    virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
+    bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE {
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE {
         // TODO: Try to do better?
         inout->mulByUnknownFourComponents();
     }
diff --git a/src/gpu/effects/GrOvalEffect.cpp b/src/gpu/effects/GrOvalEffect.cpp
index f1d1e68..314b000 100644
--- a/src/gpu/effects/GrOvalEffect.cpp
+++ b/src/gpu/effects/GrOvalEffect.cpp
@@ -22,11 +22,11 @@
 
     virtual ~CircleEffect() {};
 
-    virtual const char* name() const SK_OVERRIDE { return "Circle"; }
+    const char* name() const SK_OVERRIDE { return "Circle"; }
 
-    virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
+    void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
     const SkPoint& getCenter() const { return fCenter; }
     SkScalar getRadius() const { return fRadius; }
@@ -36,9 +36,9 @@
 private:
     CircleEffect(GrPrimitiveEdgeType, const SkPoint& center, SkScalar radius);
 
-    virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
+    bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
 
     SkPoint             fCenter;
     SkScalar            fRadius;
@@ -106,7 +106,7 @@
 
     static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKeyBuilder*);
 
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
 private:
     GrGLProgramDataManager::UniformHandle fCircleUniform;
@@ -197,11 +197,11 @@
 
     virtual ~EllipseEffect() {};
 
-    virtual const char* name() const SK_OVERRIDE { return "Ellipse"; }
+    const char* name() const SK_OVERRIDE { return "Ellipse"; }
 
-    virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
+    void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
     const SkPoint& getCenter() const { return fCenter; }
     SkVector getRadii() const { return fRadii; }
@@ -211,9 +211,9 @@
 private:
     EllipseEffect(GrPrimitiveEdgeType, const SkPoint& center, SkScalar rx, SkScalar ry);
 
-    virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
+    bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
 
     SkPoint             fCenter;
     SkVector            fRadii;
@@ -284,7 +284,7 @@
 
     static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKeyBuilder*);
 
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
 private:
     GrGLProgramDataManager::UniformHandle fEllipseUniform;
diff --git a/src/gpu/effects/GrPorterDuffXferProcessor.cpp b/src/gpu/effects/GrPorterDuffXferProcessor.cpp
index 2b10cad..aecf685 100644
--- a/src/gpu/effects/GrPorterDuffXferProcessor.cpp
+++ b/src/gpu/effects/GrPorterDuffXferProcessor.cpp
@@ -38,7 +38,7 @@
 
     virtual ~GrGLPorterDuffXferProcessor() {}
 
-    virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
+    void emitCode(const EmitArgs& args) SK_OVERRIDE {
         const GrPorterDuffXferProcessor& xp = args.fXP.cast<GrPorterDuffXferProcessor>();
         GrGLFPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder();
         if (xp.hasSecondaryOutput()) {
@@ -86,7 +86,7 @@
         }
     }
 
-    virtual void setData(const GrGLProgramDataManager&, const GrXferProcessor&) SK_OVERRIDE {};
+    void setData(const GrGLProgramDataManager&, const GrXferProcessor&) SK_OVERRIDE {};
 
     static void GenKey(const GrProcessor& processor, const GrGLCaps& caps,
                        GrProcessorKeyBuilder* b) {
diff --git a/src/gpu/effects/GrRRectEffect.cpp b/src/gpu/effects/GrRRectEffect.cpp
index 1c1bd18..2cc0651 100644
--- a/src/gpu/effects/GrRRectEffect.cpp
+++ b/src/gpu/effects/GrRRectEffect.cpp
@@ -48,11 +48,11 @@
 
     virtual ~CircularRRectEffect() {};
 
-    virtual const char* name() const SK_OVERRIDE { return "CircularRRect"; }
+    const char* name() const SK_OVERRIDE { return "CircularRRect"; }
 
-    virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
+    void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
     const SkRRect& getRRect() const { return fRRect; }
 
@@ -63,9 +63,9 @@
 private:
     CircularRRectEffect(GrPrimitiveEdgeType, uint32_t circularCornerFlags, const SkRRect&);
 
-    virtual bool onIsEqual(const GrFragmentProcessor& other) const SK_OVERRIDE;
+    bool onIsEqual(const GrFragmentProcessor& other) const SK_OVERRIDE;
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
 
     SkRRect                fRRect;
     GrPrimitiveEdgeType    fEdgeType;
@@ -141,7 +141,7 @@
 
     static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKeyBuilder*);
 
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
 private:
     GrGLProgramDataManager::UniformHandle fInnerRectUniform;
@@ -392,11 +392,11 @@
 
     virtual ~EllipticalRRectEffect() {};
 
-    virtual const char* name() const SK_OVERRIDE { return "EllipticalRRect"; }
+    const char* name() const SK_OVERRIDE { return "EllipticalRRect"; }
 
-    virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
+    void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
     const SkRRect& getRRect() const { return fRRect; }
 
@@ -405,9 +405,9 @@
 private:
     EllipticalRRectEffect(GrPrimitiveEdgeType, const SkRRect&);
 
-    virtual bool onIsEqual(const GrFragmentProcessor& other) const SK_OVERRIDE;
+    bool onIsEqual(const GrFragmentProcessor& other) const SK_OVERRIDE;
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
 
     SkRRect             fRRect;
     GrPrimitiveEdgeType    fEdgeType;
@@ -498,7 +498,7 @@
 
     static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKeyBuilder*);
 
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
 private:
     GrGLProgramDataManager::UniformHandle fInnerRectUniform;
diff --git a/src/gpu/effects/GrSimpleTextureEffect.h b/src/gpu/effects/GrSimpleTextureEffect.h
index 4b9268d..8afc235 100644
--- a/src/gpu/effects/GrSimpleTextureEffect.h
+++ b/src/gpu/effects/GrSimpleTextureEffect.h
@@ -47,11 +47,11 @@
 
     virtual ~GrSimpleTextureEffect() {}
 
-    virtual const char* name() const SK_OVERRIDE { return "SimpleTexture"; }
+    const char* name() const SK_OVERRIDE { return "SimpleTexture"; }
 
-    virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
+    void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
 private:
     GrSimpleTextureEffect(GrTexture* texture,
@@ -70,9 +70,9 @@
         this->initClassID<GrSimpleTextureEffect>();
     }
 
-    virtual bool onIsEqual(const GrFragmentProcessor& other) const SK_OVERRIDE { return true; }
+    bool onIsEqual(const GrFragmentProcessor& other) const SK_OVERRIDE { return true; }
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
 
     GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
 
diff --git a/src/gpu/effects/GrTextureDomain.cpp b/src/gpu/effects/GrTextureDomain.cpp
index 3531106..9516595 100644
--- a/src/gpu/effects/GrTextureDomain.cpp
+++ b/src/gpu/effects/GrTextureDomain.cpp
@@ -176,7 +176,7 @@
                           const TransformedCoordsArray&,
                           const TextureSamplerArray&) SK_OVERRIDE;
 
-    virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
+    void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
 
     static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKeyBuilder*);
 
diff --git a/src/gpu/effects/GrTextureDomain.h b/src/gpu/effects/GrTextureDomain.h
index 9e21c4a..3d8b569 100644
--- a/src/gpu/effects/GrTextureDomain.h
+++ b/src/gpu/effects/GrTextureDomain.h
@@ -153,11 +153,11 @@
 
     virtual ~GrTextureDomainEffect();
 
-    virtual const char* name() const SK_OVERRIDE { return "TextureDomain"; }
+    const char* name() const SK_OVERRIDE { return "TextureDomain"; }
 
-    virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
+    void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
 
     const GrTextureDomain& textureDomain() const { return fTextureDomain; }
 
@@ -172,9 +172,9 @@
                           GrTextureParams::FilterMode,
                           GrCoordSet);
 
-    virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
+    bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
 
     GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
 
diff --git a/src/gpu/effects/GrYUVtoRGBEffect.cpp b/src/gpu/effects/GrYUVtoRGBEffect.cpp
index e8c7ff7..7361352 100644
--- a/src/gpu/effects/GrYUVtoRGBEffect.cpp
+++ b/src/gpu/effects/GrYUVtoRGBEffect.cpp
@@ -22,7 +22,7 @@
         return SkNEW_ARGS(YUVtoRGBEffect, (yTexture, uTexture, vTexture, colorSpace));
     }
 
-    virtual const char* name() const SK_OVERRIDE { return "YUV to RGB"; }
+    const char* name() const SK_OVERRIDE { return "YUV to RGB"; }
 
     SkYUVColorSpace getColorSpace() const {
         return fColorSpace;
@@ -83,7 +83,7 @@
         GLProcessor::GenKey(*this, caps, b);
     }
 
-    virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE {
+    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE {
         return SkNEW_ARGS(GLProcessor, (*this));
     }
 
@@ -104,12 +104,12 @@
         this->addTextureAccess(&fVAccess);
     }
 
-    virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
+    bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
         const YUVtoRGBEffect& s = sBase.cast<YUVtoRGBEffect>();
         return fColorSpace == s.getColorSpace();
     }
 
-    virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE {
+    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE {
         // YUV is opaque
         inout->setToOther(kA_GrColorComponentFlag, 0xFF << GrColor_SHIFT_A,
                           GrInvariantOutput::kWillNot_ReadInput);
diff --git a/src/gpu/gl/GrGLCaps.h b/src/gpu/gl/GrGLCaps.h
index 0018263..7ccb1d9 100644
--- a/src/gpu/gl/GrGLCaps.h
+++ b/src/gpu/gl/GrGLCaps.h
@@ -99,7 +99,7 @@
     /**
      * Resets the caps such that nothing is supported.
      */
-    virtual void reset() SK_OVERRIDE;
+    void reset() SK_OVERRIDE;
 
     /**
      * Initializes the GrGLCaps to the set of features supported in the current
@@ -269,7 +269,7 @@
     /**
      * Returns a string containing the caps info.
      */
-    virtual SkString dump() const SK_OVERRIDE;
+    SkString dump() const SK_OVERRIDE;
 
     /**
      * LATC can appear under one of three possible names. In order to know
diff --git a/src/gpu/gl/GrGLIndexBuffer.h b/src/gpu/gl/GrGLIndexBuffer.h
index 0eb10bb..3ff746e 100644
--- a/src/gpu/gl/GrGLIndexBuffer.h
+++ b/src/gpu/gl/GrGLIndexBuffer.h
@@ -31,13 +31,13 @@
     }
 
 protected:
-    virtual void onAbandon() SK_OVERRIDE;
-    virtual void onRelease() SK_OVERRIDE;
+    void onAbandon() SK_OVERRIDE;
+    void onRelease() SK_OVERRIDE;
 
 private:
-    virtual void* onMap() SK_OVERRIDE;
-    virtual void onUnmap() SK_OVERRIDE;
-    virtual bool onUpdateData(const void* src, size_t srcSizeInBytes) SK_OVERRIDE;
+    void* onMap() SK_OVERRIDE;
+    void onUnmap() SK_OVERRIDE;
+    bool onUpdateData(const void* src, size_t srcSizeInBytes) SK_OVERRIDE;
 
     GrGLGpu* getGpuGL() const {
         SkASSERT(!this->wasDestroyed());
diff --git a/src/gpu/gl/GrGLNameAllocator.cpp b/src/gpu/gl/GrGLNameAllocator.cpp
index f2c37ed..9d60162 100644
--- a/src/gpu/gl/GrGLNameAllocator.cpp
+++ b/src/gpu/gl/GrGLNameAllocator.cpp
@@ -133,7 +133,7 @@
         this->updateStats();
     }
 
-    virtual SparseNameRange* SK_WARN_UNUSED_RESULT internalAllocate(GrGLuint* outName) SK_OVERRIDE {
+    SparseNameRange* SK_WARN_UNUSED_RESULT internalAllocate(GrGLuint* outName) SK_OVERRIDE {
         // Try allocating the range inside fLeft's internal gaps.
         fLeft.reset(fLeft->internalAllocate(outName));
         if (0 != *outName) {
@@ -160,7 +160,7 @@
         return this->takeRef();
     }
 
-    virtual SparseNameRange* SK_WARN_UNUSED_RESULT removeLeftmostContiguousRange(GrGLuint* removedCount) SK_OVERRIDE {
+    SparseNameRange* SK_WARN_UNUSED_RESULT removeLeftmostContiguousRange(GrGLuint* removedCount) SK_OVERRIDE {
         fLeft.reset(fLeft->removeLeftmostContiguousRange(removedCount));
         if (NULL == fLeft) {
             return fRight.detach();
@@ -169,7 +169,7 @@
         return this->rebalance();
     }
 
-    virtual GrGLuint appendNames(GrGLuint count) SK_OVERRIDE {
+    GrGLuint appendNames(GrGLuint count) SK_OVERRIDE {
         SkASSERT(fEnd + count > fEnd); // Check for integer wrap.
         GrGLuint name = fRight->appendNames(count);
         SkASSERT(fRight->end() == fEnd + count);
@@ -177,7 +177,7 @@
         return name;
     }
 
-    virtual GrGLuint prependNames(GrGLuint count) SK_OVERRIDE {
+    GrGLuint prependNames(GrGLuint count) SK_OVERRIDE {
         SkASSERT(fFirst > count); // We can't allocate at or below 0.
         GrGLuint name = fLeft->prependNames(count);
         SkASSERT(fLeft->first() == fFirst - count);
@@ -185,7 +185,7 @@
         return name;
     }
 
-    virtual SparseNameRange* SK_WARN_UNUSED_RESULT free(GrGLuint name) SK_OVERRIDE {
+    SparseNameRange* SK_WARN_UNUSED_RESULT free(GrGLuint name) SK_OVERRIDE {
         if (name < fLeft->end()) {
             fLeft.reset(fLeft->free(name));
             if (NULL == fLeft) {
@@ -280,30 +280,30 @@
         fHeight = 0;
     }
 
-    virtual SparseNameRange* SK_WARN_UNUSED_RESULT internalAllocate(GrGLuint* outName) SK_OVERRIDE {
+    SparseNameRange* SK_WARN_UNUSED_RESULT internalAllocate(GrGLuint* outName) SK_OVERRIDE {
         *outName = 0; // No internal gaps, we are contiguous.
         return this->takeRef();
     }
 
-    virtual SparseNameRange* SK_WARN_UNUSED_RESULT removeLeftmostContiguousRange(GrGLuint* removedCount) SK_OVERRIDE {
+    SparseNameRange* SK_WARN_UNUSED_RESULT removeLeftmostContiguousRange(GrGLuint* removedCount) SK_OVERRIDE {
         *removedCount = fEnd - fFirst;
         return NULL;
     }
 
-    virtual GrGLuint appendNames(GrGLuint count) SK_OVERRIDE {
+    GrGLuint appendNames(GrGLuint count) SK_OVERRIDE {
         SkASSERT(fEnd + count > fEnd); // Check for integer wrap.
         GrGLuint name = fEnd;
         fEnd += count;
         return name;
     }
 
-    virtual GrGLuint prependNames(GrGLuint count) SK_OVERRIDE {
+    GrGLuint prependNames(GrGLuint count) SK_OVERRIDE {
         SkASSERT(fFirst > count); // We can't allocate at or below 0.
         fFirst -= count;
         return fFirst;
     }
 
-    virtual SparseNameRange* SK_WARN_UNUSED_RESULT free(GrGLuint name) SK_OVERRIDE {
+    SparseNameRange* SK_WARN_UNUSED_RESULT free(GrGLuint name) SK_OVERRIDE {
         if (name < fFirst || name >= fEnd) {
           // Not-allocated names are silently ignored.
           return this->takeRef();
diff --git a/src/gpu/gl/GrGLPath.h b/src/gpu/gl/GrGLPath.h
index 57a2640..f048f85 100644
--- a/src/gpu/gl/GrGLPath.h
+++ b/src/gpu/gl/GrGLPath.h
@@ -31,12 +31,12 @@
     GrGLuint pathID() const { return fPathID; }
 
 protected:
-    virtual void onRelease() SK_OVERRIDE;
-    virtual void onAbandon() SK_OVERRIDE;
+    void onRelease() SK_OVERRIDE;
+    void onAbandon() SK_OVERRIDE;
 
 private:
     // TODO: Figure out how to get an approximate size of the path in Gpu memory.
-    virtual size_t onGpuMemorySize() const SK_OVERRIDE { return 100; }
+    size_t onGpuMemorySize() const SK_OVERRIDE { return 100; }
 
     GrGLuint fPathID;
 
diff --git a/src/gpu/gl/GrGLPathRange.h b/src/gpu/gl/GrGLPathRange.h
index 17d44c2..ce13a3a 100644
--- a/src/gpu/gl/GrGLPathRange.h
+++ b/src/gpu/gl/GrGLPathRange.h
@@ -42,13 +42,13 @@
     GrGLuint basePathID() const { return fBasePathID; }
 
 protected:
-    virtual void onInitPath(int index, const SkPath&) const SK_OVERRIDE;
+    void onInitPath(int index, const SkPath&) const SK_OVERRIDE;
 
-    virtual void onRelease() SK_OVERRIDE;
-    virtual void onAbandon() SK_OVERRIDE;
+    void onRelease() SK_OVERRIDE;
+    void onAbandon() SK_OVERRIDE;
 
 private:
-    virtual size_t onGpuMemorySize() const SK_OVERRIDE { return fGpuMemorySize; }
+    size_t onGpuMemorySize() const SK_OVERRIDE { return fGpuMemorySize; }
 
     GrGLuint fBasePathID;
     mutable size_t fGpuMemorySize;
diff --git a/src/gpu/gl/GrGLPathRendering.h b/src/gpu/gl/GrGLPathRendering.h
index 0ebf470..ac56a92 100644
--- a/src/gpu/gl/GrGLPathRendering.h
+++ b/src/gpu/gl/GrGLPathRendering.h
@@ -33,14 +33,14 @@
     virtual ~GrGLPathRendering();
 
     // GrPathRendering implementations.
-    virtual GrPath* createPath(const SkPath&, const SkStrokeRec&) SK_OVERRIDE;
+    GrPath* createPath(const SkPath&, const SkStrokeRec&) SK_OVERRIDE;
     virtual GrPathRange* createPathRange(GrPathRange::PathGenerator*,
                                          const SkStrokeRec&) SK_OVERRIDE;
     virtual GrPathRange* createGlyphs(const SkTypeface*,
                                       const SkDescriptor*,
                                       const SkStrokeRec&) SK_OVERRIDE;
-    virtual void stencilPath(const GrPath*, const GrStencilSettings&) SK_OVERRIDE;
-    virtual void drawPath(const GrPath*, const GrStencilSettings&) SK_OVERRIDE;
+    void stencilPath(const GrPath*, const GrStencilSettings&) SK_OVERRIDE;
+    void drawPath(const GrPath*, const GrStencilSettings&) SK_OVERRIDE;
     virtual void drawPaths(const GrPathRange*, const void* indices, PathIndexType,
                            const float transformValues[], PathTransformType, int count,
                            const GrStencilSettings&) SK_OVERRIDE;
diff --git a/src/gpu/gl/GrGLProgram.h b/src/gpu/gl/GrGLProgram.h
index 6e7e22b..e70fee7 100644
--- a/src/gpu/gl/GrGLProgram.h
+++ b/src/gpu/gl/GrGLProgram.h
@@ -183,7 +183,7 @@
 
 class GrGLNvprProgram : public GrGLNvprProgramBase {
 public:
-    virtual bool hasVertexShader() const SK_OVERRIDE { return true; }
+    bool hasVertexShader() const SK_OVERRIDE { return true; }
 
 private:
     typedef GrGLNvprProgramBuilder::SeparableVaryingInfo SeparableVaryingInfo;
@@ -197,7 +197,7 @@
                     GrGLInstalledXferProc* xferProcessor,
                     GrGLInstalledFragProcs* fragmentProcessors,
                     const SeparableVaryingInfoArray& separableVaryings);
-    virtual void didSetData(GrGpu::DrawType) SK_OVERRIDE;
+    void didSetData(GrGpu::DrawType) SK_OVERRIDE;
     virtual void setTransformData(const GrPendingFragmentStage&,
                                   const SkMatrix& localMatrix,
                                   GrGLInstalledFragProc*) SK_OVERRIDE;
@@ -217,7 +217,7 @@
 
 class GrGLLegacyNvprProgram : public GrGLNvprProgramBase {
 public:
-    virtual bool hasVertexShader() const SK_OVERRIDE { return false; }
+    bool hasVertexShader() const SK_OVERRIDE { return false; }
 
 private:
     GrGLLegacyNvprProgram(GrGLGpu* gpu,
@@ -229,7 +229,7 @@
                           GrGLInstalledXferProc* xp,
                           GrGLInstalledFragProcs* fps,
                           int texCoordSetCnt);
-    virtual void didSetData(GrGpu::DrawType) SK_OVERRIDE;
+    void didSetData(GrGpu::DrawType) SK_OVERRIDE;
     virtual void setTransformData(const GrPendingFragmentStage&,
                                   const SkMatrix& localMatrix,
                                   GrGLInstalledFragProc*) SK_OVERRIDE;
diff --git a/src/gpu/gl/GrGLRenderTarget.h b/src/gpu/gl/GrGLRenderTarget.h
index adc967f..09de571 100644
--- a/src/gpu/gl/GrGLRenderTarget.h
+++ b/src/gpu/gl/GrGLRenderTarget.h
@@ -42,9 +42,9 @@
     GrGLuint textureFBOID() const { return fTexFBOID; }
 
     // override of GrRenderTarget
-    virtual GrBackendObject getRenderTargetHandle() const SK_OVERRIDE { return this->renderFBOID(); }
-    virtual GrBackendObject getRenderTargetResolvedHandle() const SK_OVERRIDE { return this->textureFBOID(); }
-    virtual ResolveType getResolveType() const SK_OVERRIDE {
+    GrBackendObject getRenderTargetHandle() const SK_OVERRIDE { return this->renderFBOID(); }
+    GrBackendObject getRenderTargetResolvedHandle() const SK_OVERRIDE { return this->textureFBOID(); }
+    ResolveType getResolveType() const SK_OVERRIDE {
         if (!this->isMultisampled() ||
             fRTFBOID == fTexFBOID) {
             // catches FBO 0 and non MSAA case
@@ -65,11 +65,11 @@
 
     void init(const GrSurfaceDesc&, const IDDesc&);
 
-    virtual void onAbandon() SK_OVERRIDE;
-    virtual void onRelease() SK_OVERRIDE;
+    void onAbandon() SK_OVERRIDE;
+    void onRelease() SK_OVERRIDE;
 
     // In protected because subclass GrGLTextureRenderTarget calls this version.
-    virtual size_t onGpuMemorySize() const SK_OVERRIDE;
+    size_t onGpuMemorySize() const SK_OVERRIDE;
 
 private:
     GrGLuint      fRTFBOID;
diff --git a/src/gpu/gl/GrGLStencilBuffer.h b/src/gpu/gl/GrGLStencilBuffer.h
index ff0d5cb..c554091 100644
--- a/src/gpu/gl/GrGLStencilBuffer.h
+++ b/src/gpu/gl/GrGLStencilBuffer.h
@@ -43,11 +43,11 @@
 
 protected:
     // overrides of GrResource
-    virtual void onRelease() SK_OVERRIDE;
-    virtual void onAbandon() SK_OVERRIDE;
+    void onRelease() SK_OVERRIDE;
+    void onAbandon() SK_OVERRIDE;
 
 private:
-    virtual size_t onGpuMemorySize() const SK_OVERRIDE;
+    size_t onGpuMemorySize() const SK_OVERRIDE;
 
     Format fFormat;
     // may be zero for external SBs associated with external RTs
diff --git a/src/gpu/gl/GrGLTexture.h b/src/gpu/gl/GrGLTexture.h
index 7c64e17..cc8adeb 100644
--- a/src/gpu/gl/GrGLTexture.h
+++ b/src/gpu/gl/GrGLTexture.h
@@ -33,9 +33,9 @@
 
     GrGLTexture(GrGLGpu*, const GrSurfaceDesc&, const IDDesc&);
 
-    virtual GrBackendObject getTextureHandle() const SK_OVERRIDE;
+    GrBackendObject getTextureHandle() const SK_OVERRIDE;
 
-    virtual void textureParamsModified() SK_OVERRIDE { fTexParams.invalidate(); }
+    void textureParamsModified() SK_OVERRIDE { fTexParams.invalidate(); }
 
     // These functions are used to track the texture parameters associated with the texture.
     const TexParams& getCachedTexParams(GrGpu::ResetTimestamp* timestamp) const {
@@ -60,8 +60,8 @@
 
     void init(const GrSurfaceDesc&, const IDDesc&);
 
-    virtual void onAbandon() SK_OVERRIDE;
-    virtual void onRelease() SK_OVERRIDE;
+    void onAbandon() SK_OVERRIDE;
+    void onRelease() SK_OVERRIDE;
 
 private:
     TexParams                       fTexParams;
diff --git a/src/gpu/gl/GrGLTextureRenderTarget.h b/src/gpu/gl/GrGLTextureRenderTarget.h
index 69f70c4..af0fde4 100644
--- a/src/gpu/gl/GrGLTextureRenderTarget.h
+++ b/src/gpu/gl/GrGLTextureRenderTarget.h
@@ -35,19 +35,19 @@
     }
 
 protected:
-    virtual void onAbandon() SK_OVERRIDE {
+    void onAbandon() SK_OVERRIDE {
         GrGLRenderTarget::onAbandon();
         GrGLTexture::onAbandon();
     }
 
-    virtual void onRelease() SK_OVERRIDE {
+    void onRelease() SK_OVERRIDE {
         GrGLRenderTarget::onRelease();
         GrGLTexture::onRelease();
     }
 
 private:
     // GrGLRenderTarget accounts for the texture's memory and any MSAA renderbuffer's memory.
-    virtual size_t onGpuMemorySize() const SK_OVERRIDE {
+    size_t onGpuMemorySize() const SK_OVERRIDE {
         return GrGLRenderTarget::onGpuMemorySize();
     }
 
diff --git a/src/gpu/gl/GrGLVertexArray.h b/src/gpu/gl/GrGLVertexArray.h
index 792fd94..f795ed8 100644
--- a/src/gpu/gl/GrGLVertexArray.h
+++ b/src/gpu/gl/GrGLVertexArray.h
@@ -160,11 +160,11 @@
     void invalidateCachedState();
 
 protected:
-    virtual size_t onGpuMemorySize() const SK_OVERRIDE { return 0; }
+    size_t onGpuMemorySize() const SK_OVERRIDE { return 0; }
 
-    virtual void onAbandon() SK_OVERRIDE;
+    void onAbandon() SK_OVERRIDE;
 
-    virtual void onRelease() SK_OVERRIDE;
+    void onRelease() SK_OVERRIDE;
 
 private:
     GrGLuint                fID;
diff --git a/src/gpu/gl/GrGLVertexBuffer.h b/src/gpu/gl/GrGLVertexBuffer.h
index ea2e37d..c428f4d 100644
--- a/src/gpu/gl/GrGLVertexBuffer.h
+++ b/src/gpu/gl/GrGLVertexBuffer.h
@@ -31,13 +31,13 @@
     }
 
 protected:
-    virtual void onAbandon() SK_OVERRIDE;
-    virtual void onRelease() SK_OVERRIDE;
+    void onAbandon() SK_OVERRIDE;
+    void onRelease() SK_OVERRIDE;
 
 private:
-    virtual void* onMap() SK_OVERRIDE;
-    virtual void onUnmap() SK_OVERRIDE;
-    virtual bool onUpdateData(const void* src, size_t srcSizeInBytes) SK_OVERRIDE;
+    void* onMap() SK_OVERRIDE;
+    void onUnmap() SK_OVERRIDE;
+    bool onUpdateData(const void* src, size_t srcSizeInBytes) SK_OVERRIDE;
 
     GrGLGpu* getGpuGL() const {
         SkASSERT(!this->wasDestroyed());
diff --git a/src/gpu/gl/SkNullGLContext.h b/src/gpu/gl/SkNullGLContext.h
index 92ac11a..b0432ba 100644
--- a/src/gpu/gl/SkNullGLContext.h
+++ b/src/gpu/gl/SkNullGLContext.h
@@ -12,9 +12,9 @@
 
 class SK_API SkNullGLContext : public SkGLContext {
 public:
-    virtual ~SkNullGLContext() SK_OVERRIDE;
-    virtual void makeCurrent() const SK_OVERRIDE {};
-    virtual void swapBuffers() const SK_OVERRIDE {};
+    ~SkNullGLContext() SK_OVERRIDE;
+    void makeCurrent() const SK_OVERRIDE {};
+    void swapBuffers() const SK_OVERRIDE {};
 
     static SkNullGLContext* Create(GrGLStandard forcedGpuAPI) {
         if (kGLES_GrGLStandard == forcedGpuAPI) {
diff --git a/src/gpu/gl/angle/SkANGLEGLContext.h b/src/gpu/gl/angle/SkANGLEGLContext.h
index dec3f9f..604de42 100644
--- a/src/gpu/gl/angle/SkANGLEGLContext.h
+++ b/src/gpu/gl/angle/SkANGLEGLContext.h
@@ -17,9 +17,9 @@
 
 class SkANGLEGLContext : public SkGLContext {
 public:
-    virtual ~SkANGLEGLContext() SK_OVERRIDE;
-    virtual void makeCurrent() const SK_OVERRIDE;
-    virtual void swapBuffers() const SK_OVERRIDE;
+    ~SkANGLEGLContext() SK_OVERRIDE;
+    void makeCurrent() const SK_OVERRIDE;
+    void swapBuffers() const SK_OVERRIDE;
 
     static SkANGLEGLContext* Create(GrGLStandard forcedGpuAPI) {
         if (kGL_GrGLStandard == forcedGpuAPI) {
diff --git a/src/gpu/gl/builders/GrGLFragmentShaderBuilder.h b/src/gpu/gl/builders/GrGLFragmentShaderBuilder.h
index 456ec4f..8e8a008 100644
--- a/src/gpu/gl/builders/GrGLFragmentShaderBuilder.h
+++ b/src/gpu/gl/builders/GrGLFragmentShaderBuilder.h
@@ -87,11 +87,11 @@
     GrGLFragmentShaderBuilder(GrGLProgramBuilder* program, uint8_t fragPosKey);
 
     // true public interface, defined explicitly in the abstract interfaces above
-    virtual bool enableFeature(GLSLFeature) SK_OVERRIDE;
+    bool enableFeature(GLSLFeature) SK_OVERRIDE;
     virtual SkString ensureFSCoords2D(const GrGLProcessor::TransformedCoordsArray& coords,
                                       int index) SK_OVERRIDE;
-    virtual const char* fragmentPosition() SK_OVERRIDE;
-    virtual const char* dstColor() SK_OVERRIDE;
+    const char* fragmentPosition() SK_OVERRIDE;
+    const char* dstColor() SK_OVERRIDE;
 
 private:
     // Private public interface, used by GrGLProgramBuilder to build a fragment shader
diff --git a/src/gpu/gl/builders/GrGLLegacyNvprProgramBuilder.h b/src/gpu/gl/builders/GrGLLegacyNvprProgramBuilder.h
index f34f6cc..519e87a 100644
--- a/src/gpu/gl/builders/GrGLLegacyNvprProgramBuilder.h
+++ b/src/gpu/gl/builders/GrGLLegacyNvprProgramBuilder.h
@@ -14,7 +14,7 @@
 public:
     GrGLLegacyNvprProgramBuilder(GrGLGpu*, const GrOptDrawState&);
 
-    virtual GrGLProgram* createProgram(GrGLuint programID) SK_OVERRIDE;
+    GrGLProgram* createProgram(GrGLuint programID) SK_OVERRIDE;
 
 private:
     int addTexCoordSets(int count);
diff --git a/src/gpu/gl/builders/GrGLNvprProgramBuilder.h b/src/gpu/gl/builders/GrGLNvprProgramBuilder.h
index cfb07fd..83a3558 100644
--- a/src/gpu/gl/builders/GrGLNvprProgramBuilder.h
+++ b/src/gpu/gl/builders/GrGLNvprProgramBuilder.h
@@ -25,7 +25,7 @@
 
     typedef GrTAllocator<SeparableVaryingInfo> SeparableVaryingInfoArray;
 
-    virtual GrGLProgram* createProgram(GrGLuint programID) SK_OVERRIDE;
+    GrGLProgram* createProgram(GrGLuint programID) SK_OVERRIDE;
 
 private:
     virtual void emitTransforms(const GrPendingFragmentStage&,
diff --git a/src/gpu/gl/debug/GrBufferObj.h b/src/gpu/gl/debug/GrBufferObj.h
index 5c282ee..d0bb83d 100644
--- a/src/gpu/gl/debug/GrBufferObj.h
+++ b/src/gpu/gl/debug/GrBufferObj.h
@@ -55,7 +55,7 @@
     void setUsage(GrGLint usage) { fUsage = usage; }
     GrGLint getUsage() const     { return fUsage; }
 
-    virtual void deleteAction() SK_OVERRIDE;
+    void deleteAction() SK_OVERRIDE;
 
 protected:
 private:
diff --git a/src/gpu/gl/debug/GrFrameBufferObj.h b/src/gpu/gl/debug/GrFrameBufferObj.h
index 33af4f7..3cfa236 100644
--- a/src/gpu/gl/debug/GrFrameBufferObj.h
+++ b/src/gpu/gl/debug/GrFrameBufferObj.h
@@ -46,7 +46,7 @@
     void setStencil(GrFBBindableObj *buffer);
     GrFBBindableObj *getStencil()     { return fStencilBuffer; }
 
-    virtual void deleteAction() SK_OVERRIDE {
+    void deleteAction() SK_OVERRIDE {
 
         setColor(NULL);
         setDepth(NULL);
diff --git a/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp b/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp
index f6b4974..77a1422 100644
--- a/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp
+++ b/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp
@@ -796,7 +796,7 @@
         fWrapped.reset(interface);
     }
 
-    virtual void abandon() const SK_OVERRIDE {
+    void abandon() const SK_OVERRIDE {
         GrDebugGL::abandon();
     }
 
diff --git a/src/gpu/gl/debug/GrProgramObj.h b/src/gpu/gl/debug/GrProgramObj.h
index eebcc88..d06e410 100644
--- a/src/gpu/gl/debug/GrProgramObj.h
+++ b/src/gpu/gl/debug/GrProgramObj.h
@@ -24,7 +24,7 @@
 
     void AttachShader(GrShaderObj *shader);
 
-    virtual void deleteAction() SK_OVERRIDE;
+    void deleteAction() SK_OVERRIDE;
 
     // TODO: this flag system won't work w/ multiple contexts!
     void setInUse()         { fInUse = true; }
diff --git a/src/gpu/gl/debug/GrRenderBufferObj.h b/src/gpu/gl/debug/GrRenderBufferObj.h
index 344b90e..2ad3e2c 100644
--- a/src/gpu/gl/debug/GrRenderBufferObj.h
+++ b/src/gpu/gl/debug/GrRenderBufferObj.h
@@ -25,7 +25,7 @@
     void resetBound()       { fBound = false; }
     bool getBound() const   { return fBound; }
 
-    virtual void deleteAction() SK_OVERRIDE {
+    void deleteAction() SK_OVERRIDE {
 
         this->INHERITED::deleteAction();
     }
diff --git a/src/gpu/gl/debug/GrShaderObj.h b/src/gpu/gl/debug/GrShaderObj.h
index 0b888fa..c59d9c9 100644
--- a/src/gpu/gl/debug/GrShaderObj.h
+++ b/src/gpu/gl/debug/GrShaderObj.h
@@ -24,7 +24,7 @@
     void setType(GrGLenum type)         { fType = type; }
     GrGLenum getType()                  { return fType; }
 
-    virtual void deleteAction() SK_OVERRIDE;
+    void deleteAction() SK_OVERRIDE;
 
 protected:
 private:
diff --git a/src/gpu/gl/debug/GrTextureObj.h b/src/gpu/gl/debug/GrTextureObj.h
index 7673cd1..653e23f 100644
--- a/src/gpu/gl/debug/GrTextureObj.h
+++ b/src/gpu/gl/debug/GrTextureObj.h
@@ -43,7 +43,7 @@
         return 0 != fTextureUnitReferees.count();
     }
 
-    virtual void deleteAction() SK_OVERRIDE;
+    void deleteAction() SK_OVERRIDE;
 
 protected:
 
diff --git a/src/gpu/gl/debug/SkDebugGLContext.h b/src/gpu/gl/debug/SkDebugGLContext.h
index 7dca67f..35e4456 100644
--- a/src/gpu/gl/debug/SkDebugGLContext.h
+++ b/src/gpu/gl/debug/SkDebugGLContext.h
@@ -12,9 +12,9 @@
 
 class SkDebugGLContext : public SkGLContext {
 public:
-    virtual ~SkDebugGLContext() SK_OVERRIDE;
-    virtual void makeCurrent() const SK_OVERRIDE {}
-    virtual void swapBuffers() const SK_OVERRIDE {}
+    ~SkDebugGLContext() SK_OVERRIDE;
+    void makeCurrent() const SK_OVERRIDE {}
+    void swapBuffers() const SK_OVERRIDE {}
 
     static SkDebugGLContext* Create(GrGLStandard forcedGpuAPI) {
         if (kGLES_GrGLStandard == forcedGpuAPI) {
diff --git a/src/gpu/gl/egl/SkCreatePlatformGLContext_egl.cpp b/src/gpu/gl/egl/SkCreatePlatformGLContext_egl.cpp
index 1974197..9f35981 100644
--- a/src/gpu/gl/egl/SkCreatePlatformGLContext_egl.cpp
+++ b/src/gpu/gl/egl/SkCreatePlatformGLContext_egl.cpp
@@ -15,9 +15,9 @@
 class EGLGLContext : public SkGLContext  {
 public:
     EGLGLContext(GrGLStandard forcedGpuAPI);
-    virtual ~EGLGLContext() SK_OVERRIDE;
-    virtual void makeCurrent() const SK_OVERRIDE;
-    virtual void swapBuffers() const SK_OVERRIDE;
+    ~EGLGLContext() SK_OVERRIDE;
+    void makeCurrent() const SK_OVERRIDE;
+    void swapBuffers() const SK_OVERRIDE;
 
 private:
     void destroyGLContext();
diff --git a/src/gpu/gl/glx/SkCreatePlatformGLContext_glx.cpp b/src/gpu/gl/glx/SkCreatePlatformGLContext_glx.cpp
index f9977b2..9efa993 100644
--- a/src/gpu/gl/glx/SkCreatePlatformGLContext_glx.cpp
+++ b/src/gpu/gl/glx/SkCreatePlatformGLContext_glx.cpp
@@ -47,9 +47,9 @@
 class GLXGLContext : public SkGLContext {
 public:
     GLXGLContext(GrGLStandard forcedGpuAPI);
-    virtual ~GLXGLContext() SK_OVERRIDE;
-    virtual void makeCurrent() const SK_OVERRIDE;
-    virtual void swapBuffers() const SK_OVERRIDE;
+    ~GLXGLContext() SK_OVERRIDE;
+    void makeCurrent() const SK_OVERRIDE;
+    void swapBuffers() const SK_OVERRIDE;
 
 private:
     void destroyGLContext();
diff --git a/src/gpu/gl/iOS/SkCreatePlatformGLContext_iOS.mm b/src/gpu/gl/iOS/SkCreatePlatformGLContext_iOS.mm
index 423ef8c..f900976 100644
--- a/src/gpu/gl/iOS/SkCreatePlatformGLContext_iOS.mm
+++ b/src/gpu/gl/iOS/SkCreatePlatformGLContext_iOS.mm
@@ -16,9 +16,9 @@
 class IOSGLContext : public SkGLContext {
 public:
     IOSGLContext();
-    virtual ~IOSGLContext() SK_OVERRIDE;
-    virtual void makeCurrent() const SK_OVERRIDE;
-    virtual void swapBuffers() const SK_OVERRIDE;
+    ~IOSGLContext() SK_OVERRIDE;
+    void makeCurrent() const SK_OVERRIDE;
+    void swapBuffers() const SK_OVERRIDE;
 
 private:
     void destroyGLContext();
diff --git a/src/gpu/gl/mac/SkCreatePlatformGLContext_mac.cpp b/src/gpu/gl/mac/SkCreatePlatformGLContext_mac.cpp
index 5ae1aeb..e7f21e0 100644
--- a/src/gpu/gl/mac/SkCreatePlatformGLContext_mac.cpp
+++ b/src/gpu/gl/mac/SkCreatePlatformGLContext_mac.cpp
@@ -14,9 +14,9 @@
 class MacGLContext : public SkGLContext {
 public:
     MacGLContext();
-    virtual ~MacGLContext() SK_OVERRIDE;
-    virtual void makeCurrent() const SK_OVERRIDE;
-    virtual void swapBuffers() const SK_OVERRIDE;
+    ~MacGLContext() SK_OVERRIDE;
+    void makeCurrent() const SK_OVERRIDE;
+    void swapBuffers() const SK_OVERRIDE;
 
 private:
     void destroyGLContext();
diff --git a/src/gpu/gl/mesa/SkMesaGLContext.h b/src/gpu/gl/mesa/SkMesaGLContext.h
index 0fc5162..df7e0b0 100644
--- a/src/gpu/gl/mesa/SkMesaGLContext.h
+++ b/src/gpu/gl/mesa/SkMesaGLContext.h
@@ -17,9 +17,9 @@
     typedef intptr_t Context;
 
 public:
-    virtual ~SkMesaGLContext() SK_OVERRIDE;
-    virtual void makeCurrent() const SK_OVERRIDE;
-    virtual void swapBuffers() const SK_OVERRIDE;
+    ~SkMesaGLContext() SK_OVERRIDE;
+    void makeCurrent() const SK_OVERRIDE;
+    void swapBuffers() const SK_OVERRIDE;
 
     static SkMesaGLContext* Create(GrGLStandard forcedGpuAPI) {
         if (kGLES_GrGLStandard == forcedGpuAPI) {
diff --git a/src/gpu/gl/win/SkCreatePlatformGLContext_win.cpp b/src/gpu/gl/win/SkCreatePlatformGLContext_win.cpp
index 890c784..5f3d364 100644
--- a/src/gpu/gl/win/SkCreatePlatformGLContext_win.cpp
+++ b/src/gpu/gl/win/SkCreatePlatformGLContext_win.cpp
@@ -20,9 +20,9 @@
 class WinGLContext : public SkGLContext {
 public:
     WinGLContext(GrGLStandard forcedGpuAPI);
-	virtual ~WinGLContext() SK_OVERRIDE;
-    virtual void makeCurrent() const SK_OVERRIDE;
-    virtual void swapBuffers() const SK_OVERRIDE;
+	~WinGLContext() SK_OVERRIDE;
+    void makeCurrent() const SK_OVERRIDE;
+    void swapBuffers() const SK_OVERRIDE;
 
 private:
     void destroyGLContext();
diff --git a/src/image/SkImage_Raster.cpp b/src/image/SkImage_Raster.cpp
index 01a287b..4636686 100644
--- a/src/image/SkImage_Raster.cpp
+++ b/src/image/SkImage_Raster.cpp
@@ -68,7 +68,7 @@
                                   SkShader::TileMode,
                                   const SkMatrix* localMatrix) const SK_OVERRIDE;
 
-    virtual bool isOpaque() const SK_OVERRIDE;
+    bool isOpaque() const SK_OVERRIDE;
 
     SkImage_Raster(const SkBitmap& bm, const SkSurfaceProps* props)
         : INHERITED(bm.width(), bm.height(), props)
diff --git a/src/image/SkSurface_Gpu.h b/src/image/SkSurface_Gpu.h
index a02eb3e..4a49272 100644
--- a/src/image/SkSurface_Gpu.h
+++ b/src/image/SkSurface_Gpu.h
@@ -21,13 +21,13 @@
     SkSurface_Gpu(GrRenderTarget*, const SkSurfaceProps*, bool doClear);
     virtual ~SkSurface_Gpu();
 
-    virtual SkCanvas* onNewCanvas() SK_OVERRIDE;
-    virtual SkSurface* onNewSurface(const SkImageInfo&) SK_OVERRIDE;
-    virtual SkImage* onNewImageSnapshot() SK_OVERRIDE;
+    SkCanvas* onNewCanvas() SK_OVERRIDE;
+    SkSurface* onNewSurface(const SkImageInfo&) SK_OVERRIDE;
+    SkImage* onNewImageSnapshot() SK_OVERRIDE;
     virtual void onDraw(SkCanvas*, SkScalar x, SkScalar y,
                         const SkPaint*) SK_OVERRIDE;
-    virtual void onCopyOnWrite(ContentChangeMode) SK_OVERRIDE;
-    virtual void onDiscard() SK_OVERRIDE;
+    void onCopyOnWrite(ContentChangeMode) SK_OVERRIDE;
+    void onDiscard() SK_OVERRIDE;
 
     SkGpuDevice* getDevice() { return fDevice; }
 
diff --git a/src/image/SkSurface_Raster.cpp b/src/image/SkSurface_Raster.cpp
index 2bac3f3..0752383 100644
--- a/src/image/SkSurface_Raster.cpp
+++ b/src/image/SkSurface_Raster.cpp
@@ -22,12 +22,12 @@
                      const SkSurfaceProps*);
     SkSurface_Raster(SkPixelRef*, const SkSurfaceProps*);
 
-    virtual SkCanvas* onNewCanvas() SK_OVERRIDE;
-    virtual SkSurface* onNewSurface(const SkImageInfo&) SK_OVERRIDE;
-    virtual SkImage* onNewImageSnapshot() SK_OVERRIDE;
+    SkCanvas* onNewCanvas() SK_OVERRIDE;
+    SkSurface* onNewSurface(const SkImageInfo&) SK_OVERRIDE;
+    SkImage* onNewImageSnapshot() SK_OVERRIDE;
     virtual void onDraw(SkCanvas*, SkScalar x, SkScalar y,
                         const SkPaint*) SK_OVERRIDE;
-    virtual void onCopyOnWrite(ContentChangeMode) SK_OVERRIDE;
+    void onCopyOnWrite(ContentChangeMode) SK_OVERRIDE;
 
 private:
     SkBitmap    fBitmap;
diff --git a/src/images/SkDecodingImageGenerator.cpp b/src/images/SkDecodingImageGenerator.cpp
index d5c2ba8..baa112c 100644
--- a/src/images/SkDecodingImageGenerator.cpp
+++ b/src/images/SkDecodingImageGenerator.cpp
@@ -37,8 +37,8 @@
                            bool ditherImage);
 
 protected:
-    virtual SkData* onRefEncodedData() SK_OVERRIDE;
-    virtual bool onGetInfo(SkImageInfo* info) SK_OVERRIDE {
+    SkData* onRefEncodedData() SK_OVERRIDE;
+    bool onGetInfo(SkImageInfo* info) SK_OVERRIDE {
         *info = fInfo;
         return true;
     }
diff --git a/src/images/SkImageDecoder_astc.cpp b/src/images/SkImageDecoder_astc.cpp
index 96d28f8..64cdf43 100644
--- a/src/images/SkImageDecoder_astc.cpp
+++ b/src/images/SkImageDecoder_astc.cpp
@@ -19,12 +19,12 @@
 public:
     SkASTCImageDecoder() { }
 
-    virtual Format getFormat() const SK_OVERRIDE {
+    Format getFormat() const SK_OVERRIDE {
         return kASTC_Format;
     }
 
 protected:
-    virtual Result onDecode(SkStream* stream, SkBitmap* bm, Mode) SK_OVERRIDE;
+    Result onDecode(SkStream* stream, SkBitmap* bm, Mode) SK_OVERRIDE;
 
 private:
     typedef SkImageDecoder INHERITED;
diff --git a/src/images/SkImageDecoder_ktx.cpp b/src/images/SkImageDecoder_ktx.cpp
index 8ef592a..7248950 100644
--- a/src/images/SkImageDecoder_ktx.cpp
+++ b/src/images/SkImageDecoder_ktx.cpp
@@ -36,12 +36,12 @@
 public:
     SkKTXImageDecoder() { }
 
-    virtual Format getFormat() const SK_OVERRIDE {
+    Format getFormat() const SK_OVERRIDE {
         return kKTX_Format;
     }
 
 protected:
-    virtual Result onDecode(SkStream* stream, SkBitmap* bm, Mode) SK_OVERRIDE;
+    Result onDecode(SkStream* stream, SkBitmap* bm, Mode) SK_OVERRIDE;
 
 private:
     typedef SkImageDecoder INHERITED;
@@ -251,7 +251,7 @@
 
 class SkKTXImageEncoder : public SkImageEncoder {
 protected:
-    virtual bool onEncode(SkWStream* stream, const SkBitmap& bm, int quality) SK_OVERRIDE;
+    bool onEncode(SkWStream* stream, const SkBitmap& bm, int quality) SK_OVERRIDE;
 
 private:
     virtual bool encodePKM(SkWStream* stream, const SkData *data);
diff --git a/src/images/SkImageDecoder_libbmp.cpp b/src/images/SkImageDecoder_libbmp.cpp
index af868e3..e28713d 100644
--- a/src/images/SkImageDecoder_libbmp.cpp
+++ b/src/images/SkImageDecoder_libbmp.cpp
@@ -19,12 +19,12 @@
 public:
     SkBMPImageDecoder() {}
 
-    virtual Format getFormat() const SK_OVERRIDE {
+    Format getFormat() const SK_OVERRIDE {
         return kBMP_Format;
     }
 
 protected:
-    virtual Result onDecode(SkStream* stream, SkBitmap* bm, Mode mode) SK_OVERRIDE;
+    Result onDecode(SkStream* stream, SkBitmap* bm, Mode mode) SK_OVERRIDE;
 
 private:
     typedef SkImageDecoder INHERITED;
diff --git a/src/images/SkImageDecoder_libgif.cpp b/src/images/SkImageDecoder_libgif.cpp
index 1d0e500..0701eb6 100644
--- a/src/images/SkImageDecoder_libgif.cpp
+++ b/src/images/SkImageDecoder_libgif.cpp
@@ -19,12 +19,12 @@
 
 class SkGIFImageDecoder : public SkImageDecoder {
 public:
-    virtual Format getFormat() const SK_OVERRIDE {
+    Format getFormat() const SK_OVERRIDE {
         return kGIF_Format;
     }
 
 protected:
-    virtual Result onDecode(SkStream* stream, SkBitmap* bm, Mode mode) SK_OVERRIDE;
+    Result onDecode(SkStream* stream, SkBitmap* bm, Mode mode) SK_OVERRIDE;
 
 private:
     typedef SkImageDecoder INHERITED;
diff --git a/src/images/SkImageDecoder_libico.cpp b/src/images/SkImageDecoder_libico.cpp
index a329706..3ca1908 100644
--- a/src/images/SkImageDecoder_libico.cpp
+++ b/src/images/SkImageDecoder_libico.cpp
@@ -15,12 +15,12 @@
 public:
     SkICOImageDecoder();
 
-    virtual Format getFormat() const SK_OVERRIDE {
+    Format getFormat() const SK_OVERRIDE {
         return kICO_Format;
     }
 
 protected:
-    virtual Result onDecode(SkStream* stream, SkBitmap* bm, Mode) SK_OVERRIDE;
+    Result onDecode(SkStream* stream, SkBitmap* bm, Mode) SK_OVERRIDE;
 
 private:
     typedef SkImageDecoder INHERITED;
diff --git a/src/images/SkImageDecoder_libjpeg.cpp b/src/images/SkImageDecoder_libjpeg.cpp
index f25fb9f..8c9d267 100644
--- a/src/images/SkImageDecoder_libjpeg.cpp
+++ b/src/images/SkImageDecoder_libjpeg.cpp
@@ -229,16 +229,16 @@
     }
 #endif
 
-    virtual Format getFormat() const SK_OVERRIDE {
+    Format getFormat() const SK_OVERRIDE {
         return kJPEG_Format;
     }
 
 protected:
 #ifdef SK_BUILD_FOR_ANDROID
-    virtual bool onBuildTileIndex(SkStreamRewindable *stream, int *width, int *height) SK_OVERRIDE;
-    virtual bool onDecodeSubset(SkBitmap* bitmap, const SkIRect& rect) SK_OVERRIDE;
+    bool onBuildTileIndex(SkStreamRewindable *stream, int *width, int *height) SK_OVERRIDE;
+    bool onDecodeSubset(SkBitmap* bitmap, const SkIRect& rect) SK_OVERRIDE;
 #endif
-    virtual Result onDecode(SkStream* stream, SkBitmap* bm, Mode) SK_OVERRIDE;
+    Result onDecode(SkStream* stream, SkBitmap* bm, Mode) SK_OVERRIDE;
     virtual bool onDecodeYUV8Planes(SkStream* stream, SkISize componentSizes[3],
                                     void* planes[3], size_t rowBytes[3],
                                     SkYUVColorSpace* colorSpace) SK_OVERRIDE;
diff --git a/src/images/SkImageDecoder_libpng.cpp b/src/images/SkImageDecoder_libpng.cpp
index e997fdb..c3bba6e 100644
--- a/src/images/SkImageDecoder_libpng.cpp
+++ b/src/images/SkImageDecoder_libpng.cpp
@@ -78,7 +78,7 @@
     SkPNGImageDecoder() {
         fImageIndex = NULL;
     }
-    virtual Format getFormat() const SK_OVERRIDE {
+    Format getFormat() const SK_OVERRIDE {
         return kPNG_Format;
     }
 
@@ -88,10 +88,10 @@
 
 protected:
 #ifdef SK_BUILD_FOR_ANDROID
-    virtual bool onBuildTileIndex(SkStreamRewindable *stream, int *width, int *height) SK_OVERRIDE;
-    virtual bool onDecodeSubset(SkBitmap* bitmap, const SkIRect& region) SK_OVERRIDE;
+    bool onBuildTileIndex(SkStreamRewindable *stream, int *width, int *height) SK_OVERRIDE;
+    bool onDecodeSubset(SkBitmap* bitmap, const SkIRect& region) SK_OVERRIDE;
 #endif
-    virtual Result onDecode(SkStream* stream, SkBitmap* bm, Mode) SK_OVERRIDE;
+    Result onDecode(SkStream* stream, SkBitmap* bm, Mode) SK_OVERRIDE;
 
 private:
     SkPNGImageIndex* fImageIndex;
@@ -1090,7 +1090,7 @@
 
 class SkPNGImageEncoder : public SkImageEncoder {
 protected:
-    virtual bool onEncode(SkWStream* stream, const SkBitmap& bm, int quality) SK_OVERRIDE;
+    bool onEncode(SkWStream* stream, const SkBitmap& bm, int quality) SK_OVERRIDE;
 private:
     bool doEncode(SkWStream* stream, const SkBitmap& bm,
                   const bool& hasAlpha, int colorType,
diff --git a/src/images/SkImageDecoder_libwebp.cpp b/src/images/SkImageDecoder_libwebp.cpp
index d5caf70..c56933d 100644
--- a/src/images/SkImageDecoder_libwebp.cpp
+++ b/src/images/SkImageDecoder_libwebp.cpp
@@ -104,14 +104,14 @@
         SkSafeUnref(fInputStream);
     }
 
-    virtual Format getFormat() const SK_OVERRIDE {
+    Format getFormat() const SK_OVERRIDE {
         return kWEBP_Format;
     }
 
 protected:
-    virtual bool onBuildTileIndex(SkStreamRewindable *stream, int *width, int *height) SK_OVERRIDE;
-    virtual bool onDecodeSubset(SkBitmap* bitmap, const SkIRect& rect) SK_OVERRIDE;
-    virtual Result onDecode(SkStream* stream, SkBitmap* bm, Mode) SK_OVERRIDE;
+    bool onBuildTileIndex(SkStreamRewindable *stream, int *width, int *height) SK_OVERRIDE;
+    bool onDecodeSubset(SkBitmap* bitmap, const SkIRect& rect) SK_OVERRIDE;
+    Result onDecode(SkStream* stream, SkBitmap* bm, Mode) SK_OVERRIDE;
 
 private:
     /**
@@ -588,7 +588,7 @@
 
 class SkWEBPImageEncoder : public SkImageEncoder {
 protected:
-    virtual bool onEncode(SkWStream* stream, const SkBitmap& bm, int quality) SK_OVERRIDE;
+    bool onEncode(SkWStream* stream, const SkBitmap& bm, int quality) SK_OVERRIDE;
 
 private:
     typedef SkImageEncoder INHERITED;
diff --git a/src/images/SkImageDecoder_pkm.cpp b/src/images/SkImageDecoder_pkm.cpp
index 17ef2f3..c607c6f 100644
--- a/src/images/SkImageDecoder_pkm.cpp
+++ b/src/images/SkImageDecoder_pkm.cpp
@@ -19,12 +19,12 @@
 public:
     SkPKMImageDecoder() { }
 
-    virtual Format getFormat() const SK_OVERRIDE {
+    Format getFormat() const SK_OVERRIDE {
         return kPKM_Format;
     }
 
 protected:
-    virtual Result onDecode(SkStream* stream, SkBitmap* bm, Mode) SK_OVERRIDE;
+    Result onDecode(SkStream* stream, SkBitmap* bm, Mode) SK_OVERRIDE;
 
 private:
     typedef SkImageDecoder INHERITED;
diff --git a/src/images/SkImageDecoder_wbmp.cpp b/src/images/SkImageDecoder_wbmp.cpp
index 7a6f76e..1f506db 100644
--- a/src/images/SkImageDecoder_wbmp.cpp
+++ b/src/images/SkImageDecoder_wbmp.cpp
@@ -17,12 +17,12 @@
 
 class SkWBMPImageDecoder : public SkImageDecoder {
 public:
-    virtual Format getFormat() const SK_OVERRIDE {
+    Format getFormat() const SK_OVERRIDE {
         return kWBMP_Format;
     }
 
 protected:
-    virtual Result onDecode(SkStream* stream, SkBitmap* bm, Mode) SK_OVERRIDE;
+    Result onDecode(SkStream* stream, SkBitmap* bm, Mode) SK_OVERRIDE;
 
 private:
     typedef SkImageDecoder INHERITED;
diff --git a/src/images/SkImageEncoder_argb.cpp b/src/images/SkImageEncoder_argb.cpp
index 02d5490..6bc906f 100644
--- a/src/images/SkImageEncoder_argb.cpp
+++ b/src/images/SkImageEncoder_argb.cpp
@@ -13,7 +13,7 @@
 
 class SkARGBImageEncoder : public SkImageEncoder {
 protected:
-    virtual bool onEncode(SkWStream* stream, const SkBitmap& bm, int quality) SK_OVERRIDE;
+    bool onEncode(SkWStream* stream, const SkBitmap& bm, int quality) SK_OVERRIDE;
 
 private:
     typedef SkImageEncoder INHERITED;
diff --git a/src/images/SkScaledBitmapSampler.cpp b/src/images/SkScaledBitmapSampler.cpp
index 8bb1bde..123b85f 100644
--- a/src/images/SkScaledBitmapSampler.cpp
+++ b/src/images/SkScaledBitmapSampler.cpp
@@ -834,7 +834,7 @@
 public:
     DummyDecoder() {}
 protected:
-    virtual Result onDecode(SkStream*, SkBitmap*, SkImageDecoder::Mode) SK_OVERRIDE {
+    Result onDecode(SkStream*, SkBitmap*, SkImageDecoder::Mode) SK_OVERRIDE {
         return kFailure;
     }
 };
diff --git a/src/lazy/SkCachingPixelRef.h b/src/lazy/SkCachingPixelRef.h
index 306f714..a46df14 100644
--- a/src/lazy/SkCachingPixelRef.h
+++ b/src/lazy/SkCachingPixelRef.h
@@ -42,11 +42,11 @@
 
 protected:
     virtual ~SkCachingPixelRef();
-    virtual bool onNewLockPixels(LockRec*) SK_OVERRIDE;
-    virtual void onUnlockPixels() SK_OVERRIDE;
-    virtual bool onLockPixelsAreWritable() const SK_OVERRIDE { return false; }
+    bool onNewLockPixels(LockRec*) SK_OVERRIDE;
+    void onUnlockPixels() SK_OVERRIDE;
+    bool onLockPixelsAreWritable() const SK_OVERRIDE { return false; }
 
-    virtual SkData* onRefEncodedData() SK_OVERRIDE {
+    SkData* onRefEncodedData() SK_OVERRIDE {
         return fImageGenerator->refEncodedData();
     }
 
diff --git a/src/lazy/SkDiscardableMemoryPool.cpp b/src/lazy/SkDiscardableMemoryPool.cpp
index 96d6046..2da8335 100644
--- a/src/lazy/SkDiscardableMemoryPool.cpp
+++ b/src/lazy/SkDiscardableMemoryPool.cpp
@@ -32,19 +32,19 @@
     DiscardableMemoryPool(size_t budget, SkBaseMutex* mutex = NULL);
     virtual ~DiscardableMemoryPool();
 
-    virtual SkDiscardableMemory* create(size_t bytes) SK_OVERRIDE;
+    SkDiscardableMemory* create(size_t bytes) SK_OVERRIDE;
 
-    virtual size_t getRAMUsed() SK_OVERRIDE;
-    virtual void setRAMBudget(size_t budget) SK_OVERRIDE;
-    virtual size_t getRAMBudget() SK_OVERRIDE { return fBudget; }
+    size_t getRAMUsed() SK_OVERRIDE;
+    void setRAMBudget(size_t budget) SK_OVERRIDE;
+    size_t getRAMBudget() SK_OVERRIDE { return fBudget; }
 
     /** purges all unlocked DMs */
-    virtual void dumpPool() SK_OVERRIDE;
+    void dumpPool() SK_OVERRIDE;
 
     #if SK_LAZY_CACHE_STATS  // Defined in SkDiscardableMemoryPool.h
-    virtual int getCacheHits() SK_OVERRIDE { return fCacheHits; }
-    virtual int getCacheMisses() SK_OVERRIDE { return fCacheMisses; }
-    virtual void resetCacheHitsAndMisses() SK_OVERRIDE {
+    int getCacheHits() SK_OVERRIDE { return fCacheHits; }
+    int getCacheMisses() SK_OVERRIDE { return fCacheMisses; }
+    void resetCacheHitsAndMisses() SK_OVERRIDE {
         fCacheHits = fCacheMisses = 0;
     }
     int          fCacheHits;
@@ -80,9 +80,9 @@
     PoolDiscardableMemory(DiscardableMemoryPool* pool,
                             void* pointer, size_t bytes);
     virtual ~PoolDiscardableMemory();
-    virtual bool lock() SK_OVERRIDE;
-    virtual void* data() SK_OVERRIDE;
-    virtual void unlock() SK_OVERRIDE;
+    bool lock() SK_OVERRIDE;
+    void* data() SK_OVERRIDE;
+    void unlock() SK_OVERRIDE;
     friend class DiscardableMemoryPool;
 private:
     SK_DECLARE_INTERNAL_LLIST_INTERFACE(PoolDiscardableMemory);
diff --git a/src/lazy/SkDiscardablePixelRef.h b/src/lazy/SkDiscardablePixelRef.h
index 142c8a4..448f0ab 100644
--- a/src/lazy/SkDiscardablePixelRef.h
+++ b/src/lazy/SkDiscardablePixelRef.h
@@ -25,11 +25,11 @@
 protected:
     ~SkDiscardablePixelRef();
 
-    virtual bool onNewLockPixels(LockRec*) SK_OVERRIDE;
-    virtual void onUnlockPixels() SK_OVERRIDE;
-    virtual bool onLockPixelsAreWritable() const SK_OVERRIDE { return false; }
+    bool onNewLockPixels(LockRec*) SK_OVERRIDE;
+    void onUnlockPixels() SK_OVERRIDE;
+    bool onLockPixelsAreWritable() const SK_OVERRIDE { return false; }
 
-    virtual SkData* onRefEncodedData() SK_OVERRIDE {
+    SkData* onRefEncodedData() SK_OVERRIDE {
         return fGenerator->refEncodedData();
     }
 
diff --git a/src/pdf/SkPDFDeviceFlattener.h b/src/pdf/SkPDFDeviceFlattener.h
index 56f8da7..b2c3d7e 100644
--- a/src/pdf/SkPDFDeviceFlattener.h
+++ b/src/pdf/SkPDFDeviceFlattener.h
@@ -30,7 +30,7 @@
     virtual void drawPoints(const SkDraw&, SkCanvas::PointMode mode,
                             size_t count, const SkPoint[],
                             const SkPaint& paint) SK_OVERRIDE;
-    virtual void drawRect(const SkDraw&, const SkRect& r, const SkPaint& paint) SK_OVERRIDE;
+    void drawRect(const SkDraw&, const SkRect& r, const SkPaint& paint) SK_OVERRIDE;
     virtual void drawPath(const SkDraw&, const SkPath& origpath,
                           const SkPaint& paint, const SkMatrix* prePathMatrix,
                           bool pathIsMutable) SK_OVERRIDE;
diff --git a/src/pdf/SkPDFShader.cpp b/src/pdf/SkPDFShader.cpp
index 7023cfc..40f7d93 100644
--- a/src/pdf/SkPDFShader.cpp
+++ b/src/pdf/SkPDFShader.cpp
@@ -515,7 +515,7 @@
         fResources.unrefAll();
     }
 
-    virtual bool isValid() SK_OVERRIDE { return fResources.count() > 0; }
+    bool isValid() SK_OVERRIDE { return fResources.count() > 0; }
 
     void getResources(const SkTSet<SkPDFObject*>& knownResourceObjects,
                       SkTSet<SkPDFObject*>* newResourceObjects) SK_OVERRIDE {
@@ -548,7 +548,7 @@
         }
     }
 
-    virtual bool isValid() SK_OVERRIDE {
+    bool isValid() SK_OVERRIDE {
         return fColorShader.get() != NULL;
     }
 
@@ -578,7 +578,7 @@
         fResources.unrefAll();
     }
 
-    virtual bool isValid() SK_OVERRIDE { return size() > 0; }
+    bool isValid() SK_OVERRIDE { return size() > 0; }
 
     void getResources(const SkTSet<SkPDFObject*>& knownResourceObjects,
                       SkTSet<SkPDFObject*>* newResourceObjects) SK_OVERRIDE {
diff --git a/src/pipe/SkGPipeRead.cpp b/src/pipe/SkGPipeRead.cpp
index dab6178..aa108e6 100644
--- a/src/pipe/SkGPipeRead.cpp
+++ b/src/pipe/SkGPipeRead.cpp
@@ -162,7 +162,7 @@
      * these SkBitmaps for bitmap shaders. Used only in cross process mode
      * without a shared heap.
      */
-    virtual SkBitmap* getBitmap(int32_t index) const SK_OVERRIDE {
+    SkBitmap* getBitmap(int32_t index) const SK_OVERRIDE {
         SkASSERT(shouldFlattenBitmaps(fFlags));
         return fBitmaps[index];
     }
@@ -170,7 +170,7 @@
     /**
      * Needed to be a non-abstract subclass of SkBitmapHeapReader.
      */
-    virtual void releaseRef(int32_t) SK_OVERRIDE {}
+    void releaseRef(int32_t) SK_OVERRIDE {}
 
     void setSharedHeap(SkBitmapHeap* heap) {
         SkASSERT(!shouldFlattenBitmaps(fFlags) || NULL == heap);
diff --git a/src/pipe/SkGPipeWrite.cpp b/src/pipe/SkGPipeWrite.cpp
index 6044360..be687f7 100644
--- a/src/pipe/SkGPipeWrite.cpp
+++ b/src/pipe/SkGPipeWrite.cpp
@@ -86,9 +86,9 @@
         fPointers.freeAll();
     }
 
-    virtual void* allocThrow(size_t bytes) SK_OVERRIDE;
+    void* allocThrow(size_t bytes) SK_OVERRIDE;
 
-    virtual void unalloc(void* ptr) SK_OVERRIDE;
+    void unalloc(void* ptr) SK_OVERRIDE;
 
     void setBitmapStorage(SkBitmapHeap* heap) {
         this->setBitmapHeap(heap);
@@ -175,7 +175,7 @@
 
     ~BitmapShuttle();
 
-    virtual bool insert(const SkBitmap& bitmap, int32_t slot) SK_OVERRIDE;
+    bool insert(const SkBitmap& bitmap, int32_t slot) SK_OVERRIDE;
 
     /**
      *  Remove the SkGPipeCanvas used for insertion. After this, calls to
@@ -231,9 +231,9 @@
         return (NULL == fBitmapHeap) ? 0 : fBitmapHeap->bytesAllocated();
     }
 
-    virtual void beginCommentGroup(const char* description) SK_OVERRIDE;
-    virtual void addComment(const char* kywd, const char* value) SK_OVERRIDE;
-    virtual void endCommentGroup() SK_OVERRIDE;
+    void beginCommentGroup(const char* description) SK_OVERRIDE;
+    void addComment(const char* kywd, const char* value) SK_OVERRIDE;
+    void endCommentGroup() SK_OVERRIDE;
 
     /**
      * Flatten an SkBitmap to send to the reader, where it will be referenced
@@ -242,14 +242,14 @@
     bool shuttleBitmap(const SkBitmap&, int32_t slot);
 
 protected:
-    virtual void willSave() SK_OVERRIDE;
-    virtual SaveLayerStrategy willSaveLayer(const SkRect*, const SkPaint*, SaveFlags) SK_OVERRIDE;
-    virtual void willRestore() SK_OVERRIDE;
+    void willSave() SK_OVERRIDE;
+    SaveLayerStrategy willSaveLayer(const SkRect*, const SkPaint*, SaveFlags) SK_OVERRIDE;
+    void willRestore() SK_OVERRIDE;
 
-    virtual void didConcat(const SkMatrix&) SK_OVERRIDE;
-    virtual void didSetMatrix(const SkMatrix&) SK_OVERRIDE;
+    void didConcat(const SkMatrix&) SK_OVERRIDE;
+    void didSetMatrix(const SkMatrix&) SK_OVERRIDE;
 
-    virtual void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK_OVERRIDE;
+    void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK_OVERRIDE;
     virtual void onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y,
                             const SkPaint&) SK_OVERRIDE;
     virtual void onDrawPosText(const void* text, size_t byteLength, const SkPoint pos[],
@@ -286,12 +286,12 @@
                         const SkColor colors[], SkXfermode* xmode,
                         const uint16_t indices[], int indexCount,
                         const SkPaint&) SK_OVERRIDE;
-    virtual void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
-    virtual void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
-    virtual void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
-    virtual void onClipRegion(const SkRegion&, SkRegion::Op) SK_OVERRIDE;
+    void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
+    void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
+    void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
+    void onClipRegion(const SkRegion&, SkRegion::Op) SK_OVERRIDE;
 
-    virtual void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) SK_OVERRIDE;
+    void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) SK_OVERRIDE;
 
 private:
     void recordTranslate(const SkMatrix&);
diff --git a/src/pipe/utils/SamplePipeControllers.h b/src/pipe/utils/SamplePipeControllers.h
index 35cfba7..3442c49 100644
--- a/src/pipe/utils/SamplePipeControllers.h
+++ b/src/pipe/utils/SamplePipeControllers.h
@@ -18,8 +18,8 @@
 public:
     PipeController(SkCanvas* target, SkPicture::InstallPixelRefProc proc = NULL);
     virtual ~PipeController();
-    virtual void* requestBlock(size_t minRequest, size_t* actual) SK_OVERRIDE;
-    virtual void notifyWritten(size_t bytes) SK_OVERRIDE;
+    void* requestBlock(size_t minRequest, size_t* actual) SK_OVERRIDE;
+    void notifyWritten(size_t bytes) SK_OVERRIDE;
 protected:
     const void* getData() { return (const char*) fBlock + fBytesWritten; }
     SkGPipeReader fReader;
@@ -37,8 +37,8 @@
     TiledPipeController(const SkBitmap&, SkPicture::InstallPixelRefProc proc = NULL,
                         const SkMatrix* initialMatrix = NULL);
     virtual ~TiledPipeController() {};
-    virtual void notifyWritten(size_t bytes) SK_OVERRIDE;
-    virtual int numberOfReaders() const SK_OVERRIDE { return NumberOfTiles; }
+    void notifyWritten(size_t bytes) SK_OVERRIDE;
+    int numberOfReaders() const SK_OVERRIDE { return NumberOfTiles; }
 private:
     enum {
         NumberOfTiles = 10
@@ -57,9 +57,9 @@
 class ThreadSafePipeController : public SkGPipeController {
 public:
     ThreadSafePipeController(int numberOfReaders);
-    virtual void* requestBlock(size_t minRequest, size_t* actual) SK_OVERRIDE;
-    virtual void notifyWritten(size_t bytes) SK_OVERRIDE;
-    virtual int numberOfReaders() const SK_OVERRIDE { return fNumberOfReaders; }
+    void* requestBlock(size_t minRequest, size_t* actual) SK_OVERRIDE;
+    void notifyWritten(size_t bytes) SK_OVERRIDE;
+    int numberOfReaders() const SK_OVERRIDE { return fNumberOfReaders; }
 
     /**
      * Play the stored drawing commands to the specified canvas. If SkGPipeWriter::startRecording
diff --git a/src/ports/SkFontConfigInterface_direct.cpp b/src/ports/SkFontConfigInterface_direct.cpp
index 039d868..124ca2a 100644
--- a/src/ports/SkFontConfigInterface_direct.cpp
+++ b/src/ports/SkFontConfigInterface_direct.cpp
@@ -112,10 +112,10 @@
                                  FontIdentity* outFontIdentifier,
                                  SkString* outFamilyName,
                                  SkTypeface::Style* outStyle) SK_OVERRIDE;
-    virtual SkStream* openStream(const FontIdentity&) SK_OVERRIDE;
+    SkStream* openStream(const FontIdentity&) SK_OVERRIDE;
 
     // new APIs
-    virtual SkDataTable* getFamilyNames() SK_OVERRIDE;
+    SkDataTable* getFamilyNames() SK_OVERRIDE;
     virtual bool matchFamilySet(const char inFamilyName[],
                                 SkString* outFamilyName,
                                 SkTArray<FontIdentity>*) SK_OVERRIDE;
diff --git a/src/ports/SkFontConfigTypeface.h b/src/ports/SkFontConfigTypeface.h
index c7d8e26..fcbc16f 100644
--- a/src/ports/SkFontConfigTypeface.h
+++ b/src/ports/SkFontConfigTypeface.h
@@ -66,9 +66,9 @@
         SkSafeRef(localStream);
     }
 
-    virtual void onGetFamilyName(SkString* familyName) const SK_OVERRIDE;
-    virtual void onGetFontDescriptor(SkFontDescriptor*, bool*) const SK_OVERRIDE;
-    virtual SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE;
+    void onGetFamilyName(SkString* familyName) const SK_OVERRIDE;
+    void onGetFontDescriptor(SkFontDescriptor*, bool*) const SK_OVERRIDE;
+    SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE;
 
 private:
     typedef SkTypeface_FreeType INHERITED;
diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp
index a2a139c..459abbc 100644
--- a/src/ports/SkFontHost_FreeType.cpp
+++ b/src/ports/SkFontHost_FreeType.cpp
@@ -194,14 +194,14 @@
     }
 
 protected:
-    virtual unsigned generateGlyphCount() SK_OVERRIDE;
-    virtual uint16_t generateCharToGlyph(SkUnichar uni) SK_OVERRIDE;
-    virtual void generateAdvance(SkGlyph* glyph) SK_OVERRIDE;
-    virtual void generateMetrics(SkGlyph* glyph) SK_OVERRIDE;
-    virtual void generateImage(const SkGlyph& glyph) SK_OVERRIDE;
-    virtual void generatePath(const SkGlyph& glyph, SkPath* path) SK_OVERRIDE;
-    virtual void generateFontMetrics(SkPaint::FontMetrics*) SK_OVERRIDE;
-    virtual SkUnichar generateGlyphToChar(uint16_t glyph) SK_OVERRIDE;
+    unsigned generateGlyphCount() SK_OVERRIDE;
+    uint16_t generateCharToGlyph(SkUnichar uni) SK_OVERRIDE;
+    void generateAdvance(SkGlyph* glyph) SK_OVERRIDE;
+    void generateMetrics(SkGlyph* glyph) SK_OVERRIDE;
+    void generateImage(const SkGlyph& glyph) SK_OVERRIDE;
+    void generatePath(const SkGlyph& glyph, SkPath* path) SK_OVERRIDE;
+    void generateFontMetrics(SkPaint::FontMetrics*) SK_OVERRIDE;
+    SkUnichar generateGlyphToChar(uint16_t glyph) SK_OVERRIDE;
 
 private:
     SkFaceRec*  fFaceRec;
diff --git a/src/ports/SkFontHost_FreeType_common.h b/src/ports/SkFontHost_FreeType_common.h
index 7bb53b8..57aedd0 100644
--- a/src/ports/SkFontHost_FreeType_common.h
+++ b/src/ports/SkFontHost_FreeType_common.h
@@ -60,20 +60,20 @@
 
     virtual SkScalerContext* onCreateScalerContext(
                                         const SkDescriptor*) const SK_OVERRIDE;
-    virtual void onFilterRec(SkScalerContextRec*) const SK_OVERRIDE;
+    void onFilterRec(SkScalerContextRec*) const SK_OVERRIDE;
     virtual SkAdvancedTypefaceMetrics* onGetAdvancedTypefaceMetrics(
                                 SkAdvancedTypefaceMetrics::PerGlyphInfo,
                                 const uint32_t*, uint32_t) const SK_OVERRIDE;
-    virtual int onGetUPEM() const SK_OVERRIDE;
+    int onGetUPEM() const SK_OVERRIDE;
     virtual bool onGetKerningPairAdjustments(const uint16_t glyphs[], int count,
                                        int32_t adjustments[]) const SK_OVERRIDE;
     virtual int onCharsToGlyphs(const void* chars, Encoding, uint16_t glyphs[],
                                 int glyphCount) const SK_OVERRIDE;
-    virtual int onCountGlyphs() const SK_OVERRIDE;
+    int onCountGlyphs() const SK_OVERRIDE;
 
-    virtual LocalizedStrings* onCreateFamilyNameIterator() const SK_OVERRIDE;
+    LocalizedStrings* onCreateFamilyNameIterator() const SK_OVERRIDE;
 
-    virtual int onGetTableTags(SkFontTableTag tags[]) const SK_OVERRIDE;
+    int onGetTableTags(SkFontTableTag tags[]) const SK_OVERRIDE;
     virtual size_t onGetTableData(SkFontTableTag, size_t offset,
                                   size_t length, void* data) const SK_OVERRIDE;
 
diff --git a/src/ports/SkFontHost_linux.cpp b/src/ports/SkFontHost_linux.cpp
index 853416c..ec8e338 100644
--- a/src/ports/SkFontHost_linux.cpp
+++ b/src/ports/SkFontHost_linux.cpp
@@ -42,11 +42,11 @@
     virtual const char* getUniqueString() const = 0;
 
 protected:
-    virtual void onGetFamilyName(SkString* familyName) const SK_OVERRIDE {
+    void onGetFamilyName(SkString* familyName) const SK_OVERRIDE {
         *familyName = fFamilyName;
     }
 
-    virtual void onGetFontDescriptor(SkFontDescriptor* desc, bool* isLocal) const SK_OVERRIDE {
+    void onGetFontDescriptor(SkFontDescriptor* desc, bool* isLocal) const SK_OVERRIDE {
         desc->setFamilyName(fFamilyName.c_str());
         desc->setFontFileName(this->getUniqueString());
         desc->setFontIndex(fIndex);
@@ -70,10 +70,10 @@
 public:
     SkTypeface_Empty() : INHERITED(SkFontStyle(), false, true, SkString(), 0) {}
 
-    virtual const char* getUniqueString() const SK_OVERRIDE { return NULL; }
+    const char* getUniqueString() const SK_OVERRIDE { return NULL; }
 
 protected:
-    virtual SkStream* onOpenStream(int*) const SK_OVERRIDE { return NULL; }
+    SkStream* onOpenStream(int*) const SK_OVERRIDE { return NULL; }
 
 private:
     typedef SkTypeface_Custom INHERITED;
@@ -88,10 +88,10 @@
         , fStream(SkRef(stream))
     { }
 
-    virtual const char* getUniqueString() const SK_OVERRIDE { return NULL; }
+    const char* getUniqueString() const SK_OVERRIDE { return NULL; }
 
 protected:
-    virtual SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE {
+    SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE {
         *ttcIndex = this->getIndex();
         return fStream->duplicate();
     }
@@ -119,7 +119,7 @@
         , fStream(c_CustomTypefaceRetain ? SkStream::NewFromFile(fPath.c_str()) : NULL)
     { }
 
-    virtual const char* getUniqueString() const SK_OVERRIDE {
+    const char* getUniqueString() const SK_OVERRIDE {
         const char* str = strrchr(fPath.c_str(), '/');
         if (str) {
             str += 1;   // skip the '/'
@@ -128,7 +128,7 @@
     }
 
 protected:
-    virtual SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE {
+    SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE {
         *ttcIndex = this->getIndex();
         if (fStream.get()) {
             return fStream->duplicate();
@@ -155,11 +155,11 @@
 public:
     explicit SkFontStyleSet_Custom(const SkString familyName) : fFamilyName(familyName) { }
 
-    virtual int count() SK_OVERRIDE {
+    int count() SK_OVERRIDE {
         return fStyles.count();
     }
 
-    virtual void getStyle(int index, SkFontStyle* style, SkString* name) SK_OVERRIDE {
+    void getStyle(int index, SkFontStyle* style, SkString* name) SK_OVERRIDE {
         SkASSERT(index < fStyles.count());
         bool bold = fStyles[index]->isBold();
         bool italic = fStyles[index]->isItalic();
@@ -169,7 +169,7 @@
         name->reset();
     }
 
-    virtual SkTypeface* createTypeface(int index) SK_OVERRIDE {
+    SkTypeface* createTypeface(int index) SK_OVERRIDE {
         SkASSERT(index < fStyles.count());
         return SkRef(fStyles[index].get());
     }
@@ -182,7 +182,7 @@
         return score;
     }
 
-    virtual SkTypeface* matchStyle(const SkFontStyle& pattern) SK_OVERRIDE {
+    SkTypeface* matchStyle(const SkFontStyle& pattern) SK_OVERRIDE {
         if (0 == fStyles.count()) {
             return NULL;
         }
@@ -232,21 +232,21 @@
     }
 
 protected:
-    virtual int onCountFamilies() const SK_OVERRIDE {
+    int onCountFamilies() const SK_OVERRIDE {
         return fFamilies.count();
     }
 
-    virtual void onGetFamilyName(int index, SkString* familyName) const SK_OVERRIDE {
+    void onGetFamilyName(int index, SkString* familyName) const SK_OVERRIDE {
         SkASSERT(index < fFamilies.count());
         familyName->set(fFamilies[index]->fFamilyName);
     }
 
-    virtual SkFontStyleSet_Custom* onCreateStyleSet(int index) const SK_OVERRIDE {
+    SkFontStyleSet_Custom* onCreateStyleSet(int index) const SK_OVERRIDE {
         SkASSERT(index < fFamilies.count());
         return SkRef(fFamilies[index].get());
     }
 
-    virtual SkFontStyleSet_Custom* onMatchFamily(const char familyName[]) const SK_OVERRIDE {
+    SkFontStyleSet_Custom* onMatchFamily(const char familyName[]) const SK_OVERRIDE {
         for (int i = 0; i < fFamilies.count(); ++i) {
             if (fFamilies[i]->fFamilyName.equals(familyName)) {
                 return SkRef(fFamilies[i].get());
@@ -282,12 +282,12 @@
         return NULL;
     }
 
-    virtual SkTypeface* onCreateFromData(SkData* data, int ttcIndex) const SK_OVERRIDE {
+    SkTypeface* onCreateFromData(SkData* data, int ttcIndex) const SK_OVERRIDE {
         SkAutoTUnref<SkStream> stream(new SkMemoryStream(data));
         return this->createFromStream(stream, ttcIndex);
     }
 
-    virtual SkTypeface* onCreateFromStream(SkStream* stream, int ttcIndex) const SK_OVERRIDE {
+    SkTypeface* onCreateFromStream(SkStream* stream, int ttcIndex) const SK_OVERRIDE {
         if (NULL == stream || stream->getLength() <= 0) {
             SkDELETE(stream);
             return NULL;
@@ -304,7 +304,7 @@
         }
     }
 
-    virtual SkTypeface* onCreateFromFile(const char path[], int ttcIndex) const SK_OVERRIDE {
+    SkTypeface* onCreateFromFile(const char path[], int ttcIndex) const SK_OVERRIDE {
         SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(path));
         return stream.get() ? this->createFromStream(stream, ttcIndex) : NULL;
     }
diff --git a/src/ports/SkFontHost_mac.cpp b/src/ports/SkFontHost_mac.cpp
index 8d3a6fa..f12785d 100755
--- a/src/ports/SkFontHost_mac.cpp
+++ b/src/ports/SkFontHost_mac.cpp
@@ -468,22 +468,22 @@
 protected:
     friend class SkFontHost;    // to access our protected members for deprecated methods
 
-    virtual int onGetUPEM() const SK_OVERRIDE;
-    virtual SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE;
-    virtual void onGetFamilyName(SkString* familyName) const SK_OVERRIDE;
-    virtual SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const SK_OVERRIDE;
-    virtual int onGetTableTags(SkFontTableTag tags[]) const SK_OVERRIDE;
+    int onGetUPEM() const SK_OVERRIDE;
+    SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE;
+    void onGetFamilyName(SkString* familyName) const SK_OVERRIDE;
+    SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const SK_OVERRIDE;
+    int onGetTableTags(SkFontTableTag tags[]) const SK_OVERRIDE;
     virtual size_t onGetTableData(SkFontTableTag, size_t offset,
                                   size_t length, void* data) const SK_OVERRIDE;
-    virtual SkScalerContext* onCreateScalerContext(const SkDescriptor*) const SK_OVERRIDE;
-    virtual void onFilterRec(SkScalerContextRec*) const SK_OVERRIDE;
-    virtual void onGetFontDescriptor(SkFontDescriptor*, bool*) const SK_OVERRIDE;
+    SkScalerContext* onCreateScalerContext(const SkDescriptor*) const SK_OVERRIDE;
+    void onFilterRec(SkScalerContextRec*) const SK_OVERRIDE;
+    void onGetFontDescriptor(SkFontDescriptor*, bool*) const SK_OVERRIDE;
     virtual SkAdvancedTypefaceMetrics* onGetAdvancedTypefaceMetrics(
                                 SkAdvancedTypefaceMetrics::PerGlyphInfo,
                                 const uint32_t*, uint32_t) const SK_OVERRIDE;
     virtual int onCharsToGlyphs(const void* chars, Encoding, uint16_t glyphs[],
                                 int glyphCount) const SK_OVERRIDE;
-    virtual int onCountGlyphs() const SK_OVERRIDE;
+    int onCountGlyphs() const SK_OVERRIDE;
 
 private:
     bool fIsLocalStream;
@@ -2109,11 +2109,11 @@
         CFRelease(fFamilyName);
     }
 
-    virtual int count() SK_OVERRIDE {
+    int count() SK_OVERRIDE {
         return fCount;
     }
 
-    virtual void getStyle(int index, SkFontStyle* style, SkString* name) SK_OVERRIDE {
+    void getStyle(int index, SkFontStyle* style, SkString* name) SK_OVERRIDE {
         SkASSERT((unsigned)index < (unsigned)fCount);
         CTFontDescriptorRef desc = (CTFontDescriptorRef)CFArrayGetValueAtIndex(fArray, index);
         if (style) {
@@ -2126,14 +2126,14 @@
         }
     }
 
-    virtual SkTypeface* createTypeface(int index) SK_OVERRIDE {
+    SkTypeface* createTypeface(int index) SK_OVERRIDE {
         SkASSERT((unsigned)index < (unsigned)CFArrayGetCount(fArray));
         CTFontDescriptorRef desc = (CTFontDescriptorRef)CFArrayGetValueAtIndex(fArray, index);
 
         return createFromDesc(fFamilyName, desc);
     }
 
-    virtual SkTypeface* matchStyle(const SkFontStyle& pattern) SK_OVERRIDE {
+    SkTypeface* matchStyle(const SkFontStyle& pattern) SK_OVERRIDE {
         if (0 == fCount) {
             return NULL;
         }
@@ -2197,11 +2197,11 @@
     }
 
 protected:
-    virtual int onCountFamilies() const SK_OVERRIDE {
+    int onCountFamilies() const SK_OVERRIDE {
         return fCount;
     }
 
-    virtual void onGetFamilyName(int index, SkString* familyName) const SK_OVERRIDE {
+    void onGetFamilyName(int index, SkString* familyName) const SK_OVERRIDE {
         if ((unsigned)index < (unsigned)fCount) {
             CFStringToSkString(this->stringAt(index), familyName);
         } else {
@@ -2209,14 +2209,14 @@
         }
     }
 
-    virtual SkFontStyleSet* onCreateStyleSet(int index) const SK_OVERRIDE {
+    SkFontStyleSet* onCreateStyleSet(int index) const SK_OVERRIDE {
         if ((unsigned)index >= (unsigned)fCount) {
             return NULL;
         }
         return CreateSet(this->stringAt(index));
     }
 
-    virtual SkFontStyleSet* onMatchFamily(const char familyName[]) const SK_OVERRIDE {
+    SkFontStyleSet* onMatchFamily(const char familyName[]) const SK_OVERRIDE {
         AutoCFRelease<CFStringRef> cfName(make_CFString(familyName));
         return CreateSet(cfName);
     }
@@ -2237,7 +2237,7 @@
         return NULL;
     }
 
-    virtual SkTypeface* onCreateFromData(SkData* data, int ttcIndex) const SK_OVERRIDE {
+    SkTypeface* onCreateFromData(SkData* data, int ttcIndex) const SK_OVERRIDE {
         AutoCFRelease<CGDataProviderRef> pr(SkCreateDataProviderFromData(data));
         if (NULL == pr) {
             return NULL;
@@ -2245,7 +2245,7 @@
         return create_from_dataProvider(pr);
     }
 
-    virtual SkTypeface* onCreateFromStream(SkStream* stream, int ttcIndex) const SK_OVERRIDE {
+    SkTypeface* onCreateFromStream(SkStream* stream, int ttcIndex) const SK_OVERRIDE {
         AutoCFRelease<CGDataProviderRef> pr(SkCreateDataProviderFromStream(stream));
         if (NULL == pr) {
             return NULL;
@@ -2253,7 +2253,7 @@
         return create_from_dataProvider(pr);
     }
 
-    virtual SkTypeface* onCreateFromFile(const char path[], int ttcIndex) const SK_OVERRIDE {
+    SkTypeface* onCreateFromFile(const char path[], int ttcIndex) const SK_OVERRIDE {
         AutoCFRelease<CGDataProviderRef> pr(CGDataProviderCreateWithFilename(path));
         if (NULL == pr) {
             return NULL;
diff --git a/src/ports/SkFontHost_win.cpp b/src/ports/SkFontHost_win.cpp
index 5ea55bd..6f4a603 100755
--- a/src/ports/SkFontHost_win.cpp
+++ b/src/ports/SkFontHost_win.cpp
@@ -255,20 +255,20 @@
     }
 
 protected:
-    virtual SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE;
-    virtual SkScalerContext* onCreateScalerContext(const SkDescriptor*) const SK_OVERRIDE;
-    virtual void onFilterRec(SkScalerContextRec*) const SK_OVERRIDE;
+    SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE;
+    SkScalerContext* onCreateScalerContext(const SkDescriptor*) const SK_OVERRIDE;
+    void onFilterRec(SkScalerContextRec*) const SK_OVERRIDE;
     virtual SkAdvancedTypefaceMetrics* onGetAdvancedTypefaceMetrics(
                                 SkAdvancedTypefaceMetrics::PerGlyphInfo,
                                 const uint32_t*, uint32_t) const SK_OVERRIDE;
-    virtual void onGetFontDescriptor(SkFontDescriptor*, bool*) const SK_OVERRIDE;
+    void onGetFontDescriptor(SkFontDescriptor*, bool*) const SK_OVERRIDE;
     virtual int onCharsToGlyphs(const void* chars, Encoding encoding,
                                 uint16_t glyphs[], int glyphCount) const SK_OVERRIDE;
-    virtual int onCountGlyphs() const SK_OVERRIDE;
-    virtual int onGetUPEM() const SK_OVERRIDE;
-    virtual void onGetFamilyName(SkString* familyName) const SK_OVERRIDE;
-    virtual SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const SK_OVERRIDE;
-    virtual int onGetTableTags(SkFontTableTag tags[]) const SK_OVERRIDE;
+    int onCountGlyphs() const SK_OVERRIDE;
+    int onGetUPEM() const SK_OVERRIDE;
+    void onGetFamilyName(SkString* familyName) const SK_OVERRIDE;
+    SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const SK_OVERRIDE;
+    int onGetTableTags(SkFontTableTag tags[]) const SK_OVERRIDE;
     virtual size_t onGetTableData(SkFontTableTag, size_t offset,
                                   size_t length, void* data) const SK_OVERRIDE;
 };
@@ -283,7 +283,7 @@
     }
 
 protected:
-    virtual void weak_dispose() const SK_OVERRIDE {
+    void weak_dispose() const SK_OVERRIDE {
         RemoveFontMemResourceEx(fFontMemResource);
         //SkTypefaceCache::Remove(this);
         INHERITED::weak_dispose();
@@ -541,13 +541,13 @@
     bool isValid() const;
 
 protected:
-    virtual unsigned generateGlyphCount() SK_OVERRIDE;
-    virtual uint16_t generateCharToGlyph(SkUnichar uni) SK_OVERRIDE;
-    virtual void generateAdvance(SkGlyph* glyph) SK_OVERRIDE;
-    virtual void generateMetrics(SkGlyph* glyph) SK_OVERRIDE;
-    virtual void generateImage(const SkGlyph& glyph) SK_OVERRIDE;
-    virtual void generatePath(const SkGlyph& glyph, SkPath* path) SK_OVERRIDE;
-    virtual void generateFontMetrics(SkPaint::FontMetrics*) SK_OVERRIDE;
+    unsigned generateGlyphCount() SK_OVERRIDE;
+    uint16_t generateCharToGlyph(SkUnichar uni) SK_OVERRIDE;
+    void generateAdvance(SkGlyph* glyph) SK_OVERRIDE;
+    void generateMetrics(SkGlyph* glyph) SK_OVERRIDE;
+    void generateImage(const SkGlyph& glyph) SK_OVERRIDE;
+    void generatePath(const SkGlyph& glyph, SkPath* path) SK_OVERRIDE;
+    void generateFontMetrics(SkPaint::FontMetrics*) SK_OVERRIDE;
 
 private:
     DWORD getGDIGlyphPath(const SkGlyph& glyph, UINT flags,
@@ -2389,11 +2389,11 @@
         ::DeleteDC(hdc);
     }
 
-    virtual int count() SK_OVERRIDE {
+    int count() SK_OVERRIDE {
         return fArray.count();
     }
 
-    virtual void getStyle(int index, SkFontStyle* fs, SkString* styleName) SK_OVERRIDE {
+    void getStyle(int index, SkFontStyle* fs, SkString* styleName) SK_OVERRIDE {
         if (fs) {
             *fs = get_style(fArray[index].elfLogFont);
         }
@@ -2410,11 +2410,11 @@
         }
     }
 
-    virtual SkTypeface* createTypeface(int index) SK_OVERRIDE {
+    SkTypeface* createTypeface(int index) SK_OVERRIDE {
         return SkCreateTypefaceFromLOGFONT(fArray[index].elfLogFont);
     }
 
-    virtual SkTypeface* matchStyle(const SkFontStyle& pattern) SK_OVERRIDE {
+    SkTypeface* matchStyle(const SkFontStyle& pattern) SK_OVERRIDE {
         // todo:
         return SkCreateTypefaceFromLOGFONT(fArray[0].elfLogFont);
     }
@@ -2436,21 +2436,21 @@
     }
 
 protected:
-    virtual int onCountFamilies() const SK_OVERRIDE {
+    int onCountFamilies() const SK_OVERRIDE {
         return fLogFontArray.count();
     }
 
-    virtual void onGetFamilyName(int index, SkString* familyName) const SK_OVERRIDE {
+    void onGetFamilyName(int index, SkString* familyName) const SK_OVERRIDE {
         SkASSERT((unsigned)index < (unsigned)fLogFontArray.count());
         tchar_to_skstring(fLogFontArray[index].elfLogFont.lfFaceName, familyName);
     }
 
-    virtual SkFontStyleSet* onCreateStyleSet(int index) const SK_OVERRIDE {
+    SkFontStyleSet* onCreateStyleSet(int index) const SK_OVERRIDE {
         SkASSERT((unsigned)index < (unsigned)fLogFontArray.count());
         return SkNEW_ARGS(SkFontStyleSetGDI, (fLogFontArray[index].elfLogFont.lfFaceName));
     }
 
-    virtual SkFontStyleSet* onMatchFamily(const char familyName[]) const SK_OVERRIDE {
+    SkFontStyleSet* onMatchFamily(const char familyName[]) const SK_OVERRIDE {
         if (NULL == familyName) {
             familyName = "";    // do we need this check???
         }
@@ -2480,17 +2480,17 @@
         return this->matchFamilyStyle(familyName.c_str(), fontstyle);
     }
 
-    virtual SkTypeface* onCreateFromStream(SkStream* stream, int ttcIndex) const SK_OVERRIDE {
+    SkTypeface* onCreateFromStream(SkStream* stream, int ttcIndex) const SK_OVERRIDE {
         return create_from_stream(stream);
     }
 
-    virtual SkTypeface* onCreateFromData(SkData* data, int ttcIndex) const SK_OVERRIDE {
+    SkTypeface* onCreateFromData(SkData* data, int ttcIndex) const SK_OVERRIDE {
         // could be in base impl
         SkAutoTUnref<SkStream> stream(SkNEW_ARGS(SkMemoryStream, (data)));
         return this->createFromStream(stream);
     }
 
-    virtual SkTypeface* onCreateFromFile(const char path[], int ttcIndex) const SK_OVERRIDE {
+    SkTypeface* onCreateFromFile(const char path[], int ttcIndex) const SK_OVERRIDE {
         // could be in base impl
         SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(path));
         return this->createFromStream(stream);
diff --git a/src/ports/SkFontMgr_android.cpp b/src/ports/SkFontMgr_android.cpp
index fb77b27..794790b 100644
--- a/src/ports/SkFontMgr_android.cpp
+++ b/src/ports/SkFontMgr_android.cpp
@@ -50,7 +50,7 @@
         , fFamilyName(familyName) { }
 
 protected:
-    virtual void onGetFamilyName(SkString* familyName) const SK_OVERRIDE {
+    void onGetFamilyName(SkString* familyName) const SK_OVERRIDE {
         *familyName = fFamilyName;
     }
 
@@ -84,7 +84,7 @@
         desc->setFontIndex(fIndex);
         *serialize = false;
     }
-    virtual SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE {
+    SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE {
         *ttcIndex = fIndex;
         return SkStream::NewFromFile(fPathName.c_str());
     }
@@ -115,7 +115,7 @@
         *serialize = true;
     }
 
-    virtual SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE {
+    SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE {
         *ttcIndex = fIndex;
         return fStream->duplicate();
     }
@@ -191,10 +191,10 @@
         }
     }
 
-    virtual int count() SK_OVERRIDE {
+    int count() SK_OVERRIDE {
         return fStyles.count();
     }
-    virtual void getStyle(int index, SkFontStyle* style, SkString* name) SK_OVERRIDE {
+    void getStyle(int index, SkFontStyle* style, SkString* name) SK_OVERRIDE {
         if (index < 0 || fStyles.count() <= index) {
             return;
         }
@@ -205,7 +205,7 @@
             name->reset();
         }
     }
-    virtual SkTypeface_AndroidSystem* createTypeface(int index) SK_OVERRIDE {
+    SkTypeface_AndroidSystem* createTypeface(int index) SK_OVERRIDE {
         if (index < 0 || fStyles.count() <= index) {
             return NULL;
         }
@@ -216,7 +216,7 @@
      *  TODO: consider replacing with SkStyleSet_Indirect::matchStyle();
      *  this simpler version using match_score() passes all our tests.
      */
-    virtual SkTypeface_AndroidSystem* matchStyle(const SkFontStyle& pattern) SK_OVERRIDE {
+    SkTypeface_AndroidSystem* matchStyle(const SkFontStyle& pattern) SK_OVERRIDE {
         if (0 == fStyles.count()) {
             return NULL;
         }
@@ -284,11 +284,11 @@
     /** Returns not how many families we have, but how many unique names
      *  exist among the families.
      */
-    virtual int onCountFamilies() const SK_OVERRIDE {
+    int onCountFamilies() const SK_OVERRIDE {
         return fNameToFamilyMap.count();
     }
 
-    virtual void onGetFamilyName(int index, SkString* familyName) const SK_OVERRIDE {
+    void onGetFamilyName(int index, SkString* familyName) const SK_OVERRIDE {
         if (index < 0 || fNameToFamilyMap.count() <= index) {
             familyName->reset();
             return;
@@ -296,14 +296,14 @@
         familyName->set(fNameToFamilyMap[index].name);
     }
 
-    virtual SkFontStyleSet* onCreateStyleSet(int index) const SK_OVERRIDE {
+    SkFontStyleSet* onCreateStyleSet(int index) const SK_OVERRIDE {
         if (index < 0 || fNameToFamilyMap.count() <= index) {
             return NULL;
         }
         return SkRef(fNameToFamilyMap[index].styleSet);
     }
 
-    virtual SkFontStyleSet* onMatchFamily(const char familyName[]) const SK_OVERRIDE {
+    SkFontStyleSet* onMatchFamily(const char familyName[]) const SK_OVERRIDE {
         if (!familyName) {
             return NULL;
         }
@@ -408,17 +408,17 @@
         return NULL;
     }
 
-    virtual SkTypeface* onCreateFromData(SkData* data, int ttcIndex) const SK_OVERRIDE {
+    SkTypeface* onCreateFromData(SkData* data, int ttcIndex) const SK_OVERRIDE {
         SkAutoTUnref<SkStream> stream(new SkMemoryStream(data));
         return this->createFromStream(stream, ttcIndex);
     }
 
-    virtual SkTypeface* onCreateFromFile(const char path[], int ttcIndex) const SK_OVERRIDE {
+    SkTypeface* onCreateFromFile(const char path[], int ttcIndex) const SK_OVERRIDE {
         SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(path));
         return stream.get() ? this->createFromStream(stream, ttcIndex) : NULL;
     }
 
-    virtual SkTypeface* onCreateFromStream(SkStream* stream, int ttcIndex) const SK_OVERRIDE {
+    SkTypeface* onCreateFromStream(SkStream* stream, int ttcIndex) const SK_OVERRIDE {
         bool isFixedPitch;
         SkFontStyle style;
         SkString name;
diff --git a/src/ports/SkFontMgr_fontconfig.cpp b/src/ports/SkFontMgr_fontconfig.cpp
index 7b67069..b5e4eae 100644
--- a/src/ports/SkFontMgr_fontconfig.cpp
+++ b/src/ports/SkFontMgr_fontconfig.cpp
@@ -382,16 +382,16 @@
         , fIndex(index)
     { };
 
-    virtual void onGetFamilyName(SkString* familyName) const SK_OVERRIDE {
+    void onGetFamilyName(SkString* familyName) const SK_OVERRIDE {
         familyName->reset();
     }
 
-    virtual void onGetFontDescriptor(SkFontDescriptor* desc, bool* serialize) const SK_OVERRIDE {
+    void onGetFontDescriptor(SkFontDescriptor* desc, bool* serialize) const SK_OVERRIDE {
         desc->setFontIndex(fIndex);
         *serialize = true;
     }
 
-    virtual SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE {
+    SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE {
         *ttcIndex = fIndex;
         return fStream->duplicate();
     }
@@ -411,11 +411,11 @@
     }
     mutable SkAutoFcPattern fPattern;
 
-    virtual void onGetFamilyName(SkString* familyName) const SK_OVERRIDE {
+    void onGetFamilyName(SkString* familyName) const SK_OVERRIDE {
         *familyName = get_string(fPattern, FC_FAMILY);
     }
 
-    virtual void onGetFontDescriptor(SkFontDescriptor* desc, bool* serialize) const SK_OVERRIDE {
+    void onGetFontDescriptor(SkFontDescriptor* desc, bool* serialize) const SK_OVERRIDE {
         FCLocker lock;
         desc->setFamilyName(get_string(fPattern, FC_FAMILY));
         desc->setFullName(get_string(fPattern, FC_FULLNAME));
@@ -425,7 +425,7 @@
         *serialize = false;
     }
 
-    virtual SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE {
+    SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE {
         FCLocker lock;
         *ttcIndex = get_int(fPattern, FC_INDEX, 0);
         return SkStream::NewFromFile(get_string(fPattern, FC_FILE));
@@ -469,9 +469,9 @@
             fFontSet.reset();
         }
 
-        virtual int count() SK_OVERRIDE { return fFontSet->nfont; }
+        int count() SK_OVERRIDE { return fFontSet->nfont; }
 
-        virtual void getStyle(int index, SkFontStyle* style, SkString* styleName) SK_OVERRIDE {
+        void getStyle(int index, SkFontStyle* style, SkString* styleName) SK_OVERRIDE {
             if (index < 0 || fFontSet->nfont <= index) {
                 return;
             }
@@ -485,14 +485,14 @@
             }
         }
 
-        virtual SkTypeface* createTypeface(int index) SK_OVERRIDE {
+        SkTypeface* createTypeface(int index) SK_OVERRIDE {
             FCLocker lock;
 
             FcPattern* match = fFontSet->fonts[index];
             return fFontMgr->createTypefaceFromFcPattern(match);
         }
 
-        virtual SkTypeface* matchStyle(const SkFontStyle& style) SK_OVERRIDE {
+        SkTypeface* matchStyle(const SkFontStyle& style) SK_OVERRIDE {
             FCLocker lock;
 
             SkAutoFcPattern pattern;
@@ -607,15 +607,15 @@
     }
 
 protected:
-    virtual int onCountFamilies() const SK_OVERRIDE {
+    int onCountFamilies() const SK_OVERRIDE {
         return fFamilyNames->count();
     }
 
-    virtual void onGetFamilyName(int index, SkString* familyName) const SK_OVERRIDE {
+    void onGetFamilyName(int index, SkString* familyName) const SK_OVERRIDE {
         familyName->set(fFamilyNames->atStr(index));
     }
 
-    virtual SkFontStyleSet* onCreateStyleSet(int index) const SK_OVERRIDE {
+    SkFontStyleSet* onCreateStyleSet(int index) const SK_OVERRIDE {
         return this->onMatchFamily(fFamilyNames->atStr(index));
     }
 
@@ -684,7 +684,7 @@
         return false;
     }
 
-    virtual SkFontStyleSet* onMatchFamily(const char familyName[]) const SK_OVERRIDE {
+    SkFontStyleSet* onMatchFamily(const char familyName[]) const SK_OVERRIDE {
         FCLocker lock;
 
         SkAutoFcPattern pattern;
@@ -810,7 +810,7 @@
     }
 
     /** @param stream does not take ownership of the reference. */
-    virtual SkTypeface* onCreateFromStream(SkStream* stream, int ttcIndex) const SK_OVERRIDE {
+    SkTypeface* onCreateFromStream(SkStream* stream, int ttcIndex) const SK_OVERRIDE {
         const size_t length = stream->getLength();
         if (length <= 0 || (1u << 30) < length) {
             return NULL;
@@ -826,12 +826,12 @@
                                               static_cast<SkStreamAsset*>(stream)));
     }
 
-    virtual SkTypeface* onCreateFromData(SkData* data, int ttcIndex) const SK_OVERRIDE {
+    SkTypeface* onCreateFromData(SkData* data, int ttcIndex) const SK_OVERRIDE {
         SkAutoTUnref<SkStreamAsset> stream(SkNEW_ARGS(SkMemoryStream, (data)));
         return this->createFromStream(stream, ttcIndex);
     }
 
-    virtual SkTypeface* onCreateFromFile(const char path[], int ttcIndex) const SK_OVERRIDE {
+    SkTypeface* onCreateFromFile(const char path[], int ttcIndex) const SK_OVERRIDE {
         SkAutoTUnref<SkStreamAsset> stream(SkStream::NewFromFile(path));
         return this->createFromStream(stream, ttcIndex);
     }
diff --git a/src/ports/SkFontMgr_win_dw.cpp b/src/ports/SkFontMgr_win_dw.cpp
index eed57c2..e7ea980 100644
--- a/src/ports/SkFontMgr_win_dw.cpp
+++ b/src/ports/SkFontMgr_win_dw.cpp
@@ -264,10 +264,10 @@
     }
 
 protected:
-    virtual int onCountFamilies() const SK_OVERRIDE;
-    virtual void onGetFamilyName(int index, SkString* familyName) const SK_OVERRIDE;
-    virtual SkFontStyleSet* onCreateStyleSet(int index) const SK_OVERRIDE;
-    virtual SkFontStyleSet* onMatchFamily(const char familyName[]) const SK_OVERRIDE;
+    int onCountFamilies() const SK_OVERRIDE;
+    void onGetFamilyName(int index, SkString* familyName) const SK_OVERRIDE;
+    SkFontStyleSet* onCreateStyleSet(int index) const SK_OVERRIDE;
+    SkFontStyleSet* onMatchFamily(const char familyName[]) const SK_OVERRIDE;
     virtual SkTypeface* onMatchFamilyStyle(const char familyName[],
                                            const SkFontStyle& fontstyle) const SK_OVERRIDE;
     virtual SkTypeface* onMatchFamilyStyleCharacter(const char familyName[], const SkFontStyle&,
@@ -275,9 +275,9 @@
                                                     SkUnichar character) const SK_OVERRIDE;
     virtual SkTypeface* onMatchFaceStyle(const SkTypeface* familyMember,
                                          const SkFontStyle& fontstyle) const SK_OVERRIDE;
-    virtual SkTypeface* onCreateFromStream(SkStream* stream, int ttcIndex) const SK_OVERRIDE;
-    virtual SkTypeface* onCreateFromData(SkData* data, int ttcIndex) const SK_OVERRIDE;
-    virtual SkTypeface* onCreateFromFile(const char path[], int ttcIndex) const SK_OVERRIDE;
+    SkTypeface* onCreateFromStream(SkStream* stream, int ttcIndex) const SK_OVERRIDE;
+    SkTypeface* onCreateFromData(SkData* data, int ttcIndex) const SK_OVERRIDE;
+    SkTypeface* onCreateFromFile(const char path[], int ttcIndex) const SK_OVERRIDE;
     virtual SkTypeface* onLegacyCreateTypeface(const char familyName[],
                                                unsigned styleBits) const SK_OVERRIDE;
 
@@ -307,10 +307,10 @@
         , fFontFamily(SkRefComPtr(fontFamily))
     { }
 
-    virtual int count() SK_OVERRIDE;
-    virtual void getStyle(int index, SkFontStyle* fs, SkString* styleName) SK_OVERRIDE;
-    virtual SkTypeface* createTypeface(int index) SK_OVERRIDE;
-    virtual SkTypeface* matchStyle(const SkFontStyle& pattern) SK_OVERRIDE;
+    int count() SK_OVERRIDE;
+    void getStyle(int index, SkFontStyle* fs, SkString* styleName) SK_OVERRIDE;
+    SkTypeface* createTypeface(int index) SK_OVERRIDE;
+    SkTypeface* matchStyle(const SkFontStyle& pattern) SK_OVERRIDE;
 
 private:
     SkAutoTUnref<const SkFontMgr_DirectWrite> fFontMgr;
diff --git a/src/ports/SkImageDecoder_WIC.cpp b/src/ports/SkImageDecoder_WIC.cpp
index 0c109a2..80fb8a3 100644
--- a/src/ports/SkImageDecoder_WIC.cpp
+++ b/src/ports/SkImageDecoder_WIC.cpp
@@ -67,7 +67,7 @@
     bool decodeStream(SkStream* stream, SkBitmap* bm, WICModes wicMode, Format* format) const;
 
 protected:
-    virtual Result onDecode(SkStream* stream, SkBitmap* bm, Mode mode) SK_OVERRIDE;
+    Result onDecode(SkStream* stream, SkBitmap* bm, Mode mode) SK_OVERRIDE;
 };
 
 struct FormatConversion {
diff --git a/src/ports/SkRemotableFontMgr_win_dw.cpp b/src/ports/SkRemotableFontMgr_win_dw.cpp
index 2f02e4b..5c3205d 100644
--- a/src/ports/SkRemotableFontMgr_win_dw.cpp
+++ b/src/ports/SkRemotableFontMgr_win_dw.cpp
@@ -112,7 +112,7 @@
         memcpy(fLocaleName.get(), localeName, localeNameLength * sizeof(WCHAR));
     }
 
-    virtual SkDataTable* getFamilyNames() const SK_OVERRIDE {
+    SkDataTable* getFamilyNames() const SK_OVERRIDE {
         int count = fFontCollection->GetFontFamilyCount();
 
         SkDataTableBuilder names(1024);
@@ -179,7 +179,7 @@
         return S_OK;
     }
 
-    virtual SkRemotableFontIdentitySet* getIndex(int familyIndex) const SK_OVERRIDE {
+    SkRemotableFontIdentitySet* getIndex(int familyIndex) const SK_OVERRIDE {
         SkTScopedComPtr<IDWriteFontFamily> fontFamily;
         HRNM(fFontCollection->GetFontFamily(familyIndex, &fontFamily),
              "Could not get requested family.");
@@ -237,7 +237,7 @@
         return S_OK;
     }
 
-    virtual SkRemotableFontIdentitySet* matchName(const char familyName[]) const SK_OVERRIDE {
+    SkRemotableFontIdentitySet* matchName(const char familyName[]) const SK_OVERRIDE {
         SkSMallocWCHAR dwFamilyName;
         if (NULL == familyName) {
             HR_GENERAL(getDefaultFontFamilyName(&dwFamilyName),
@@ -372,11 +372,11 @@
         }
 
         // IUnknown methods
-        virtual ULONG STDMETHODCALLTYPE AddRef() SK_OVERRIDE {
+        ULONG STDMETHODCALLTYPE AddRef() SK_OVERRIDE {
             return InterlockedIncrement(&fRefCount);
         }
 
-        virtual ULONG STDMETHODCALLTYPE Release() SK_OVERRIDE {
+        ULONG STDMETHODCALLTYPE Release() SK_OVERRIDE {
             ULONG newCount = InterlockedDecrement(&fRefCount);
             if (0 == newCount) {
                 delete this;
@@ -473,7 +473,7 @@
         return fontFallbackRenderer->FallbackIdentity();
     }
 
-    virtual SkStreamAsset* getData(int dataId) const SK_OVERRIDE {
+    SkStreamAsset* getData(int dataId) const SK_OVERRIDE {
         SkAutoMutexAcquire ama(fDataIdCacheMutex);
         if (dataId >= fDataIdCache.count()) {
             return NULL;
diff --git a/src/ports/SkScalerContext_win_dw.h b/src/ports/SkScalerContext_win_dw.h
index 0bd79e7..12ca5d5 100644
--- a/src/ports/SkScalerContext_win_dw.h
+++ b/src/ports/SkScalerContext_win_dw.h
@@ -24,13 +24,13 @@
     virtual ~SkScalerContext_DW();
 
 protected:
-    virtual unsigned generateGlyphCount() SK_OVERRIDE;
-    virtual uint16_t generateCharToGlyph(SkUnichar uni) SK_OVERRIDE;
-    virtual void generateAdvance(SkGlyph* glyph) SK_OVERRIDE;
-    virtual void generateMetrics(SkGlyph* glyph) SK_OVERRIDE;
-    virtual void generateImage(const SkGlyph& glyph) SK_OVERRIDE;
-    virtual void generatePath(const SkGlyph& glyph, SkPath* path) SK_OVERRIDE;
-    virtual void generateFontMetrics(SkPaint::FontMetrics*) SK_OVERRIDE;
+    unsigned generateGlyphCount() SK_OVERRIDE;
+    uint16_t generateCharToGlyph(SkUnichar uni) SK_OVERRIDE;
+    void generateAdvance(SkGlyph* glyph) SK_OVERRIDE;
+    void generateMetrics(SkGlyph* glyph) SK_OVERRIDE;
+    void generateImage(const SkGlyph& glyph) SK_OVERRIDE;
+    void generatePath(const SkGlyph& glyph, SkPath* path) SK_OVERRIDE;
+    void generateFontMetrics(SkPaint::FontMetrics*) SK_OVERRIDE;
 
 private:
     const void* drawDWMask(const SkGlyph& glyph,
diff --git a/src/ports/SkTypeface_win_dw.cpp b/src/ports/SkTypeface_win_dw.cpp
index 8b9ed16..563a515 100644
--- a/src/ports/SkTypeface_win_dw.cpp
+++ b/src/ports/SkTypeface_win_dw.cpp
@@ -137,7 +137,7 @@
         : fIndex(0), fStrings(strings)
     { }
 
-    virtual bool next(SkTypeface::LocalizedString* localizedString) SK_OVERRIDE {
+    bool next(SkTypeface::LocalizedString* localizedString) SK_OVERRIDE {
         if (fIndex >= fStrings->GetCount()) {
             return false;
         }
diff --git a/src/ports/SkTypeface_win_dw.h b/src/ports/SkTypeface_win_dw.h
index 7d72dfd..f25d709 100644
--- a/src/ports/SkTypeface_win_dw.h
+++ b/src/ports/SkTypeface_win_dw.h
@@ -84,7 +84,7 @@
     }
 
 protected:
-    virtual void weak_dispose() const SK_OVERRIDE {
+    void weak_dispose() const SK_OVERRIDE {
         if (fDWriteFontCollectionLoader.get()) {
             HRV(fFactory->UnregisterFontCollectionLoader(fDWriteFontCollectionLoader.get()));
         }
@@ -96,20 +96,20 @@
         INHERITED::weak_dispose();
     }
 
-    virtual SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE;
-    virtual SkScalerContext* onCreateScalerContext(const SkDescriptor*) const SK_OVERRIDE;
-    virtual void onFilterRec(SkScalerContextRec*) const SK_OVERRIDE;
+    SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE;
+    SkScalerContext* onCreateScalerContext(const SkDescriptor*) const SK_OVERRIDE;
+    void onFilterRec(SkScalerContextRec*) const SK_OVERRIDE;
     virtual SkAdvancedTypefaceMetrics* onGetAdvancedTypefaceMetrics(
                                 SkAdvancedTypefaceMetrics::PerGlyphInfo,
                                 const uint32_t*, uint32_t) const SK_OVERRIDE;
-    virtual void onGetFontDescriptor(SkFontDescriptor*, bool*) const SK_OVERRIDE;
+    void onGetFontDescriptor(SkFontDescriptor*, bool*) const SK_OVERRIDE;
     virtual int onCharsToGlyphs(const void* chars, Encoding encoding,
                                 uint16_t glyphs[], int glyphCount) const SK_OVERRIDE;
-    virtual int onCountGlyphs() const SK_OVERRIDE;
-    virtual int onGetUPEM() const SK_OVERRIDE;
-    virtual void onGetFamilyName(SkString* familyName) const SK_OVERRIDE;
-    virtual SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const SK_OVERRIDE;
-    virtual int onGetTableTags(SkFontTableTag tags[]) const SK_OVERRIDE;
+    int onCountGlyphs() const SK_OVERRIDE;
+    int onGetUPEM() const SK_OVERRIDE;
+    void onGetFamilyName(SkString* familyName) const SK_OVERRIDE;
+    SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const SK_OVERRIDE;
+    int onGetTableTags(SkFontTableTag tags[]) const SK_OVERRIDE;
     virtual size_t onGetTableData(SkFontTableTag, size_t offset,
                                   size_t length, void* data) const SK_OVERRIDE;
 
diff --git a/src/sfnt/SkOTUtils.h b/src/sfnt/SkOTUtils.h
index 4825fbe..51781b4 100644
--- a/src/sfnt/SkOTUtils.h
+++ b/src/sfnt/SkOTUtils.h
@@ -52,7 +52,7 @@
          */
         static LocalizedStrings_NameTable* CreateForFamilyNames(const SkTypeface& typeface);
 
-        virtual bool next(SkTypeface::LocalizedString* localizedString) SK_OVERRIDE;
+        bool next(SkTypeface::LocalizedString* localizedString) SK_OVERRIDE;
     private:
         static SkOTTableName::Record::NameID::Predefined::Value familyNameTypes[3];
 
@@ -70,7 +70,7 @@
             : fName(name), fLanguage(language), fHasNext(true)
         { }
 
-        virtual bool next(SkTypeface::LocalizedString* localizedString) SK_OVERRIDE {
+        bool next(SkTypeface::LocalizedString* localizedString) SK_OVERRIDE {
             localizedString->fString = fName;
             localizedString->fLanguage = fLanguage;
 
diff --git a/src/utils/SkCanvasStack.h b/src/utils/SkCanvasStack.h
index 028e526..27bc6bc 100644
--- a/src/utils/SkCanvasStack.h
+++ b/src/utils/SkCanvasStack.h
@@ -18,7 +18,7 @@
     virtual ~SkCanvasStack();
 
     void pushCanvas(SkCanvas* canvas, const SkIPoint& origin);
-    virtual void removeAll() SK_OVERRIDE;
+    void removeAll() SK_OVERRIDE;
 
     /*
      * The following add/remove canvas methods are overrides from SkNWayCanvas
@@ -26,16 +26,16 @@
      * can share most of the other implementation of NWay we override those
      * methods to be no-ops.
      */
-    virtual void addCanvas(SkCanvas*) SK_OVERRIDE { SkDEBUGFAIL("Invalid Op"); }
-    virtual void removeCanvas(SkCanvas*) SK_OVERRIDE { SkDEBUGFAIL("Invalid Op"); }
+    void addCanvas(SkCanvas*) SK_OVERRIDE { SkDEBUGFAIL("Invalid Op"); }
+    void removeCanvas(SkCanvas*) SK_OVERRIDE { SkDEBUGFAIL("Invalid Op"); }
 
 protected:
-    virtual void didSetMatrix(const SkMatrix&) SK_OVERRIDE;
+    void didSetMatrix(const SkMatrix&) SK_OVERRIDE;
 
-    virtual void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
-    virtual void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
-    virtual void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
-    virtual void onClipRegion(const SkRegion&, SkRegion::Op) SK_OVERRIDE;
+    void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
+    void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
+    void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
+    void onClipRegion(const SkRegion&, SkRegion::Op) SK_OVERRIDE;
 
 private:
     void clipToZOrderedBounds();
diff --git a/src/utils/SkCanvasStateUtils.cpp b/src/utils/SkCanvasStateUtils.cpp
index a6806dd..0a14802 100644
--- a/src/utils/SkCanvasStateUtils.cpp
+++ b/src/utils/SkCanvasStateUtils.cpp
@@ -141,15 +141,15 @@
     bool failed() { return fFailed; }
 
     // ClipVisitor
-    virtual void clipRect(const SkRect& rect, SkRegion::Op op, bool antialias) SK_OVERRIDE {
+    void clipRect(const SkRect& rect, SkRegion::Op op, bool antialias) SK_OVERRIDE {
         fFailed |= antialias;
     }
 
-    virtual void clipRRect(const SkRRect& rrect, SkRegion::Op op, bool antialias) SK_OVERRIDE {
+    void clipRRect(const SkRRect& rrect, SkRegion::Op op, bool antialias) SK_OVERRIDE {
         fFailed |= antialias;
     }
 
-    virtual void clipPath(const SkPath&, SkRegion::Op, bool antialias) SK_OVERRIDE {
+    void clipPath(const SkPath&, SkRegion::Op, bool antialias) SK_OVERRIDE {
         fFailed |= antialias;
     }
 
diff --git a/src/utils/SkDeferredCanvas.cpp b/src/utils/SkDeferredCanvas.cpp
index a41b3ab..7da8532 100644
--- a/src/utils/SkDeferredCanvas.cpp
+++ b/src/utils/SkDeferredCanvas.cpp
@@ -65,8 +65,8 @@
     DeferredPipeController();
     void setPlaybackCanvas(SkCanvas*);
     virtual ~DeferredPipeController();
-    virtual void* requestBlock(size_t minRequest, size_t* actual) SK_OVERRIDE;
-    virtual void notifyWritten(size_t bytes) SK_OVERRIDE;
+    void* requestBlock(size_t minRequest, size_t* actual) SK_OVERRIDE;
+    void notifyWritten(size_t bytes) SK_OVERRIDE;
     void playback(bool silent);
     bool hasPendingCommands() const { return fAllocator.blockCount() != 0; }
     size_t storageAllocatedForRecording() const { return fAllocator.totalCapacity(); }
@@ -158,22 +158,22 @@
     void recordedDrawCommand();
     void setIsDrawingToLayer(bool value) {fIsDrawingToLayer = value;}
 
-    virtual SkImageInfo imageInfo() const SK_OVERRIDE;
+    SkImageInfo imageInfo() const SK_OVERRIDE;
 
-    virtual GrRenderTarget* accessRenderTarget() SK_OVERRIDE;
+    GrRenderTarget* accessRenderTarget() SK_OVERRIDE;
 
-    virtual SkBaseDevice* onCreateCompatibleDevice(const CreateInfo&) SK_OVERRIDE;
+    SkBaseDevice* onCreateCompatibleDevice(const CreateInfo&) SK_OVERRIDE;
 
-    virtual SkSurface* newSurface(const SkImageInfo&, const SkSurfaceProps&) SK_OVERRIDE;
+    SkSurface* newSurface(const SkImageInfo&, const SkSurfaceProps&) SK_OVERRIDE;
 
 protected:
-    virtual const SkBitmap& onAccessBitmap() SK_OVERRIDE;
-    virtual bool onReadPixels(const SkImageInfo&, void*, size_t, int x, int y) SK_OVERRIDE;
-    virtual bool onWritePixels(const SkImageInfo&, const void*, size_t, int x, int y) SK_OVERRIDE;
+    const SkBitmap& onAccessBitmap() SK_OVERRIDE;
+    bool onReadPixels(const SkImageInfo&, void*, size_t, int x, int y) SK_OVERRIDE;
+    bool onWritePixels(const SkImageInfo&, const void*, size_t, int x, int y) SK_OVERRIDE;
 
     // None of the following drawing methods should ever get called on the
     // deferred device
-    virtual void drawPaint(const SkDraw&, const SkPaint& paint) SK_OVERRIDE
+    void drawPaint(const SkDraw&, const SkPaint& paint) SK_OVERRIDE
         {SkASSERT(0);}
     virtual void drawPoints(const SkDraw&, SkCanvas::PointMode mode,
                             size_t count, const SkPoint[],
@@ -182,7 +182,7 @@
     virtual void drawRect(const SkDraw&, const SkRect& r,
                             const SkPaint& paint) SK_OVERRIDE
         {SkASSERT(0);}
-    virtual void drawOval(const SkDraw&, const SkRect&, const SkPaint&) SK_OVERRIDE
+    void drawOval(const SkDraw&, const SkRect&, const SkPaint&) SK_OVERRIDE
         {SkASSERT(0);}
     virtual void drawRRect(const SkDraw&, const SkRRect& rr,
                            const SkPaint& paint) SK_OVERRIDE
@@ -228,13 +228,13 @@
                             const SkPaint&) SK_OVERRIDE
         {SkASSERT(0);}
 
-    virtual void lockPixels() SK_OVERRIDE {}
-    virtual void unlockPixels() SK_OVERRIDE {}
+    void lockPixels() SK_OVERRIDE {}
+    void unlockPixels() SK_OVERRIDE {}
 
-    virtual bool allowImageFilter(const SkImageFilter*) SK_OVERRIDE {
+    bool allowImageFilter(const SkImageFilter*) SK_OVERRIDE {
         return false;
     }
-    virtual bool canHandleImageFilter(const SkImageFilter*) SK_OVERRIDE {
+    bool canHandleImageFilter(const SkImageFilter*) SK_OVERRIDE {
         return false;
     }
     virtual bool filterImage(const SkImageFilter*, const SkBitmap&,
@@ -243,8 +243,8 @@
     }
 
 private:
-    virtual void flush() SK_OVERRIDE;
-    virtual void replaceBitmapBackendForRasterSurface(const SkBitmap&) SK_OVERRIDE {}
+    void flush() SK_OVERRIDE;
+    void replaceBitmapBackendForRasterSurface(const SkBitmap&) SK_OVERRIDE {}
 
     void beginRecording();
     void init();
diff --git a/src/utils/SkEventTracer.cpp b/src/utils/SkEventTracer.cpp
index 694becf..4c0470b 100644
--- a/src/utils/SkEventTracer.cpp
+++ b/src/utils/SkEventTracer.cpp
@@ -25,7 +25,7 @@
                                  const char* name,
                                  SkEventTracer::Handle handle) SK_OVERRIDE {};
 
-    virtual const uint8_t* getCategoryGroupEnabled(const char* name) SK_OVERRIDE {
+    const uint8_t* getCategoryGroupEnabled(const char* name) SK_OVERRIDE {
         static uint8_t no = 0;
         return &no;
     };
diff --git a/src/utils/SkFrontBufferedStream.cpp b/src/utils/SkFrontBufferedStream.cpp
index 0922960..ad5ae6e 100644
--- a/src/utils/SkFrontBufferedStream.cpp
+++ b/src/utils/SkFrontBufferedStream.cpp
@@ -14,21 +14,21 @@
     // Called by Create.
     FrontBufferedStream(SkStream*, size_t bufferSize);
 
-    virtual size_t read(void* buffer, size_t size) SK_OVERRIDE;
+    size_t read(void* buffer, size_t size) SK_OVERRIDE;
 
-    virtual bool isAtEnd() const SK_OVERRIDE;
+    bool isAtEnd() const SK_OVERRIDE;
 
-    virtual bool rewind() SK_OVERRIDE;
+    bool rewind() SK_OVERRIDE;
 
-    virtual bool hasPosition() const SK_OVERRIDE { return true; }
+    bool hasPosition() const SK_OVERRIDE { return true; }
 
-    virtual size_t getPosition() const SK_OVERRIDE { return fOffset; }
+    size_t getPosition() const SK_OVERRIDE { return fOffset; }
 
-    virtual bool hasLength() const SK_OVERRIDE { return fHasLength; }
+    bool hasLength() const SK_OVERRIDE { return fHasLength; }
 
-    virtual size_t getLength() const SK_OVERRIDE { return fLength; }
+    size_t getLength() const SK_OVERRIDE { return fLength; }
 
-    virtual SkStreamRewindable* duplicate() const SK_OVERRIDE { return NULL; }
+    SkStreamRewindable* duplicate() const SK_OVERRIDE { return NULL; }
 
 private:
     SkAutoTUnref<SkStream>  fStream;
diff --git a/src/utils/SkGatherPixelRefsAndRects.h b/src/utils/SkGatherPixelRefsAndRects.h
index 9589c3e..6f1e1b5 100644
--- a/src/utils/SkGatherPixelRefsAndRects.h
+++ b/src/utils/SkGatherPixelRefsAndRects.h
@@ -35,12 +35,12 @@
         SkSafeUnref(fPRCont);
     }
 
-    virtual SkImageInfo imageInfo() const SK_OVERRIDE {
+    SkImageInfo imageInfo() const SK_OVERRIDE {
         return fEmptyBitmap.info();
     }
 
 protected:
-    virtual void drawPaint(const SkDraw& draw, const SkPaint& paint) SK_OVERRIDE {
+    void drawPaint(const SkDraw& draw, const SkPaint& paint) SK_OVERRIDE {
         SkBitmap bm;
 
         if (GetBitmapFromPaint(paint, &bm)) {
@@ -268,13 +268,13 @@
         NothingToDo();
     }
     // TODO: allow this call to return failure, or move to SkBitmapDevice only.
-    virtual const SkBitmap& onAccessBitmap() SK_OVERRIDE {
+    const SkBitmap& onAccessBitmap() SK_OVERRIDE {
         return fEmptyBitmap;
     }
-    virtual void lockPixels() SK_OVERRIDE { NothingToDo(); }
-    virtual void unlockPixels() SK_OVERRIDE { NothingToDo(); }
-    virtual bool allowImageFilter(const SkImageFilter*) SK_OVERRIDE { return false; }
-    virtual bool canHandleImageFilter(const SkImageFilter*) SK_OVERRIDE { return false; }
+    void lockPixels() SK_OVERRIDE { NothingToDo(); }
+    void unlockPixels() SK_OVERRIDE { NothingToDo(); }
+    bool allowImageFilter(const SkImageFilter*) SK_OVERRIDE { return false; }
+    bool canHandleImageFilter(const SkImageFilter*) SK_OVERRIDE { return false; }
     virtual bool filterImage(const SkImageFilter*, const SkBitmap&, const SkImageFilter::Context&,
                              SkBitmap* result, SkIPoint* offset) SK_OVERRIDE {
         return false;
@@ -296,11 +296,11 @@
         return false;
     }
 
-    virtual void replaceBitmapBackendForRasterSurface(const SkBitmap&) SK_OVERRIDE {
+    void replaceBitmapBackendForRasterSurface(const SkBitmap&) SK_OVERRIDE {
         NotSupported();
     }
 
-    virtual SkBaseDevice* onCreateCompatibleDevice(const CreateInfo& info) SK_OVERRIDE {
+    SkBaseDevice* onCreateCompatibleDevice(const CreateInfo& info) SK_OVERRIDE {
         // we expect to only get called via savelayer, in which case it is fine.
         SkASSERT(kSaveLayer_Usage == info.fUsage);
         return SkNEW_ARGS(SkGatherPixelRefsAndRectsDevice,
diff --git a/src/utils/SkMD5.h b/src/utils/SkMD5.h
index 4f50478..889338b 100644
--- a/src/utils/SkMD5.h
+++ b/src/utils/SkMD5.h
@@ -24,12 +24,12 @@
     /** Processes input, adding it to the digest.
      *  Note that this treats the buffer as a series of uint8_t values.
      */
-    virtual bool write(const void* buffer, size_t size) SK_OVERRIDE {
+    bool write(const void* buffer, size_t size) SK_OVERRIDE {
         this->update(reinterpret_cast<const uint8_t*>(buffer), size);
         return true;
     }
 
-    virtual size_t bytesWritten() const SK_OVERRIDE { return SkToSizeT(this->byteCount); }
+    size_t bytesWritten() const SK_OVERRIDE { return SkToSizeT(this->byteCount); }
 
     /** Processes input, adding it to the digest. Calling this after finish is undefined. */
     void update(const uint8_t* input, size_t length);
diff --git a/src/utils/SkPictureUtils.cpp b/src/utils/SkPictureUtils.cpp
index 2c6b8f5..dadd89a 100644
--- a/src/utils/SkPictureUtils.cpp
+++ b/src/utils/SkPictureUtils.cpp
@@ -60,24 +60,24 @@
         fPRSet = prset;
     }
 
-    virtual SkImageInfo imageInfo() const SK_OVERRIDE {
+    SkImageInfo imageInfo() const SK_OVERRIDE {
         return SkImageInfo::MakeUnknown(fSize.width(), fSize.height());
     }
-    virtual GrRenderTarget* accessRenderTarget() SK_OVERRIDE { return NULL; }
+    GrRenderTarget* accessRenderTarget() SK_OVERRIDE { return NULL; }
     // TODO: allow this call to return failure, or move to SkBitmapDevice only.
-    virtual const SkBitmap& onAccessBitmap() SK_OVERRIDE {
+    const SkBitmap& onAccessBitmap() SK_OVERRIDE {
         return fEmptyBitmap;
     }
-    virtual void lockPixels() SK_OVERRIDE { nothing_to_do(); }
-    virtual void unlockPixels() SK_OVERRIDE { nothing_to_do(); }
-    virtual bool allowImageFilter(const SkImageFilter*) SK_OVERRIDE { return false; }
-    virtual bool canHandleImageFilter(const SkImageFilter*) SK_OVERRIDE { return false; }
+    void lockPixels() SK_OVERRIDE { nothing_to_do(); }
+    void unlockPixels() SK_OVERRIDE { nothing_to_do(); }
+    bool allowImageFilter(const SkImageFilter*) SK_OVERRIDE { return false; }
+    bool canHandleImageFilter(const SkImageFilter*) SK_OVERRIDE { return false; }
     virtual bool filterImage(const SkImageFilter*, const SkBitmap&, const SkImageFilter::Context&,
                              SkBitmap* result, SkIPoint* offset) SK_OVERRIDE {
         return false;
     }
 
-    virtual void drawPaint(const SkDraw&, const SkPaint& paint) SK_OVERRIDE {
+    void drawPaint(const SkDraw&, const SkPaint& paint) SK_OVERRIDE {
         this->addBitmapFromPaint(paint);
     }
     virtual void drawPoints(const SkDraw&, SkCanvas::PointMode mode, size_t count,
@@ -149,15 +149,15 @@
     }
 
 protected:
-    virtual void replaceBitmapBackendForRasterSurface(const SkBitmap&) SK_OVERRIDE {
+    void replaceBitmapBackendForRasterSurface(const SkBitmap&) SK_OVERRIDE {
         not_supported();
     }
-    virtual SkBaseDevice* onCreateCompatibleDevice(const CreateInfo& cinfo) SK_OVERRIDE {
+    SkBaseDevice* onCreateCompatibleDevice(const CreateInfo& cinfo) SK_OVERRIDE {
         // we expect to only get called via savelayer, in which case it is fine.
         SkASSERT(kSaveLayer_Usage == cinfo.fUsage);
         return SkNEW_ARGS(GatherPixelRefDevice, (cinfo.fInfo.width(), cinfo.fInfo.height(), fPRSet));
     }
-    virtual void flush() SK_OVERRIDE {}
+    void flush() SK_OVERRIDE {}
 
 private:
     PixelRefSet*  fPRSet;
diff --git a/src/utils/SkSHA1.h b/src/utils/SkSHA1.h
index df8b9bf..e7ede64 100644
--- a/src/utils/SkSHA1.h
+++ b/src/utils/SkSHA1.h
@@ -24,12 +24,12 @@
     /** Processes input, adding it to the digest.
      *  Note that this treats the buffer as a series of uint8_t values.
      */
-    virtual bool write(const void* buffer, size_t size) SK_OVERRIDE {
+    bool write(const void* buffer, size_t size) SK_OVERRIDE {
         update(reinterpret_cast<const uint8_t*>(buffer), size);
         return true;
     }
 
-    virtual size_t bytesWritten() const SK_OVERRIDE { return SkToSizeT(this->byteCount); }
+    size_t bytesWritten() const SK_OVERRIDE { return SkToSizeT(this->byteCount); }
 
     /** Processes input, adding it to the digest. Calling this after finish is undefined. */
     void update(const uint8_t* input, size_t length);
diff --git a/src/utils/SkTextureCompressor_Blitter.h b/src/utils/SkTextureCompressor_Blitter.h
index cdf2fb6..186df53 100644
--- a/src/utils/SkTextureCompressor_Blitter.h
+++ b/src/utils/SkTextureCompressor_Blitter.h
@@ -85,7 +85,7 @@
     virtual ~SkTCompressedAlphaBlitter() { this->flushRuns(); }
 
     // Blit a horizontal run of one or more pixels.
-    virtual void blitH(int x, int y, int width) SK_OVERRIDE {
+    void blitH(int x, int y, int width) SK_OVERRIDE {
         // This function is intended to be called from any standard RGB
         // buffer, so we should never encounter it. However, if some code
         // path does end up here, then this needs to be investigated.
@@ -141,7 +141,7 @@
     }
     
     // Blit a vertical run of pixels with a constant alpha value.
-    virtual void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE {
+    void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE {
         // This function is currently not implemented. It is not explicitly
         // required by the contract, but if at some time a code path runs into
         // this function (which is entirely possible), it needs to be implemented.
@@ -163,7 +163,7 @@
 #ifdef SK_DEBUG
     bool fCalledOnceWithNonzeroY;
 #endif
-    virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE {
+    void blitRect(int x, int y, int width, int height) SK_OVERRIDE {
 
         // Assumptions:
         SkASSERT(0 == x);
@@ -306,7 +306,7 @@
 #ifdef SK_DEBUG
     bool fBlitMaskCalled;
 #endif
-    virtual void blitMask(const SkMask& mask, const SkIRect& clip) SK_OVERRIDE {
+    void blitMask(const SkMask& mask, const SkIRect& clip) SK_OVERRIDE {
 
         // Assumptions:
         SkASSERT(!fBlitMaskCalled);
@@ -368,7 +368,7 @@
     // If the blitter just sets a single value for each pixel, return the
     // bitmap it draws into, and assign value. If not, return NULL and ignore
     // the value parameter.
-    virtual const SkBitmap* justAnOpaqueColor(uint32_t* value) SK_OVERRIDE {
+    const SkBitmap* justAnOpaqueColor(uint32_t* value) SK_OVERRIDE {
         return NULL;
     }
 
@@ -378,7 +378,7 @@
      * to preserve semantics if blitAntiH doesn't get called in too many
      * weird ways...
      */
-    virtual int requestRowsPreserved() const SK_OVERRIDE { return BlockDim; }
+    int requestRowsPreserved() const SK_OVERRIDE { return BlockDim; }
 
 private:
     static const int kPixelsPerBlock = BlockDim * BlockDim;
diff --git a/src/utils/debugger/SkDebugCanvas.cpp b/src/utils/debugger/SkDebugCanvas.cpp
index d770407..6a04006 100644
--- a/src/utils/debugger/SkDebugCanvas.cpp
+++ b/src/utils/debugger/SkDebugCanvas.cpp
@@ -95,7 +95,7 @@
 
 class OverdrawXfermode : public SkXfermode {
 public:
-    virtual SkPMColor xferColor(SkPMColor src, SkPMColor dst) const SK_OVERRIDE {
+    SkPMColor xferColor(SkPMColor src, SkPMColor dst) const SK_OVERRIDE {
         // This table encodes the color progression of the overdraw visualization
         static const SkPMColor gTable[] = {
             SkPackARGB32(0x00, 0x00, 0x00, 0x00),
@@ -120,7 +120,7 @@
         return gTable[SK_ARRAY_COUNT(gTable)-1];
     }
 
-    virtual Factory getFactory() const SK_OVERRIDE { return NULL; }
+    Factory getFactory() const SK_OVERRIDE { return NULL; }
 #ifndef SK_IGNORE_TO_STRING
     virtual void toString(SkString* str) const { str->set("OverdrawXfermode"); }
 #endif
@@ -136,7 +136,7 @@
         delete fXferMode;
     }
 
-    virtual bool filter(SkPaint* p, Type) SK_OVERRIDE {
+    bool filter(SkPaint* p, Type) SK_OVERRIDE {
         p->setXfermode(fXferMode);
         return true;
     }
@@ -159,7 +159,7 @@
         fFilterLevel = filterLevel;
     }
 
-    virtual bool filter(SkPaint* p, Type) SK_OVERRIDE {
+    bool filter(SkPaint* p, Type) SK_OVERRIDE {
         p->setFilterLevel(fFilterLevel);
         return true;
     }
@@ -175,21 +175,21 @@
 public:
     SkDebugClipVisitor(SkCanvas* canvas) : fCanvas(canvas) {}
 
-    virtual void clipRect(const SkRect& r, SkRegion::Op, bool doAA) SK_OVERRIDE {
+    void clipRect(const SkRect& r, SkRegion::Op, bool doAA) SK_OVERRIDE {
         SkPaint p;
         p.setColor(SK_ColorRED);
         p.setStyle(SkPaint::kStroke_Style);
         p.setAntiAlias(doAA);
         fCanvas->drawRect(r, p);
     }
-    virtual void clipRRect(const SkRRect& rr, SkRegion::Op, bool doAA) SK_OVERRIDE {
+    void clipRRect(const SkRRect& rr, SkRegion::Op, bool doAA) SK_OVERRIDE {
         SkPaint p;
         p.setColor(SK_ColorGREEN);
         p.setStyle(SkPaint::kStroke_Style);
         p.setAntiAlias(doAA);
         fCanvas->drawRRect(rr, p);
     }
-    virtual void clipPath(const SkPath& path, SkRegion::Op, bool doAA) SK_OVERRIDE {
+    void clipPath(const SkPath& path, SkRegion::Op, bool doAA) SK_OVERRIDE {
         SkPaint p;
         p.setColor(SK_ColorBLUE);
         p.setStyle(SkPaint::kStroke_Style);
diff --git a/src/utils/debugger/SkDebugCanvas.h b/src/utils/debugger/SkDebugCanvas.h
index 4acf832..3d9983b 100644
--- a/src/utils/debugger/SkDebugCanvas.h
+++ b/src/utils/debugger/SkDebugCanvas.h
@@ -146,16 +146,16 @@
 // Inherited from SkCanvas
 ////////////////////////////////////////////////////////////////////////////////
 
-    virtual void beginCommentGroup(const char* description) SK_OVERRIDE;
-    virtual void addComment(const char* kywd, const char* value) SK_OVERRIDE;
-    virtual void endCommentGroup() SK_OVERRIDE;
+    void beginCommentGroup(const char* description) SK_OVERRIDE;
+    void addComment(const char* kywd, const char* value) SK_OVERRIDE;
+    void endCommentGroup() SK_OVERRIDE;
 
     static const int kVizImageHeight = 256;
     static const int kVizImageWidth = 256;
 
-    virtual bool isClipEmpty() const SK_OVERRIDE { return false; }
-    virtual bool isClipRect() const SK_OVERRIDE { return true; }
-    virtual bool getClipBounds(SkRect* bounds) const SK_OVERRIDE {
+    bool isClipEmpty() const SK_OVERRIDE { return false; }
+    bool isClipRect() const SK_OVERRIDE { return true; }
+    bool getClipBounds(SkRect* bounds) const SK_OVERRIDE {
         if (bounds) {
             bounds->setXYWH(0, 0,
                             SkIntToScalar(this->imageInfo().width()),
@@ -163,7 +163,7 @@
         }
         return true;
     }
-    virtual bool getClipDeviceBounds(SkIRect* bounds) const SK_OVERRIDE {
+    bool getClipDeviceBounds(SkIRect* bounds) const SK_OVERRIDE {
         if (bounds) {
             bounds->setLargest();
         }
@@ -171,14 +171,14 @@
     }
 
 protected:
-    virtual void willSave() SK_OVERRIDE;
-    virtual SaveLayerStrategy willSaveLayer(const SkRect*, const SkPaint*, SaveFlags) SK_OVERRIDE;
-    virtual void willRestore() SK_OVERRIDE;
+    void willSave() SK_OVERRIDE;
+    SaveLayerStrategy willSaveLayer(const SkRect*, const SkPaint*, SaveFlags) SK_OVERRIDE;
+    void willRestore() SK_OVERRIDE;
 
-    virtual void didConcat(const SkMatrix&) SK_OVERRIDE;
-    virtual void didSetMatrix(const SkMatrix&) SK_OVERRIDE;
+    void didConcat(const SkMatrix&) SK_OVERRIDE;
+    void didSetMatrix(const SkMatrix&) SK_OVERRIDE;
 
-    virtual void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK_OVERRIDE;
+    void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK_OVERRIDE;
     virtual void onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y,
                             const SkPaint&) SK_OVERRIDE;
     virtual void onDrawPosText(const void* text, size_t byteLength, const SkPoint pos[],
@@ -211,12 +211,12 @@
                         const uint16_t indices[], int indexCount,
                         const SkPaint&) SK_OVERRIDE;
 
-    virtual void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
-    virtual void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
-    virtual void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
-    virtual void onClipRegion(const SkRegion& region, SkRegion::Op) SK_OVERRIDE;
+    void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
+    void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
+    void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
+    void onClipRegion(const SkRegion& region, SkRegion::Op) SK_OVERRIDE;
 
-    virtual void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) SK_OVERRIDE;
+    void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) SK_OVERRIDE;
 
     void markActiveCommands(int index);
 
diff --git a/src/utils/debugger/SkDrawCommand.h b/src/utils/debugger/SkDrawCommand.h
index 831dffc..22ee700 100644
--- a/src/utils/debugger/SkDrawCommand.h
+++ b/src/utils/debugger/SkDrawCommand.h
@@ -79,9 +79,9 @@
 class SkRestoreCommand : public SkDrawCommand {
 public:
     SkRestoreCommand();
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
-    virtual void trackSaveState(int* state) SK_OVERRIDE;
-    virtual Action action() const SK_OVERRIDE { return kPopLayer_Action; }
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    void trackSaveState(int* state) SK_OVERRIDE;
+    Action action() const SK_OVERRIDE { return kPopLayer_Action; }
 
 private:
     typedef SkDrawCommand INHERITED;
@@ -90,7 +90,7 @@
 class SkClearCommand : public SkDrawCommand {
 public:
     SkClearCommand(SkColor color);
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
 private:
     SkColor fColor;
 
@@ -100,8 +100,8 @@
 class SkClipPathCommand : public SkDrawCommand {
 public:
     SkClipPathCommand(const SkPath& path, SkRegion::Op op, bool doAA);
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
-    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    bool render(SkCanvas* canvas) const SK_OVERRIDE;
 private:
     SkPath       fPath;
     SkRegion::Op fOp;
@@ -113,7 +113,7 @@
 class SkClipRegionCommand : public SkDrawCommand {
 public:
     SkClipRegionCommand(const SkRegion& region, SkRegion::Op op);
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
 private:
     SkRegion     fRegion;
     SkRegion::Op fOp;
@@ -124,7 +124,7 @@
 class SkClipRectCommand : public SkDrawCommand {
 public:
     SkClipRectCommand(const SkRect& rect, SkRegion::Op op, bool doAA);
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
 
     const SkRect& rect() const { return fRect; }
     SkRegion::Op op() const { return fOp; }
@@ -141,8 +141,8 @@
 class SkClipRRectCommand : public SkDrawCommand {
 public:
     SkClipRRectCommand(const SkRRect& rrect, SkRegion::Op op, bool doAA);
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
-    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    bool render(SkCanvas* canvas) const SK_OVERRIDE;
 
     const SkRRect& rrect() const { return fRRect; }
     SkRegion::Op op() const { return fOp; }
@@ -159,7 +159,7 @@
 class SkConcatCommand : public SkDrawCommand {
 public:
     SkConcatCommand(const SkMatrix& matrix);
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
 private:
     SkMatrix fMatrix;
 
@@ -170,8 +170,8 @@
 public:
     SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
                         const SkPaint* paint);
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
-    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    bool render(SkCanvas* canvas) const SK_OVERRIDE;
 private:
     SkBitmap fBitmap;
     SkScalar fLeft;
@@ -186,8 +186,8 @@
 public:
     SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
                             const SkRect& dst, const SkPaint* paint);
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
-    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    bool render(SkCanvas* canvas) const SK_OVERRIDE;
 private:
     SkBitmap fBitmap;
     SkIRect  fCenter;
@@ -203,8 +203,8 @@
     SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
                             const SkRect& dst, const SkPaint* paint,
                             SkCanvas::DrawBitmapRectFlags flags);
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
-    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    bool render(SkCanvas* canvas) const SK_OVERRIDE;
 
     const SkBitmap& bitmap() const { return fBitmap; }
 
@@ -240,7 +240,7 @@
 class SkBeginCommentGroupCommand : public SkDrawCommand {
 public:
     SkBeginCommentGroupCommand(const char* description);
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE {
+    void execute(SkCanvas* canvas) const SK_OVERRIDE {
         canvas->beginCommentGroup(fDescription.c_str());
     };
 private:
@@ -252,7 +252,7 @@
 class SkCommentCommand : public SkDrawCommand {
 public:
     SkCommentCommand(const char* kywd, const char* value);
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE {
+    void execute(SkCanvas* canvas) const SK_OVERRIDE {
         canvas->addComment(fKywd.c_str(), fValue.c_str());
     };
 private:
@@ -265,7 +265,7 @@
 class SkEndCommentGroupCommand : public SkDrawCommand {
 public:
     SkEndCommentGroupCommand();
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE {
+    void execute(SkCanvas* canvas) const SK_OVERRIDE {
         canvas->endCommentGroup();
     };
 private:
@@ -275,8 +275,8 @@
 class SkDrawOvalCommand : public SkDrawCommand {
 public:
     SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
-    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    bool render(SkCanvas* canvas) const SK_OVERRIDE;
 private:
     SkRect  fOval;
     SkPaint fPaint;
@@ -287,8 +287,8 @@
 class SkDrawPaintCommand : public SkDrawCommand {
 public:
     SkDrawPaintCommand(const SkPaint& paint);
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
-    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    bool render(SkCanvas* canvas) const SK_OVERRIDE;
 private:
     SkPaint fPaint;
 
@@ -298,8 +298,8 @@
 class SkDrawPathCommand : public SkDrawCommand {
 public:
     SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
-    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    bool render(SkCanvas* canvas) const SK_OVERRIDE;
 
 private:
     SkPath   fPath;
@@ -311,8 +311,8 @@
 class SkDrawPictureCommand : public SkDrawCommand {
 public:
     SkDrawPictureCommand(const SkPicture* picture, const SkMatrix* matrix, const SkPaint* paint);
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
-    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    bool render(SkCanvas* canvas) const SK_OVERRIDE;
 
 private:
     SkAutoTUnref<const SkPicture> fPicture;
@@ -329,8 +329,8 @@
     SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
                         const SkPaint& paint);
     virtual ~SkDrawPointsCommand() { delete [] fPts; }
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
-    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    bool render(SkCanvas* canvas) const SK_OVERRIDE;
 private:
     SkCanvas::PointMode fMode;
     size_t              fCount;
@@ -345,7 +345,7 @@
     SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
                       const SkPaint& paint);
     virtual ~SkDrawTextCommand() { delete [] fText; }
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
 private:
     char*    fText;
     size_t   fByteLength;
@@ -361,7 +361,7 @@
     SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
                          const SkPaint& paint);
     virtual ~SkDrawPosTextCommand() { delete [] fPos; delete [] fText; }
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
 private:
     char*    fText;
     size_t   fByteLength;
@@ -376,7 +376,7 @@
     SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path,
                             const SkMatrix* matrix, const SkPaint& paint);
     virtual ~SkDrawTextOnPathCommand() { delete [] fText; }
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
 private:
     char*    fText;
     size_t   fByteLength;
@@ -392,7 +392,7 @@
     SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
                           SkScalar constY, const SkPaint& paint);
     virtual ~SkDrawPosTextHCommand() { delete [] fXpos; delete [] fText; }
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
 private:
     SkScalar* fXpos;
     char*     fText;
@@ -407,8 +407,8 @@
 public:
     SkDrawTextBlobCommand(const SkTextBlob* blob, SkScalar x, SkScalar y, const SkPaint& paint);
 
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
-    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    bool render(SkCanvas* canvas) const SK_OVERRIDE;
 
 private:
     SkAutoTUnref<const SkTextBlob> fBlob;
@@ -422,7 +422,7 @@
 class SkDrawRectCommand : public SkDrawCommand {
 public:
     SkDrawRectCommand(const SkRect& rect, const SkPaint& paint);
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
 
     const SkRect& rect() const   { return fRect; }
     const SkPaint& paint() const { return fPaint; }
@@ -436,8 +436,8 @@
 class SkDrawRRectCommand : public SkDrawCommand {
 public:
     SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
-    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    bool render(SkCanvas* canvas) const SK_OVERRIDE;
 private:
     SkRRect fRRect;
     SkPaint fPaint;
@@ -449,8 +449,8 @@
 public:
     SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
                         const SkPaint& paint);
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
-    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    bool render(SkCanvas* canvas) const SK_OVERRIDE;
 private:
     SkRRect fOuter;
     SkRRect fInner;
@@ -462,8 +462,8 @@
 class SkDrawSpriteCommand : public SkDrawCommand {
 public:
     SkDrawSpriteCommand(const SkBitmap& bitmap, int left, int top, const SkPaint* paint);
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
-    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    bool render(SkCanvas* canvas) const SK_OVERRIDE;
 private:
     SkBitmap fBitmap;
     int      fLeft;
@@ -482,7 +482,7 @@
                           const uint16_t indices[], int indexCount,
                           const SkPaint& paint);
     virtual ~SkDrawVerticesCommand();
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
 private:
     SkCanvas::VertexMode fVmode;
     int         fVertexCount;
@@ -500,7 +500,7 @@
 class SkRotateCommand : public SkDrawCommand {
 public:
     SkRotateCommand(SkScalar degrees);
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
 private:
     SkScalar fDegrees;
 
@@ -510,9 +510,9 @@
 class SkSaveCommand : public SkDrawCommand {
 public:
     SkSaveCommand();
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
-    virtual void trackSaveState(int* state) SK_OVERRIDE;
-    virtual Action action() const SK_OVERRIDE { return kPushLayer_Action; }
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    void trackSaveState(int* state) SK_OVERRIDE;
+    Action action() const SK_OVERRIDE { return kPushLayer_Action; }
 private:
     typedef SkDrawCommand INHERITED;
 };
@@ -521,12 +521,12 @@
 public:
     SkSaveLayerCommand(const SkRect* bounds, const SkPaint* paint,
                        SkCanvas::SaveFlags flags);
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
-    virtual void vizExecute(SkCanvas* canvas) const SK_OVERRIDE;
-    virtual void trackSaveState(int* state) SK_OVERRIDE;
-    virtual Action action() const SK_OVERRIDE{ return kPushLayer_Action; }
-    virtual void setActive(bool active) SK_OVERRIDE { fActive = active; }
-    virtual bool active() const SK_OVERRIDE { return fActive; }
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    void vizExecute(SkCanvas* canvas) const SK_OVERRIDE;
+    void trackSaveState(int* state) SK_OVERRIDE;
+    Action action() const SK_OVERRIDE{ return kPushLayer_Action; }
+    void setActive(bool active) SK_OVERRIDE { fActive = active; }
+    bool active() const SK_OVERRIDE { return fActive; }
 
     const SkPaint* paint() const { return fPaintPtr; }
 
@@ -544,7 +544,7 @@
 class SkScaleCommand : public SkDrawCommand {
 public:
     SkScaleCommand(SkScalar sx, SkScalar sy);
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
 
     SkScalar x() const { return fSx; }
     SkScalar y() const { return fSy; }
@@ -559,8 +559,8 @@
 class SkSetMatrixCommand : public SkDrawCommand {
 public:
     SkSetMatrixCommand(const SkMatrix& matrix);
-    virtual void setUserMatrix(const SkMatrix&) SK_OVERRIDE;
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    void setUserMatrix(const SkMatrix&) SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
 private:
     SkMatrix fUserMatrix;
     SkMatrix fMatrix;
@@ -571,7 +571,7 @@
 class SkSkewCommand : public SkDrawCommand {
 public:
     SkSkewCommand(SkScalar sx, SkScalar sy);
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
 private:
     SkScalar fSx;
     SkScalar fSy;
@@ -582,7 +582,7 @@
 class SkTranslateCommand : public SkDrawCommand {
 public:
     SkTranslateCommand(SkScalar dx, SkScalar dy);
-    virtual void execute(SkCanvas* canvas) const SK_OVERRIDE;
+    void execute(SkCanvas* canvas) const SK_OVERRIDE;
 
     SkScalar x() const { return fDx; }
     SkScalar y() const { return fDy; }
diff --git a/src/utils/win/SkDWriteFontFileStream.h b/src/utils/win/SkDWriteFontFileStream.h
index ac98be6..1800e2f 100644
--- a/src/utils/win/SkDWriteFontFileStream.h
+++ b/src/utils/win/SkDWriteFontFileStream.h
@@ -24,16 +24,16 @@
     explicit SkDWriteFontFileStream(IDWriteFontFileStream* fontFileStream);
     virtual ~SkDWriteFontFileStream();
 
-    virtual size_t read(void* buffer, size_t size) SK_OVERRIDE;
-    virtual bool isAtEnd() const SK_OVERRIDE;
-    virtual bool rewind() SK_OVERRIDE;
-    virtual SkDWriteFontFileStream* duplicate() const SK_OVERRIDE;
-    virtual size_t getPosition() const SK_OVERRIDE;
-    virtual bool seek(size_t position) SK_OVERRIDE;
-    virtual bool move(long offset) SK_OVERRIDE;
-    virtual SkDWriteFontFileStream* fork() const SK_OVERRIDE;
-    virtual size_t getLength() const SK_OVERRIDE;
-    virtual const void* getMemoryBase() SK_OVERRIDE;
+    size_t read(void* buffer, size_t size) SK_OVERRIDE;
+    bool isAtEnd() const SK_OVERRIDE;
+    bool rewind() SK_OVERRIDE;
+    SkDWriteFontFileStream* duplicate() const SK_OVERRIDE;
+    size_t getPosition() const SK_OVERRIDE;
+    bool seek(size_t position) SK_OVERRIDE;
+    bool move(long offset) SK_OVERRIDE;
+    SkDWriteFontFileStream* fork() const SK_OVERRIDE;
+    size_t getLength() const SK_OVERRIDE;
+    const void* getMemoryBase() SK_OVERRIDE;
 
 private:
     SkTScopedComPtr<IDWriteFontFileStream> fFontFileStream;
diff --git a/src/utils/win/SkDWriteGeometrySink.h b/src/utils/win/SkDWriteGeometrySink.h
index 99a3262..703ac3d 100644
--- a/src/utils/win/SkDWriteGeometrySink.h
+++ b/src/utils/win/SkDWriteGeometrySink.h
@@ -28,17 +28,17 @@
     virtual ~SkDWriteGeometrySink();
 
 public:
-    virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void **object) SK_OVERRIDE;
-    virtual ULONG STDMETHODCALLTYPE AddRef(void) SK_OVERRIDE;
-    virtual ULONG STDMETHODCALLTYPE Release(void) SK_OVERRIDE;
+    HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void **object) SK_OVERRIDE;
+    ULONG STDMETHODCALLTYPE AddRef(void) SK_OVERRIDE;
+    ULONG STDMETHODCALLTYPE Release(void) SK_OVERRIDE;
 
-    virtual void STDMETHODCALLTYPE SetFillMode(D2D1_FILL_MODE fillMode) SK_OVERRIDE;
-    virtual void STDMETHODCALLTYPE SetSegmentFlags(D2D1_PATH_SEGMENT vertexFlags) SK_OVERRIDE;
-    virtual void STDMETHODCALLTYPE BeginFigure(D2D1_POINT_2F startPoint, D2D1_FIGURE_BEGIN figureBegin) SK_OVERRIDE;
-    virtual void STDMETHODCALLTYPE AddLines(const D2D1_POINT_2F *points, UINT pointsCount) SK_OVERRIDE;
-    virtual void STDMETHODCALLTYPE AddBeziers(const D2D1_BEZIER_SEGMENT *beziers, UINT beziersCount) SK_OVERRIDE;
-    virtual void STDMETHODCALLTYPE EndFigure(D2D1_FIGURE_END figureEnd) SK_OVERRIDE;
-    virtual HRESULT STDMETHODCALLTYPE Close() SK_OVERRIDE;
+    void STDMETHODCALLTYPE SetFillMode(D2D1_FILL_MODE fillMode) SK_OVERRIDE;
+    void STDMETHODCALLTYPE SetSegmentFlags(D2D1_PATH_SEGMENT vertexFlags) SK_OVERRIDE;
+    void STDMETHODCALLTYPE BeginFigure(D2D1_POINT_2F startPoint, D2D1_FIGURE_BEGIN figureBegin) SK_OVERRIDE;
+    void STDMETHODCALLTYPE AddLines(const D2D1_POINT_2F *points, UINT pointsCount) SK_OVERRIDE;
+    void STDMETHODCALLTYPE AddBeziers(const D2D1_BEZIER_SEGMENT *beziers, UINT beziersCount) SK_OVERRIDE;
+    void STDMETHODCALLTYPE EndFigure(D2D1_FIGURE_END figureEnd) SK_OVERRIDE;
+    HRESULT STDMETHODCALLTYPE Close() SK_OVERRIDE;
 
     static HRESULT Create(SkPath* path, IDWriteGeometrySink** geometryToPath);
 };