diff --git a/bench/BlurRectBench.cpp b/bench/BlurRectBench.cpp
index 774bafa..1631302 100644
--- a/bench/BlurRectBench.cpp
+++ b/bench/BlurRectBench.cpp
@@ -105,7 +105,7 @@
 public:
     BlurRectSeparableBench(SkScalar rad) : INHERITED(rad) { }
 
-    ~BlurRectSeparableBench() {
+    ~BlurRectSeparableBench() override {
         SkMask::FreeImage(fSrcMask.fImage);
     }
 
diff --git a/bench/GMBench.h b/bench/GMBench.h
index 5e8b04a..c9ec80c 100644
--- a/bench/GMBench.h
+++ b/bench/GMBench.h
@@ -18,7 +18,7 @@
 public:
     // Constructor takes ownership of the GM param.
     GMBench(skiagm::GM* gm);
-    virtual ~GMBench();
+    ~GMBench() override;
 
 protected:
     const char* onGetName() override;
diff --git a/bench/PDFBench.cpp b/bench/PDFBench.cpp
index 3716ff3..c07bc22 100644
--- a/bench/PDFBench.cpp
+++ b/bench/PDFBench.cpp
@@ -61,7 +61,7 @@
 class PDFImageBench : public Benchmark {
 public:
     PDFImageBench() {}
-    virtual ~PDFImageBench() {}
+    ~PDFImageBench() override {}
 
 protected:
     const char* onGetName() override { return "PDFImage"; }
@@ -100,7 +100,7 @@
 class PDFJpegImageBench : public Benchmark {
 public:
     PDFJpegImageBench() {}
-    virtual ~PDFJpegImageBench() {}
+    ~PDFJpegImageBench() override {}
 
 protected:
     const char* onGetName() override { return "PDFJpegImage"; }
@@ -139,7 +139,7 @@
 class PDFCompressionBench : public Benchmark {
 public:
     PDFCompressionBench() {}
-    virtual ~PDFCompressionBench() {}
+    ~PDFCompressionBench() override {}
 
 protected:
     const char* onGetName() override { return "PDFCompression"; }
diff --git a/bench/ResultsWriter.h b/bench/ResultsWriter.h
index 1d6dc3e..85c4413 100644
--- a/bench/ResultsWriter.h
+++ b/bench/ResultsWriter.h
@@ -85,7 +85,7 @@
         , fBench(nullptr)
         , fConfig(nullptr) {}
 
-    ~NanoJSONResultsWriter() {
+    ~NanoJSONResultsWriter() override {
         this->flush();
     }
 
diff --git a/bench/TextBench.cpp b/bench/TextBench.cpp
index a048ffd..f4a7cdd 100644
--- a/bench/TextBench.cpp
+++ b/bench/TextBench.cpp
@@ -63,7 +63,7 @@
         fPaint.setColor(color);
     }
 
-    virtual ~TextBench() {
+    ~TextBench() override {
         delete[] fPos;
     }
 
diff --git a/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.cpp b/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.cpp
index 246d34e..da4c42f 100644
--- a/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.cpp
+++ b/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.cpp
@@ -633,7 +633,7 @@
                                      std::move(permutationsProxy), std::move(noiseProxy), matrix));
     }
 
-    virtual ~GrPerlinNoise2Effect() { delete fPaintingData; }
+    ~GrPerlinNoise2Effect() override { delete fPaintingData; }
 
     const char* name() const override { return "PerlinNoise"; }
 
@@ -1053,7 +1053,7 @@
                                             std::move(gradientProxy), matrix));
     }
 
-    virtual ~GrImprovedPerlinNoiseEffect() { delete fPaintingData; }
+    ~GrImprovedPerlinNoiseEffect() override { delete fPaintingData; }
 
     const char* name() const override { return "ImprovedPerlinNoise"; }
 
diff --git a/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.h b/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.h
index 1f4839c..0f40ae4 100644
--- a/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.h
+++ b/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.h
@@ -86,7 +86,7 @@
     class PerlinNoiseShaderContext : public SkShader::Context {
     public:
         PerlinNoiseShaderContext(const SkPerlinNoiseShader2& shader, const ContextRec&);
-        virtual ~PerlinNoiseShaderContext();
+        ~PerlinNoiseShaderContext() override;
 
         void shadeSpan(int x, int y, SkPMColor[], int count) override;
 
@@ -120,7 +120,7 @@
     SkPerlinNoiseShader2(SkPerlinNoiseShader2::Type type, SkScalar baseFrequencyX,
                         SkScalar baseFrequencyY, int numOctaves, SkScalar seed,
                         const SkISize* tileSize);
-    virtual ~SkPerlinNoiseShader2();
+    ~SkPerlinNoiseShader2() override;
 
     const SkPerlinNoiseShader2::Type fType;
     const SkScalar                  fBaseFrequencyX;
diff --git a/experimental/svg/model/SkSVGCircle.h b/experimental/svg/model/SkSVGCircle.h
index 16ee54d..19db926 100644
--- a/experimental/svg/model/SkSVGCircle.h
+++ b/experimental/svg/model/SkSVGCircle.h
@@ -15,7 +15,7 @@
 
 class SkSVGCircle final : public SkSVGShape {
 public:
-    virtual ~SkSVGCircle() = default;
+    ~SkSVGCircle() override = default;
     static sk_sp<SkSVGCircle> Make() { return sk_sp<SkSVGCircle>(new SkSVGCircle()); }
 
     void setCx(const SkSVGLength&);
diff --git a/experimental/svg/model/SkSVGContainer.h b/experimental/svg/model/SkSVGContainer.h
index 6a0b0024..3a6841f 100644
--- a/experimental/svg/model/SkSVGContainer.h
+++ b/experimental/svg/model/SkSVGContainer.h
@@ -13,7 +13,7 @@
 
 class SkSVGContainer : public SkSVGTransformableNode {
 public:
-    virtual ~SkSVGContainer() = default;
+    ~SkSVGContainer() override = default;
 
     void appendChild(sk_sp<SkSVGNode>) override;
 
diff --git a/experimental/svg/model/SkSVGEllipse.h b/experimental/svg/model/SkSVGEllipse.h
index f17c1e1..68cebd7 100644
--- a/experimental/svg/model/SkSVGEllipse.h
+++ b/experimental/svg/model/SkSVGEllipse.h
@@ -15,7 +15,7 @@
 
 class SkSVGEllipse final : public SkSVGShape {
 public:
-    virtual ~SkSVGEllipse() = default;
+    ~SkSVGEllipse() override = default;
     static sk_sp<SkSVGEllipse> Make() { return sk_sp<SkSVGEllipse>(new SkSVGEllipse()); }
 
     void setCx(const SkSVGLength&);
diff --git a/experimental/svg/model/SkSVGLine.h b/experimental/svg/model/SkSVGLine.h
index 0f15ca5..ec6213c 100644
--- a/experimental/svg/model/SkSVGLine.h
+++ b/experimental/svg/model/SkSVGLine.h
@@ -15,7 +15,7 @@
 
 class SkSVGLine final : public SkSVGShape {
 public:
-    virtual ~SkSVGLine() = default;
+    ~SkSVGLine() override = default;
     static sk_sp<SkSVGLine> Make() { return sk_sp<SkSVGLine>(new SkSVGLine()); }
 
     void setX1(const SkSVGLength&);
diff --git a/experimental/svg/model/SkSVGLinearGradient.h b/experimental/svg/model/SkSVGLinearGradient.h
index 2e4e3f5..4e5905c 100644
--- a/experimental/svg/model/SkSVGLinearGradient.h
+++ b/experimental/svg/model/SkSVGLinearGradient.h
@@ -13,7 +13,7 @@
 
 class SkSVGLinearGradient : public SkSVGHiddenContainer {
 public:
-    virtual ~SkSVGLinearGradient() = default;
+    ~SkSVGLinearGradient() override = default;
     static sk_sp<SkSVGLinearGradient> Make() {
         return sk_sp<SkSVGLinearGradient>(new SkSVGLinearGradient());
     }
diff --git a/experimental/svg/model/SkSVGPath.h b/experimental/svg/model/SkSVGPath.h
index 8b1f2e9..176b838 100644
--- a/experimental/svg/model/SkSVGPath.h
+++ b/experimental/svg/model/SkSVGPath.h
@@ -13,7 +13,7 @@
 
 class SkSVGPath final : public SkSVGShape {
 public:
-    virtual ~SkSVGPath() = default;
+    ~SkSVGPath() override = default;
     static sk_sp<SkSVGPath> Make() { return sk_sp<SkSVGPath>(new SkSVGPath()); }
 
     void setPath(const SkPath& path) { fPath = path; }
diff --git a/experimental/svg/model/SkSVGPoly.h b/experimental/svg/model/SkSVGPoly.h
index 90fb354..3259bc0 100644
--- a/experimental/svg/model/SkSVGPoly.h
+++ b/experimental/svg/model/SkSVGPoly.h
@@ -14,7 +14,7 @@
 // Handles <polygon> and <polyline> elements.
 class SkSVGPoly final : public SkSVGShape {
 public:
-    virtual ~SkSVGPoly() = default;
+    ~SkSVGPoly() override = default;
 
     static sk_sp<SkSVGPoly> MakePolygon() {
         return sk_sp<SkSVGPoly>(new SkSVGPoly(SkSVGTag::kPolygon));
diff --git a/experimental/svg/model/SkSVGRect.h b/experimental/svg/model/SkSVGRect.h
index a0c07a1..e61f276 100644
--- a/experimental/svg/model/SkSVGRect.h
+++ b/experimental/svg/model/SkSVGRect.h
@@ -15,7 +15,7 @@
 
 class SkSVGRect final : public SkSVGShape {
 public:
-    virtual ~SkSVGRect() = default;
+    ~SkSVGRect() override = default;
     static sk_sp<SkSVGRect> Make() { return sk_sp<SkSVGRect>(new SkSVGRect()); }
 
     void setX(const SkSVGLength&);
diff --git a/experimental/svg/model/SkSVGSVG.h b/experimental/svg/model/SkSVGSVG.h
index 675c833..0dfeb76 100644
--- a/experimental/svg/model/SkSVGSVG.h
+++ b/experimental/svg/model/SkSVGSVG.h
@@ -16,7 +16,7 @@
 
 class SkSVGSVG : public SkSVGContainer {
 public:
-    virtual ~SkSVGSVG() = default;
+    ~SkSVGSVG() override = default;
 
     static sk_sp<SkSVGSVG> Make() { return sk_sp<SkSVGSVG>(new SkSVGSVG()); }
 
diff --git a/experimental/svg/model/SkSVGShape.h b/experimental/svg/model/SkSVGShape.h
index 48b2ead..f40609e 100644
--- a/experimental/svg/model/SkSVGShape.h
+++ b/experimental/svg/model/SkSVGShape.h
@@ -16,7 +16,7 @@
 
 class SkSVGShape : public SkSVGTransformableNode {
 public:
-    virtual ~SkSVGShape() = default;
+    ~SkSVGShape() override = default;
 
     void appendChild(sk_sp<SkSVGNode>) override;
 
diff --git a/experimental/svg/model/SkSVGStop.h b/experimental/svg/model/SkSVGStop.h
index 2ffbc5c..5eb0442 100644
--- a/experimental/svg/model/SkSVGStop.h
+++ b/experimental/svg/model/SkSVGStop.h
@@ -15,7 +15,7 @@
 
 class SkSVGStop : public SkSVGHiddenContainer {
 public:
-    virtual ~SkSVGStop() = default;
+    ~SkSVGStop() override = default;
     static sk_sp<SkSVGStop> Make() {
         return sk_sp<SkSVGStop>(new SkSVGStop());
     }
diff --git a/experimental/svg/model/SkSVGTransformableNode.h b/experimental/svg/model/SkSVGTransformableNode.h
index ad217a9..f9cd668 100644
--- a/experimental/svg/model/SkSVGTransformableNode.h
+++ b/experimental/svg/model/SkSVGTransformableNode.h
@@ -13,7 +13,7 @@
 
 class SkSVGTransformableNode : public SkSVGNode {
 public:
-    virtual ~SkSVGTransformableNode() = default;
+    ~SkSVGTransformableNode() override = default;
 
     void setTransform(const SkSVGTransformType& t) { fTransform = t; }
 
diff --git a/gm/giantbitmap.cpp b/gm/giantbitmap.cpp
index e1ba737..37b76a6 100644
--- a/gm/giantbitmap.cpp
+++ b/gm/giantbitmap.cpp
@@ -66,7 +66,7 @@
         fDoRotate = doRotate;
     }
 
-    virtual ~GiantBitmapGM() { delete fBM; }
+    ~GiantBitmapGM() override { delete fBM; }
 
 protected:
 
diff --git a/gm/image.cpp b/gm/image.cpp
index 43e3a0b..f672e07 100644
--- a/gm/image.cpp
+++ b/gm/image.cpp
@@ -114,7 +114,7 @@
         fSize.set(SkIntToScalar(W), SkIntToScalar(H));
     }
 
-    virtual ~ImageGM() {
+    ~ImageGM() override {
         sk_free(fBuffer);
     }
 
diff --git a/gm/multipicturedraw.cpp b/gm/multipicturedraw.cpp
index 35f4c12..e7d4baa 100644
--- a/gm/multipicturedraw.cpp
+++ b/gm/multipicturedraw.cpp
@@ -470,7 +470,7 @@
             }
         }
 
-        virtual ~MultiPictureDraw() {
+        ~MultiPictureDraw() override {
             for (int i = 0; i < kNumPictures; ++i) {
                 SkSafeUnref(fPictures[i]);
             }
diff --git a/include/core/SkImageFilter.h b/include/core/SkImageFilter.h
index 86e12e1..ea2afa2 100644
--- a/include/core/SkImageFilter.h
+++ b/include/core/SkImageFilter.h
@@ -270,7 +270,7 @@
 
     SkImageFilter(sk_sp<SkImageFilter>* inputs, int inputCount, const CropRect* cropRect);
 
-    virtual ~SkImageFilter();
+    ~SkImageFilter() override;
 
     /**
      *  Constructs a new SkImageFilter read from an SkReadBuffer object.
diff --git a/include/core/SkMallocPixelRef.h b/include/core/SkMallocPixelRef.h
index ab337b9..bb07fa2 100644
--- a/include/core/SkMallocPixelRef.h
+++ b/include/core/SkMallocPixelRef.h
@@ -99,7 +99,7 @@
     // The ownPixels version of this constructor is deprecated.
     SkMallocPixelRef(const SkImageInfo&, void* addr, size_t rb, SkColorTable*,
                      bool ownPixels);
-    virtual ~SkMallocPixelRef();
+    ~SkMallocPixelRef() override;
 
     bool onNewLockPixels(LockRec*) override;
     void onUnlockPixels() override;
diff --git a/include/core/SkShader.h b/include/core/SkShader.h
index 4c264e4..e49ad5f 100644
--- a/include/core/SkShader.h
+++ b/include/core/SkShader.h
@@ -40,7 +40,7 @@
 class SK_API SkShader : public SkFlattenable {
 public:
     SkShader(const SkMatrix* localMatrix = NULL);
-    virtual ~SkShader();
+    ~SkShader() override;
 
     /**
      *  Returns the local matrix.
diff --git a/include/core/SkStream.h b/include/core/SkStream.h
index e10aece..428f247 100644
--- a/include/core/SkStream.h
+++ b/include/core/SkStream.h
@@ -261,7 +261,7 @@
      */
     explicit SkFILEStream(FILE* file);
 
-    virtual ~SkFILEStream();
+    ~SkFILEStream() override;
 
     /** Returns true if the current path could be opened. */
     bool isValid() const { return fFILE != nullptr; }
@@ -357,7 +357,7 @@
 class SK_API SkFILEWStream : public SkWStream {
 public:
     SkFILEWStream(const char path[]);
-    virtual ~SkFILEWStream();
+    ~SkFILEWStream() override;
 
     /** Returns true if the current path could be opened.
     */
@@ -377,7 +377,7 @@
 class SK_API SkDynamicMemoryWStream : public SkWStream {
 public:
     SkDynamicMemoryWStream();
-    virtual ~SkDynamicMemoryWStream();
+    ~SkDynamicMemoryWStream() override;
 
     bool write(const void* buffer, size_t size) override;
     size_t bytesWritten() const override;
diff --git a/include/core/SkWriteBuffer.h b/include/core/SkWriteBuffer.h
index a104ffc..12d5d3b 100644
--- a/include/core/SkWriteBuffer.h
+++ b/include/core/SkWriteBuffer.h
@@ -81,7 +81,7 @@
 
     SkBinaryWriteBuffer(uint32_t flags = 0);
     SkBinaryWriteBuffer(void* initialStorage, size_t storageSize, uint32_t flags = 0);
-    ~SkBinaryWriteBuffer();
+    ~SkBinaryWriteBuffer() override;
 
     bool isCrossProcess() const override {
         return SkToBool(fFlags & kCrossProcess_Flag);
diff --git a/include/effects/SkCornerPathEffect.h b/include/effects/SkCornerPathEffect.h
index 593f4be..c252943 100644
--- a/include/effects/SkCornerPathEffect.h
+++ b/include/effects/SkCornerPathEffect.h
@@ -35,7 +35,7 @@
 #endif
 
 protected:
-    virtual ~SkCornerPathEffect();
+    ~SkCornerPathEffect() override;
 
     explicit SkCornerPathEffect(SkScalar radius);
     void flatten(SkWriteBuffer&) const override;
diff --git a/include/effects/SkDashPathEffect.h b/include/effects/SkDashPathEffect.h
index 045bb25..13cbb4d 100644
--- a/include/effects/SkDashPathEffect.h
+++ b/include/effects/SkDashPathEffect.h
@@ -55,7 +55,7 @@
 #endif
 
 protected:
-    virtual ~SkDashPathEffect();
+    ~SkDashPathEffect() override;
     SkDashPathEffect(const SkScalar intervals[], int count, SkScalar phase);
     void flatten(SkWriteBuffer&) const override;
 
diff --git a/include/effects/SkLayerDrawLooper.h b/include/effects/SkLayerDrawLooper.h
index c0a9534..3a35140 100644
--- a/include/effects/SkLayerDrawLooper.h
+++ b/include/effects/SkLayerDrawLooper.h
@@ -15,7 +15,7 @@
 
 class SK_API SkLayerDrawLooper : public SkDrawLooper {
 public:
-    virtual ~SkLayerDrawLooper();
+    ~SkLayerDrawLooper() override;
 
     /**
      *  Bits specifies which aspects of the layer's paint should replace the
diff --git a/include/effects/SkLayerRasterizer.h b/include/effects/SkLayerRasterizer.h
index a1b7e2d..7fcfd6b 100644
--- a/include/effects/SkLayerRasterizer.h
+++ b/include/effects/SkLayerRasterizer.h
@@ -16,7 +16,7 @@
 
 class SK_API SkLayerRasterizer : public SkRasterizer {
 public:
-    virtual ~SkLayerRasterizer();
+    ~SkLayerRasterizer() override;
 
     class SK_API Builder {
     public:
diff --git a/include/effects/SkPerlinNoiseShader.h b/include/effects/SkPerlinNoiseShader.h
index 4e648f3..a86c89b 100644
--- a/include/effects/SkPerlinNoiseShader.h
+++ b/include/effects/SkPerlinNoiseShader.h
@@ -65,7 +65,7 @@
     class PerlinNoiseShaderContext : public SkShader::Context {
     public:
         PerlinNoiseShaderContext(const SkPerlinNoiseShader& shader, const ContextRec&);
-        virtual ~PerlinNoiseShaderContext();
+        ~PerlinNoiseShaderContext() override;
 
         void shadeSpan(int x, int y, SkPMColor[], int count) override;
 
@@ -98,7 +98,7 @@
     SkPerlinNoiseShader(SkPerlinNoiseShader::Type type, SkScalar baseFrequencyX,
                         SkScalar baseFrequencyY, int numOctaves, SkScalar seed,
                         const SkISize* tileSize);
-    virtual ~SkPerlinNoiseShader();
+    ~SkPerlinNoiseShader() override;
 
     const SkPerlinNoiseShader::Type fType;
     const SkScalar                  fBaseFrequencyX;
diff --git a/include/effects/SkTableMaskFilter.h b/include/effects/SkTableMaskFilter.h
index 757ddf2..f226dd1 100644
--- a/include/effects/SkTableMaskFilter.h
+++ b/include/effects/SkTableMaskFilter.h
@@ -50,7 +50,7 @@
     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkTableMaskFilter)
 
 protected:
-    virtual ~SkTableMaskFilter();
+    ~SkTableMaskFilter() override;
 
     void flatten(SkWriteBuffer&) const override;
 
diff --git a/include/private/SkWeakRefCnt.h b/include/private/SkWeakRefCnt.h
index d6631e9..c65ea9e 100644
--- a/include/private/SkWeakRefCnt.h
+++ b/include/private/SkWeakRefCnt.h
@@ -60,7 +60,7 @@
 
     /** Destruct, asserting that the weak reference count is 1.
     */
-    virtual ~SkWeakRefCnt() {
+    ~SkWeakRefCnt() override {
 #ifdef SK_DEBUG
         SkASSERT(getWeakCnt() == 1);
         fWeakCnt.store(0, std::memory_order_relaxed);
diff --git a/include/utils/SkDumpCanvas.h b/include/utils/SkDumpCanvas.h
index b8fff72..727c579 100644
--- a/include/utils/SkDumpCanvas.h
+++ b/include/utils/SkDumpCanvas.h
@@ -22,7 +22,7 @@
     class Dumper;
 
     explicit SkDumpCanvas(Dumper* = 0);
-    virtual ~SkDumpCanvas();
+    ~SkDumpCanvas() override;
 
     enum Verb {
         kNULL_Verb,
diff --git a/include/utils/SkLuaCanvas.h b/include/utils/SkLuaCanvas.h
index 49ff377..7653b45 100644
--- a/include/utils/SkLuaCanvas.h
+++ b/include/utils/SkLuaCanvas.h
@@ -19,7 +19,7 @@
     void pushThis();
 
     SkLuaCanvas(int width, int height, lua_State*, const char function[]);
-    virtual ~SkLuaCanvas();
+    ~SkLuaCanvas() override;
 
 protected:
     void willSave() override;
diff --git a/include/utils/SkNWayCanvas.h b/include/utils/SkNWayCanvas.h
index 3407853..ba0745e 100644
--- a/include/utils/SkNWayCanvas.h
+++ b/include/utils/SkNWayCanvas.h
@@ -15,7 +15,7 @@
 class SK_API SkNWayCanvas : public SkNoDrawCanvas {
 public:
     SkNWayCanvas(int width, int height);
-    virtual ~SkNWayCanvas();
+    ~SkNWayCanvas() override;
 
     virtual void addCanvas(SkCanvas*);
     virtual void removeCanvas(SkCanvas*);
diff --git a/include/views/SkOSWindow_Unix.h b/include/views/SkOSWindow_Unix.h
index 9d1b8e0..48838e7 100644
--- a/include/views/SkOSWindow_Unix.h
+++ b/include/views/SkOSWindow_Unix.h
@@ -26,7 +26,7 @@
 class SkOSWindow : public SkWindow {
 public:
     SkOSWindow(void*);
-    ~SkOSWindow();
+    ~SkOSWindow() override;
 
     void* getHWND() const { return (void*)fUnixWindow.fWin; }
     void* getDisplay() const { return (void*)fUnixWindow.fDisplay; }
diff --git a/samplecode/GMSampleView.h b/samplecode/GMSampleView.h
index 4d29190..6424b43 100644
--- a/samplecode/GMSampleView.h
+++ b/samplecode/GMSampleView.h
@@ -18,7 +18,7 @@
 
 public:
     GMSampleView(GM*);
-    virtual ~GMSampleView();
+    ~GMSampleView() override;
 
     static SkEvent* NewShowSizeEvt(bool doShowSize);
 
diff --git a/samplecode/OverView.cpp b/samplecode/OverView.cpp
index 0cd129e..62e8c2a 100644
--- a/samplecode/OverView.cpp
+++ b/samplecode/OverView.cpp
@@ -45,7 +45,7 @@
 class OverView : public SkView {
 public:
     OverView(int count, const SkViewFactory* factories[]);
-    virtual ~OverView();
+    ~OverView() override;
 
 protected:
     bool onEvent(const SkEvent&) override;
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index 79023a0..6b9a888 100644
--- a/samplecode/SampleApp.cpp
+++ b/samplecode/SampleApp.cpp
@@ -205,7 +205,7 @@
         fBackend = kNone_BackEndType;
     }
 
-    virtual ~DefaultDeviceManager() {
+    ~DefaultDeviceManager() override {
 #if SK_SUPPORT_GPU
         SkSafeUnref(fCurContext);
         SkSafeUnref(fCurIntf);
diff --git a/samplecode/SampleApp.h b/samplecode/SampleApp.h
index 7b0dbf4..e4c1f38 100644
--- a/samplecode/SampleApp.h
+++ b/samplecode/SampleApp.h
@@ -114,7 +114,7 @@
     };
 
     SampleWindow(void* hwnd, int argc, char** argv, DeviceManager*);
-    virtual ~SampleWindow();
+    ~SampleWindow() override;
 
     sk_sp<SkSurface> makeSurface() override {
         sk_sp<SkSurface> surface;
diff --git a/samplecode/SamplePathText.cpp b/samplecode/SamplePathText.cpp
index 26ffb9a..bb2142e 100644
--- a/samplecode/SamplePathText.cpp
+++ b/samplecode/SamplePathText.cpp
@@ -116,7 +116,7 @@
         , fBackMatrices(kNumPaths) {
     }
 
-    ~MovingPathText() {
+    ~MovingPathText() override {
         fBackgroundAnimationTask.wait();
     }
 
@@ -227,7 +227,7 @@
         : fFrontPaths(kNumPaths)
         , fBackPaths(kNumPaths) {}
 
-    ~WavyPathText() {
+    ~WavyPathText() override {
         fBackgroundAnimationTask.wait();
     }
 
diff --git a/samplecode/SampleSVGFile.cpp b/samplecode/SampleSVGFile.cpp
index efffb20..0be7944 100644
--- a/samplecode/SampleSVGFile.cpp
+++ b/samplecode/SampleSVGFile.cpp
@@ -20,7 +20,7 @@
 public:
     SVGFileView(const SkString& path)
         : fPath(path), fLabel(SkStringPrintf("[%s]", SkOSPath::Basename(path.c_str()).c_str())) {}
-    virtual ~SVGFileView() = default;
+    ~SVGFileView() override = default;
 
 protected:
     void onOnceBeforeDraw() override {
diff --git a/src/codec/SkPngCodec.h b/src/codec/SkPngCodec.h
index 7a2ebae..09231f1 100644
--- a/src/codec/SkPngCodec.h
+++ b/src/codec/SkPngCodec.h
@@ -32,7 +32,7 @@
     // Assume IsPng was called and returned true.
     static SkCodec* NewFromStream(SkStream*, SkPngChunkReader* = NULL);
 
-    virtual ~SkPngCodec();
+    ~SkPngCodec() override;
 
 protected:
     // We hold the png_ptr and info_ptr as voidp to avoid having to include png.h
diff --git a/src/codec/SkRawAdapterCodec.h b/src/codec/SkRawAdapterCodec.h
index 8777180..29e817c 100644
--- a/src/codec/SkRawAdapterCodec.h
+++ b/src/codec/SkRawAdapterCodec.h
@@ -24,7 +24,7 @@
 
     explicit SkRawAdapterCodec(SkRawCodec*);
 
-    virtual ~SkRawAdapterCodec() {}
+    ~SkRawAdapterCodec() override {}
 
 protected:
 
diff --git a/src/codec/SkRawCodec.cpp b/src/codec/SkRawCodec.cpp
index 0a1cea1..97baa9c 100644
--- a/src/codec/SkRawCodec.cpp
+++ b/src/codec/SkRawCodec.cpp
@@ -201,7 +201,7 @@
 
 class SkRawLimitedDynamicMemoryWStream : public SkDynamicMemoryWStream {
 public:
-    virtual ~SkRawLimitedDynamicMemoryWStream() {}
+    ~SkRawLimitedDynamicMemoryWStream() override {}
 
     bool write(const void* buffer, size_t size) override {
         size_t newSize;
diff --git a/src/codec/SkSampledCodec.h b/src/codec/SkSampledCodec.h
index 35e4f57..4bcf5bc 100644
--- a/src/codec/SkSampledCodec.h
+++ b/src/codec/SkSampledCodec.h
@@ -19,7 +19,7 @@
 
     explicit SkSampledCodec(SkCodec*);
 
-    virtual ~SkSampledCodec() {}
+    ~SkSampledCodec() override {}
 
 protected:
 
diff --git a/src/codec/SkWebpAdapterCodec.h b/src/codec/SkWebpAdapterCodec.h
index ece46a6..b2c6c7b 100644
--- a/src/codec/SkWebpAdapterCodec.h
+++ b/src/codec/SkWebpAdapterCodec.h
@@ -19,7 +19,7 @@
 
     explicit SkWebpAdapterCodec(SkWebpCodec*);
 
-    virtual ~SkWebpAdapterCodec() {}
+    ~SkWebpAdapterCodec() override {}
 
 protected:
 
diff --git a/src/core/SkAAClip.h b/src/core/SkAAClip.h
index c94756f..ff7801f 100644
--- a/src/core/SkAAClip.h
+++ b/src/core/SkAAClip.h
@@ -100,7 +100,7 @@
 class SkAAClipBlitter : public SkBlitter {
 public:
     SkAAClipBlitter() : fScanlineScratch(nullptr) {}
-    virtual ~SkAAClipBlitter();
+    ~SkAAClipBlitter() override;
 
     void init(SkBlitter* blitter, const SkAAClip* aaclip) {
         SkASSERT(aaclip && !aaclip->isEmpty());
diff --git a/src/core/SkBitmapCache.cpp b/src/core/SkBitmapCache.cpp
index 0751089..76b4588 100644
--- a/src/core/SkBitmapCache.cpp
+++ b/src/core/SkBitmapCache.cpp
@@ -228,7 +228,7 @@
         fMipMap->attachToCacheAndRef();
     }
 
-    virtual ~MipMapRec() {
+    ~MipMapRec() override {
         fMipMap->detachFromCacheAndUnref();
     }
 
diff --git a/src/core/SkBlitter.cpp b/src/core/SkBlitter.cpp
index a386904..0e8bd2d 100644
--- a/src/core/SkBlitter.cpp
+++ b/src/core/SkBlitter.cpp
@@ -611,7 +611,7 @@
             }
         }
 
-        virtual ~Sk3DShaderContext() {
+        ~Sk3DShaderContext() override {
             if (fProxyContext) {
                 fProxyContext->~Context();
             }
diff --git a/src/core/SkBlitter_RGB16.cpp b/src/core/SkBlitter_RGB16.cpp
index e91e23f..6330a39 100644
--- a/src/core/SkBlitter_RGB16.cpp
+++ b/src/core/SkBlitter_RGB16.cpp
@@ -111,7 +111,7 @@
 public:
     SkRGB16_Shader_Blitter(const SkPixmap& device, const SkPaint& paint,
                            SkShader::Context* shaderContext);
-    virtual ~SkRGB16_Shader_Blitter();
+    ~SkRGB16_Shader_Blitter() override;
     void blitH(int x, int y, int width) override;
     virtual void blitAntiH(int x, int y, const SkAlpha* antialias,
                            const int16_t* runs) override;
@@ -133,7 +133,7 @@
 public:
     SkRGB16_Shader_Xfermode_Blitter(const SkPixmap& device, const SkPaint& paint,
                                     SkShader::Context* shaderContext);
-    virtual ~SkRGB16_Shader_Xfermode_Blitter();
+    ~SkRGB16_Shader_Xfermode_Blitter() override;
     void blitH(int x, int y, int width) override;
     virtual void blitAntiH(int x, int y, const SkAlpha* antialias,
                            const int16_t* runs) override;
diff --git a/src/core/SkCoreBlitters.h b/src/core/SkCoreBlitters.h
index 85392dd..0e8b819 100644
--- a/src/core/SkCoreBlitters.h
+++ b/src/core/SkCoreBlitters.h
@@ -85,7 +85,7 @@
 public:
     SkA8_Shader_Blitter(const SkPixmap& device, const SkPaint& paint,
                         SkShader::Context* shaderContext);
-    virtual ~SkA8_Shader_Blitter();
+    ~SkA8_Shader_Blitter() override;
     void blitH(int x, int y, int width) override;
     void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]) override;
     void blitMask(const SkMask&, const SkIRect&) override;
@@ -156,7 +156,7 @@
 public:
     SkARGB32_Shader_Blitter(const SkPixmap& device, const SkPaint& paint,
                             SkShader::Context* shaderContext);
-    virtual ~SkARGB32_Shader_Blitter();
+    ~SkARGB32_Shader_Blitter() override;
     void blitH(int x, int y, int width) override;
     void blitV(int x, int y, int height, SkAlpha alpha) override;
     void blitRect(int x, int y, int width, int height) override;
diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp
index 03ca87e..689e5b7 100644
--- a/src/core/SkDraw.cpp
+++ b/src/core/SkDraw.cpp
@@ -1697,7 +1697,7 @@
     class TriColorShaderContext : public SkShader::Context {
     public:
         TriColorShaderContext(const SkTriColorShader& shader, const ContextRec&);
-        virtual ~TriColorShaderContext();
+        ~TriColorShaderContext() override;
         void shadeSpan(int x, int y, SkPMColor dstC[], int count) override;
 
     private:
diff --git a/src/core/SkExecutor.cpp b/src/core/SkExecutor.cpp
index 5e94d1b..6144dfd 100644
--- a/src/core/SkExecutor.cpp
+++ b/src/core/SkExecutor.cpp
@@ -56,7 +56,7 @@
         }
     }
 
-    ~SkThreadPool() {
+    ~SkThreadPool() override {
         // Signal each thread that it's time to shut down.
         for (int i = 0; i < fThreads.count(); i++) {
             this->add(nullptr);
diff --git a/src/core/SkMaskCache.cpp b/src/core/SkMaskCache.cpp
index eb7c8f0..ccfae18 100644
--- a/src/core/SkMaskCache.cpp
+++ b/src/core/SkMaskCache.cpp
@@ -44,7 +44,7 @@
         fValue.fData = data;
         fValue.fData->attachToCacheAndRef();
     }
-    ~RRectBlurRec() {
+    ~RRectBlurRec() override {
         fValue.fData->detachFromCacheAndUnref();
     }
 
@@ -138,7 +138,7 @@
         fValue.fData = data;
         fValue.fData->attachToCacheAndRef();
     }
-    ~RectsBlurRec() {
+    ~RectsBlurRec() override {
         fValue.fData->detachFromCacheAndUnref();
     }
 
diff --git a/src/core/SkNormalBevelSource.h b/src/core/SkNormalBevelSource.h
index 1d1983c..2fefacd 100644
--- a/src/core/SkNormalBevelSource.h
+++ b/src/core/SkNormalBevelSource.h
@@ -34,7 +34,7 @@
     public:
         Provider();
 
-        virtual ~Provider();
+        ~Provider() override;
 
         void fillScanLine(int x, int y, SkPoint3 output[], int count) const override;
 
diff --git a/src/core/SkNormalFlatSource.h b/src/core/SkNormalFlatSource.h
index 4a8f743..82b56f1 100644
--- a/src/core/SkNormalFlatSource.h
+++ b/src/core/SkNormalFlatSource.h
@@ -31,7 +31,7 @@
     public:
         Provider();
 
-        virtual ~Provider();
+        ~Provider() override;
 
         void fillScanLine(int x, int y, SkPoint3 output[], int count) const override;
 
diff --git a/src/core/SkPictureRecord.h b/src/core/SkPictureRecord.h
index 4e0bf46..dc9a002 100644
--- a/src/core/SkPictureRecord.h
+++ b/src/core/SkPictureRecord.h
@@ -30,7 +30,7 @@
 class SkPictureRecord : public SkCanvas {
 public:
     SkPictureRecord(const SkISize& dimensions, uint32_t recordFlags);
-    virtual ~SkPictureRecord();
+    ~SkPictureRecord() override;
 
     const SkTDArray<const SkPicture* >& getPictureRefs() const {
         return fPictureRefs;
diff --git a/src/core/SkRTree.h b/src/core/SkRTree.h
index 499f7a5..0fb491e 100644
--- a/src/core/SkRTree.h
+++ b/src/core/SkRTree.h
@@ -38,7 +38,7 @@
      * create better proportioned tiles of rectangles.
      */
     explicit SkRTree(SkScalar aspectRatio = 1);
-    virtual ~SkRTree() {}
+    ~SkRTree() override {}
 
     void insert(const SkRect[], int N) override;
     void search(const SkRect& query, SkTDArray<int>* results) const override;
diff --git a/src/core/SkRWBuffer.cpp b/src/core/SkRWBuffer.cpp
index 4ef2d94..49967bd 100644
--- a/src/core/SkRWBuffer.cpp
+++ b/src/core/SkRWBuffer.cpp
@@ -272,7 +272,7 @@
         fGlobalOffset = fLocalOffset = 0;
     }
 
-    virtual ~SkROBufferStreamAsset() { fBuffer->unref(); }
+    ~SkROBufferStreamAsset() override { fBuffer->unref(); }
 
     size_t getLength() const override { return fBuffer->size(); }
 
diff --git a/src/core/SkRegion_path.cpp b/src/core/SkRegion_path.cpp
index 47df8f6..fec7825 100644
--- a/src/core/SkRegion_path.cpp
+++ b/src/core/SkRegion_path.cpp
@@ -26,7 +26,7 @@
 class SkRgnBuilder : public SkBlitter {
 public:
     SkRgnBuilder();
-    virtual ~SkRgnBuilder();
+    ~SkRgnBuilder() override;
 
     // returns true if it could allocate the working storage needed
     bool init(int maxHeight, int maxTransitions, bool pathIsInverse);
diff --git a/src/core/SkResourceCache.cpp b/src/core/SkResourceCache.cpp
index e7c2f94..9f5bc25 100644
--- a/src/core/SkResourceCache.cpp
+++ b/src/core/SkResourceCache.cpp
@@ -91,7 +91,7 @@
     // The pixelref will ref() the colortable (if not NULL), and unref() in destructor
     SkOneShotDiscardablePixelRef(const SkImageInfo&, SkDiscardableMemory*, size_t rowBytes,
                                  SkColorTable*);
-    ~SkOneShotDiscardablePixelRef();
+    ~SkOneShotDiscardablePixelRef() override;
 
 protected:
     bool onNewLockPixels(LockRec*) override;
diff --git a/src/core/SkScan_AAAPath.cpp b/src/core/SkScan_AAAPath.cpp
index 499408a..3eca137 100644
--- a/src/core/SkScan_AAAPath.cpp
+++ b/src/core/SkScan_AAAPath.cpp
@@ -95,7 +95,7 @@
 
 class AdditiveBlitter : public SkBlitter {
 public:
-    virtual ~AdditiveBlitter() {}
+    ~AdditiveBlitter() override {}
 
     virtual SkBlitter* getRealBlitter(bool forceRealBlitter = false) = 0;
 
@@ -136,7 +136,7 @@
 public:
     MaskAdditiveBlitter(SkBlitter* realBlitter, const SkIRect& ir, const SkRegion& clip,
             bool isInverse);
-    ~MaskAdditiveBlitter() {
+    ~MaskAdditiveBlitter() override {
         fRealBlitter->blitMask(fMask, fClipRect);
     }
 
@@ -278,7 +278,7 @@
 public:
     RunBasedAdditiveBlitter(SkBlitter* realBlitter, const SkIRect& ir, const SkRegion& clip,
             bool isInverse);
-    ~RunBasedAdditiveBlitter();
+    ~RunBasedAdditiveBlitter() override;
 
     SkBlitter* getRealBlitter(bool forceRealBlitter) override;
 
diff --git a/src/core/SkScan_AntiPath.cpp b/src/core/SkScan_AntiPath.cpp
index 19989ff..ac4c8c3 100644
--- a/src/core/SkScan_AntiPath.cpp
+++ b/src/core/SkScan_AntiPath.cpp
@@ -104,7 +104,7 @@
 public:
     SuperBlitter(SkBlitter* realBlitter, const SkIRect& ir, const SkRegion& clip, bool isInverse);
 
-    virtual ~SuperBlitter() {
+    ~SuperBlitter() override {
         this->flush();
     }
 
@@ -394,7 +394,7 @@
 class MaskSuperBlitter : public BaseSuperBlitter {
 public:
     MaskSuperBlitter(SkBlitter* realBlitter, const SkIRect& ir, const SkRegion&, bool isInverse);
-    virtual ~MaskSuperBlitter() {
+    ~MaskSuperBlitter() override {
         fRealBlitter->blitMask(fMask, fClipRect);
     }
 
diff --git a/src/core/SkSpriteBlitter_ARGB32.cpp b/src/core/SkSpriteBlitter_ARGB32.cpp
index 6b6d8b1..3ecfcf4 100644
--- a/src/core/SkSpriteBlitter_ARGB32.cpp
+++ b/src/core/SkSpriteBlitter_ARGB32.cpp
@@ -81,7 +81,7 @@
         fAlpha = paint.getAlpha();
     }
 
-    virtual ~Sprite_D32_XferFilter() {
+    ~Sprite_D32_XferFilter() override {
         delete[] fBuffer;
         SkSafeUnref(fColorFilter);
     }
diff --git a/src/core/SkYUVPlanesCache.cpp b/src/core/SkYUVPlanesCache.cpp
index 07a07c6..a962d5a 100644
--- a/src/core/SkYUVPlanesCache.cpp
+++ b/src/core/SkYUVPlanesCache.cpp
@@ -39,7 +39,7 @@
         fValue.fInfo = *info;
         fValue.fData->attachToCacheAndRef();
     }
-    ~YUVPlanesRec() {
+    ~YUVPlanesRec() override {
         fValue.fData->detachFromCacheAndUnref();
     }
 
diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp
index e0b76a2..9bd159d 100644
--- a/src/effects/SkDisplacementMapEffect.cpp
+++ b/src/effects/SkDisplacementMapEffect.cpp
@@ -227,7 +227,7 @@
                                         colorDimensions));
     }
 
-    virtual ~GrDisplacementMapEffect();
+    ~GrDisplacementMapEffect() override;
 
     SkDisplacementMapEffect::ChannelSelectorType xChannelSelector() const {
         return fXChannelSelector;
diff --git a/src/effects/SkHighContrastFilter.cpp b/src/effects/SkHighContrastFilter.cpp
index 267a8ef..c3937cc 100644
--- a/src/effects/SkHighContrastFilter.cpp
+++ b/src/effects/SkHighContrastFilter.cpp
@@ -158,7 +158,7 @@
                                         1.0f - FLT_EPSILON);
     }
 
-    virtual ~SkHighContrast_Filter() { }
+    ~SkHighContrast_Filter() override {}
 
 #if SK_SUPPORT_GPU
     sk_sp<GrFragmentProcessor> asFragmentProcessor(GrContext*, SkColorSpace*) const override;
diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp
index 34e7034..54b8cb1 100644
--- a/src/effects/SkLightingImageFilter.cpp
+++ b/src/effects/SkLightingImageFilter.cpp
@@ -702,7 +702,7 @@
 
 class GrGLDistantLight : public GrGLLight {
 public:
-    virtual ~GrGLDistantLight() {}
+    ~GrGLDistantLight() override {}
     void setData(const GrGLSLProgramDataManager&, const SkImageFilterLight* light) const override;
     void emitSurfaceToLight(GrGLSLUniformHandler*, GrGLSLFPFragmentBuilder*, const char* z) override;
 
@@ -715,7 +715,7 @@
 
 class GrGLPointLight : public GrGLLight {
 public:
-    virtual ~GrGLPointLight() {}
+    ~GrGLPointLight() override {}
     void setData(const GrGLSLProgramDataManager&, const SkImageFilterLight* light) const override;
     void emitSurfaceToLight(GrGLSLUniformHandler*, GrGLSLFPFragmentBuilder*, const char* z) override;
 
@@ -728,7 +728,7 @@
 
 class GrGLSpotLight : public GrGLLight {
 public:
-    virtual ~GrGLSpotLight() {}
+    ~GrGLSpotLight() override {}
     void setData(const GrGLSLProgramDataManager&, const SkImageFilterLight* light) const override;
     void emitSurfaceToLight(GrGLSLUniformHandler*, GrGLSLFPFragmentBuilder*, const char* z) override;
     void emitLightColor(GrGLSLUniformHandler*,
@@ -758,8 +758,6 @@
 
 class SkImageFilterLight : public SkRefCnt {
 public:
-
-
     enum LightType {
         kDistant_LightType,
         kPoint_LightType,
@@ -1630,7 +1628,7 @@
 class GrGLLightingEffect : public GrGLSLFragmentProcessor {
 public:
     GrGLLightingEffect() : fLight(nullptr) { }
-    virtual ~GrGLLightingEffect() { delete fLight; }
+    ~GrGLLightingEffect() override { delete fLight; }
 
     void emitCode(EmitArgs&) override;
 
diff --git a/src/effects/SkPerlinNoiseShader.cpp b/src/effects/SkPerlinNoiseShader.cpp
index aa85d1b..1e02ced 100644
--- a/src/effects/SkPerlinNoiseShader.cpp
+++ b/src/effects/SkPerlinNoiseShader.cpp
@@ -497,7 +497,7 @@
                                     std::move(permutationsProxy), std::move(noiseProxy), matrix));
     }
 
-    virtual ~GrPerlinNoiseEffect() { delete fPaintingData; }
+    ~GrPerlinNoiseEffect() override { delete fPaintingData; }
 
     const char* name() const override { return "PerlinNoise"; }
 
diff --git a/src/effects/SkTableColorFilter.cpp b/src/effects/SkTableColorFilter.cpp
index 393543b..f09d5ed 100644
--- a/src/effects/SkTableColorFilter.cpp
+++ b/src/effects/SkTableColorFilter.cpp
@@ -80,7 +80,7 @@
         }
     }
 
-    virtual ~SkTable_ColorFilter() { delete fBitmap; }
+    ~SkTable_ColorFilter() override { delete fBitmap; }
 
     bool asComponentTable(SkBitmap* table) const override;
     sk_sp<SkColorFilter> makeComposed(sk_sp<SkColorFilter> inner) const override;
diff --git a/src/effects/gradients/SkGradientShaderPriv.h b/src/effects/gradients/SkGradientShaderPriv.h
index 7f1f5f8..f64b439 100644
--- a/src/effects/gradients/SkGradientShaderPriv.h
+++ b/src/effects/gradients/SkGradientShaderPriv.h
@@ -119,7 +119,7 @@
     };
 
     SkGradientShaderBase(const Descriptor& desc, const SkMatrix& ptsToUnit);
-    virtual ~SkGradientShaderBase();
+    ~SkGradientShaderBase() override;
 
     // The cache is initialized on-demand when getCache32 is called.
     class GradientShaderCache : public SkRefCnt {
@@ -353,7 +353,7 @@
 
     class GLSLProcessor;
 
-    virtual ~GrGradientEffect();
+    ~GrGradientEffect() override;
 
     bool useAtlas() const { return SkToBool(-1 != fRow); }
     SkScalar getYCoord() const { return fYCoord; }
diff --git a/src/effects/gradients/SkLinearGradient.cpp b/src/effects/gradients/SkLinearGradient.cpp
index 1dbe2e7..b58cb29 100644
--- a/src/effects/gradients/SkLinearGradient.cpp
+++ b/src/effects/gradients/SkLinearGradient.cpp
@@ -421,7 +421,7 @@
         return sk_sp<GrFragmentProcessor>(new GrLinearGradient(args));
     }
 
-    virtual ~GrLinearGradient() { }
+    ~GrLinearGradient() override {}
 
     const char* name() const override { return "Linear Gradient"; }
 
@@ -446,7 +446,7 @@
 public:
     GLSLLinearProcessor(const GrProcessor&) {}
 
-    virtual ~GLSLLinearProcessor() { }
+    ~GLSLLinearProcessor() override {}
 
     virtual void emitCode(EmitArgs&) override;
 
diff --git a/src/effects/gradients/SkRadialGradient.cpp b/src/effects/gradients/SkRadialGradient.cpp
index f282bab..2caf905 100644
--- a/src/effects/gradients/SkRadialGradient.cpp
+++ b/src/effects/gradients/SkRadialGradient.cpp
@@ -249,7 +249,7 @@
         return sk_sp<GrFragmentProcessor>(new GrRadialGradient(args));
     }
 
-    virtual ~GrRadialGradient() { }
+    ~GrRadialGradient() override {}
 
     const char* name() const override { return "Radial Gradient"; }
 
@@ -273,7 +273,7 @@
 class GrRadialGradient::GLSLRadialProcessor : public GrGradientEffect::GLSLProcessor {
 public:
     GLSLRadialProcessor(const GrProcessor&) {}
-    virtual ~GLSLRadialProcessor() { }
+    ~GLSLRadialProcessor() override {}
 
     virtual void emitCode(EmitArgs&) override;
 
diff --git a/src/effects/gradients/SkSweepGradient.cpp b/src/effects/gradients/SkSweepGradient.cpp
index 928de4c..79013b3 100644
--- a/src/effects/gradients/SkSweepGradient.cpp
+++ b/src/effects/gradients/SkSweepGradient.cpp
@@ -131,7 +131,7 @@
     static sk_sp<GrFragmentProcessor> Make(const CreateArgs& args) {
         return sk_sp<GrFragmentProcessor>(new GrSweepGradient(args));
     }
-    virtual ~GrSweepGradient() { }
+    ~GrSweepGradient() override {}
 
     const char* name() const override { return "Sweep Gradient"; }
 
@@ -155,7 +155,7 @@
 class GrSweepGradient::GLSLSweepProcessor : public GrGradientEffect::GLSLProcessor {
 public:
     GLSLSweepProcessor(const GrProcessor&) {}
-    virtual ~GLSLSweepProcessor() { }
+    ~GLSLSweepProcessor() override {}
 
     virtual void emitCode(EmitArgs&) override;
 
diff --git a/src/effects/gradients/SkTwoPointConicalGradient.h b/src/effects/gradients/SkTwoPointConicalGradient.h
index e509f92..d73ba11 100644
--- a/src/effects/gradients/SkTwoPointConicalGradient.h
+++ b/src/effects/gradients/SkTwoPointConicalGradient.h
@@ -47,7 +47,7 @@
     class TwoPointConicalGradientContext : public SkGradientShaderBase::GradientShaderBaseContext {
     public:
         TwoPointConicalGradientContext(const SkTwoPointConicalGradient&, const ContextRec&);
-        ~TwoPointConicalGradientContext() {}
+        ~TwoPointConicalGradientContext() override {}
 
         void shadeSpan(int x, int y, SkPMColor dstC[], int count) override;
 
diff --git a/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp b/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp
index 3bf9c1e..9ac8528 100644
--- a/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp
+++ b/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp
@@ -65,7 +65,7 @@
         return sk_sp<GrFragmentProcessor>(new Edge2PtConicalEffect(args));
     }
 
-    virtual ~Edge2PtConicalEffect() {}
+    ~Edge2PtConicalEffect() override {}
 
     const char* name() const override {
         return "Two-Point Conical Gradient Edge Touching";
@@ -139,7 +139,7 @@
 class Edge2PtConicalEffect::GLSLEdge2PtConicalProcessor : public GrGradientEffect::GLSLProcessor {
 public:
     GLSLEdge2PtConicalProcessor(const GrProcessor&);
-    virtual ~GLSLEdge2PtConicalProcessor() { }
+    ~GLSLEdge2PtConicalProcessor() override {}
 
     virtual void emitCode(EmitArgs&) override;
 
@@ -375,7 +375,7 @@
             new FocalOutside2PtConicalEffect(args, focalX));
     }
 
-    virtual ~FocalOutside2PtConicalEffect() { }
+    ~FocalOutside2PtConicalEffect() override {}
 
     const char* name() const override {
         return "Two-Point Conical Gradient Focal Outside";
@@ -420,7 +420,7 @@
     : public GrGradientEffect::GLSLProcessor {
 public:
     GLSLFocalOutside2PtConicalProcessor(const GrProcessor&);
-    virtual ~GLSLFocalOutside2PtConicalProcessor() { }
+    ~GLSLFocalOutside2PtConicalProcessor() override {}
 
     virtual void emitCode(EmitArgs&) override;
 
@@ -589,7 +589,7 @@
             new FocalInside2PtConicalEffect(args, focalX));
     }
 
-    virtual ~FocalInside2PtConicalEffect() {}
+    ~FocalInside2PtConicalEffect() override {}
 
     const char* name() const override {
         return "Two-Point Conical Gradient Focal Inside";
@@ -626,7 +626,7 @@
     : public GrGradientEffect::GLSLProcessor {
 public:
     GLSLFocalInside2PtConicalProcessor(const GrProcessor&);
-    virtual ~GLSLFocalInside2PtConicalProcessor() {}
+    ~GLSLFocalInside2PtConicalProcessor() override {}
 
     virtual void emitCode(EmitArgs&) override;
 
@@ -828,7 +828,7 @@
             new CircleInside2PtConicalEffect(args, info));
     }
 
-    virtual ~CircleInside2PtConicalEffect() {}
+    ~CircleInside2PtConicalEffect() override {}
 
     const char* name() const override { return "Two-Point Conical Gradient Inside"; }
 
@@ -869,7 +869,7 @@
     : public GrGradientEffect::GLSLProcessor {
 public:
     GLSLCircleInside2PtConicalProcessor(const GrProcessor&);
-    virtual ~GLSLCircleInside2PtConicalProcessor() {}
+    ~GLSLCircleInside2PtConicalProcessor() override {}
 
     virtual void emitCode(EmitArgs&) override;
 
@@ -1044,7 +1044,7 @@
             new CircleOutside2PtConicalEffect(args, info));
     }
 
-    virtual ~CircleOutside2PtConicalEffect() {}
+    ~CircleOutside2PtConicalEffect() override {}
 
     const char* name() const override { return "Two-Point Conical Gradient Outside"; }
 
@@ -1100,7 +1100,7 @@
     : public GrGradientEffect::GLSLProcessor {
 public:
     GLSLCircleOutside2PtConicalProcessor(const GrProcessor&);
-    virtual ~GLSLCircleOutside2PtConicalProcessor() {}
+    ~GLSLCircleOutside2PtConicalProcessor() override {}
 
     virtual void emitCode(EmitArgs&) override;
 
diff --git a/src/gpu/GrRectanizer_pow2.h b/src/gpu/GrRectanizer_pow2.h
index 424d22e..b8cc0a1 100644
--- a/src/gpu/GrRectanizer_pow2.h
+++ b/src/gpu/GrRectanizer_pow2.h
@@ -24,7 +24,7 @@
         this->reset();
     }
 
-    virtual ~GrRectanizerPow2() { }
+    ~GrRectanizerPow2() override {}
 
     void reset() override {
         fNextStripY = 0;
diff --git a/src/gpu/effects/GrBezierEffect.h b/src/gpu/effects/GrBezierEffect.h
index f908551..3a130ec 100644
--- a/src/gpu/effects/GrBezierEffect.h
+++ b/src/gpu/effects/GrBezierEffect.h
@@ -89,7 +89,7 @@
         }
     }
 
-    virtual ~GrConicEffect();
+    ~GrConicEffect() override;
 
     const char* name() const override { return "Conic"; }
 
@@ -171,7 +171,7 @@
         }
     }
 
-    virtual ~GrQuadEffect();
+    ~GrQuadEffect() override;
 
     const char* name() const override { return "Quad"; }
 
@@ -248,7 +248,7 @@
         }
     }
 
-    virtual ~GrCubicEffect();
+    ~GrCubicEffect() override;
 
     const char* name() const override { return "Cubic"; }
 
diff --git a/src/gpu/effects/GrBicubicEffect.h b/src/gpu/effects/GrBicubicEffect.h
index ed22ba1..e24422f 100644
--- a/src/gpu/effects/GrBicubicEffect.h
+++ b/src/gpu/effects/GrBicubicEffect.h
@@ -20,7 +20,7 @@
         kFilterTexelPad = 2, // Given a src rect in texels to be filtered, this number of
                              // surrounding texels are needed by the kernel in x and y.
     };
-    virtual ~GrBicubicEffect();
+    ~GrBicubicEffect() override;
 
     const char* name() const override { return "Bicubic"; }
 
diff --git a/src/gpu/effects/GrBitmapTextGeoProc.h b/src/gpu/effects/GrBitmapTextGeoProc.h
index 2221e8a..aa9afc2 100644
--- a/src/gpu/effects/GrBitmapTextGeoProc.h
+++ b/src/gpu/effects/GrBitmapTextGeoProc.h
@@ -30,7 +30,7 @@
                                     localMatrix, usesLocalCoords));
     }
 
-    virtual ~GrBitmapTextGeoProc() {}
+    ~GrBitmapTextGeoProc() override {}
 
     const char* name() const override { return "Texture"; }
 
diff --git a/src/gpu/effects/GrConvexPolyEffect.h b/src/gpu/effects/GrConvexPolyEffect.h
index 89a8124..34f8b22 100644
--- a/src/gpu/effects/GrConvexPolyEffect.h
+++ b/src/gpu/effects/GrConvexPolyEffect.h
@@ -57,7 +57,7 @@
      */
     static sk_sp<GrFragmentProcessor> Make(GrPrimitiveEdgeType, const SkRect&);
 
-    virtual ~GrConvexPolyEffect();
+    ~GrConvexPolyEffect() override;
 
     const char* name() const override { return "ConvexPoly"; }
 
diff --git a/src/gpu/effects/GrDistanceFieldGeoProc.h b/src/gpu/effects/GrDistanceFieldGeoProc.h
index cf5d5f9..1384d2f 100644
--- a/src/gpu/effects/GrDistanceFieldGeoProc.h
+++ b/src/gpu/effects/GrDistanceFieldGeoProc.h
@@ -70,7 +70,7 @@
     }
 #endif
 
-    virtual ~GrDistanceFieldA8TextGeoProc() {}
+    ~GrDistanceFieldA8TextGeoProc() override {}
 
     const char* name() const override { return "DistanceFieldA8Text"; }
 
diff --git a/src/gpu/effects/GrDitherEffect.cpp b/src/gpu/effects/GrDitherEffect.cpp
index adae12c..864a5d2 100644
--- a/src/gpu/effects/GrDitherEffect.cpp
+++ b/src/gpu/effects/GrDitherEffect.cpp
@@ -20,7 +20,7 @@
         return sk_sp<GrFragmentProcessor>(new DitherEffect);
     }
 
-    virtual ~DitherEffect() {}
+    ~DitherEffect() override {}
 
     const char* name() const override { return "Dither"; }
 
diff --git a/src/gpu/effects/GrOvalEffect.cpp b/src/gpu/effects/GrOvalEffect.cpp
index 62b1c52..a8b0c84 100644
--- a/src/gpu/effects/GrOvalEffect.cpp
+++ b/src/gpu/effects/GrOvalEffect.cpp
@@ -23,7 +23,7 @@
     static sk_sp<GrFragmentProcessor> Make(GrPrimitiveEdgeType, const SkPoint& center,
                                            SkScalar radius);
 
-    virtual ~CircleEffect() {}
+    ~CircleEffect() override {}
 
     const char* name() const override { return "Circle"; }
 
@@ -185,7 +185,7 @@
     static sk_sp<GrFragmentProcessor> Make(GrPrimitiveEdgeType, const SkPoint& center,
                                            SkScalar rx, SkScalar ry);
 
-    virtual ~EllipseEffect() {}
+    ~EllipseEffect() override {}
 
     const char* name() const override { return "Ellipse"; }
 
diff --git a/src/gpu/effects/GrPorterDuffXferProcessor.cpp b/src/gpu/effects/GrPorterDuffXferProcessor.cpp
index f984355..3dc5325 100644
--- a/src/gpu/effects/GrPorterDuffXferProcessor.cpp
+++ b/src/gpu/effects/GrPorterDuffXferProcessor.cpp
@@ -589,7 +589,7 @@
 public:
     GLPDLCDXferProcessor(const GrProcessor&) : fLastAlpha(SK_MaxU32) {}
 
-    virtual ~GLPDLCDXferProcessor() {}
+    ~GLPDLCDXferProcessor() override {}
 
     static void GenKey(const GrProcessor& processor, const GrShaderCaps& caps,
                        GrProcessorKeyBuilder* b) {}
diff --git a/src/gpu/effects/GrRRectEffect.cpp b/src/gpu/effects/GrRRectEffect.cpp
index 7253de8..1b4772d 100644
--- a/src/gpu/effects/GrRRectEffect.cpp
+++ b/src/gpu/effects/GrRRectEffect.cpp
@@ -48,7 +48,7 @@
     static sk_sp<GrFragmentProcessor> Make(GrPrimitiveEdgeType, uint32_t circularCornerFlags,
                                            const SkRRect&);
 
-    virtual ~CircularRRectEffect() {}
+    ~CircularRRectEffect() override {}
 
     const char* name() const override { return "CircularRRect"; }
 
@@ -387,7 +387,7 @@
 public:
     static sk_sp<GrFragmentProcessor> Make(GrPrimitiveEdgeType, const SkRRect&);
 
-    virtual ~EllipticalRRectEffect() {}
+    ~EllipticalRRectEffect() override {}
 
     const char* name() const override { return "EllipticalRRect"; }
 
diff --git a/src/gpu/effects/GrSimpleTextureEffect.h b/src/gpu/effects/GrSimpleTextureEffect.h
index 69b8749..b3030bf 100644
--- a/src/gpu/effects/GrSimpleTextureEffect.h
+++ b/src/gpu/effects/GrSimpleTextureEffect.h
@@ -80,7 +80,7 @@
                                                                     matrix, p));
     }
 
-    virtual ~GrSimpleTextureEffect() {}
+    ~GrSimpleTextureEffect() override {}
 
     const char* name() const override { return "SimpleTexture"; }
 
diff --git a/src/gpu/gl/GrGLBuffer.h b/src/gpu/gl/GrGLBuffer.h
index 6a90d03..3400819 100644
--- a/src/gpu/gl/GrGLBuffer.h
+++ b/src/gpu/gl/GrGLBuffer.h
@@ -19,7 +19,7 @@
     static GrGLBuffer* Create(GrGLGpu*, size_t size, GrBufferType intendedType, GrAccessPattern,
                               const void* data = nullptr);
 
-    ~GrGLBuffer() {
+    ~GrGLBuffer() override {
         // either release or abandon should have been called by the owner of this object.
         SkASSERT(0 == fBufferID);
     }
diff --git a/src/gpu/gl/GrGLGpuCommandBuffer.h b/src/gpu/gl/GrGLGpuCommandBuffer.h
index 519272f..73deba3 100644
--- a/src/gpu/gl/GrGLGpuCommandBuffer.h
+++ b/src/gpu/gl/GrGLGpuCommandBuffer.h
@@ -24,7 +24,7 @@
 public:
     GrGLGpuCommandBuffer(GrGLGpu* gpu) : fGpu(gpu), fRenderTarget(nullptr) {}
 
-    virtual ~GrGLGpuCommandBuffer() {}
+    ~GrGLGpuCommandBuffer() override {}
 
     void end() override {}
 
diff --git a/src/gpu/gl/GrGLPathRendering.h b/src/gpu/gl/GrGLPathRendering.h
index d7a7dbf..8c3cd47 100644
--- a/src/gpu/gl/GrGLPathRendering.h
+++ b/src/gpu/gl/GrGLPathRendering.h
@@ -31,7 +31,7 @@
      * Create a new GrGLPathRendering object from a given GrGLGpu.
      */
     GrGLPathRendering(GrGLGpu* gpu);
-    virtual ~GrGLPathRendering();
+    ~GrGLPathRendering() override;
 
     // GrPathRendering implementations.
     GrPath* createPath(const SkPath&, const GrStyle&) override;
diff --git a/src/gpu/ops/GrAAConvexPathRenderer.cpp b/src/gpu/ops/GrAAConvexPathRenderer.cpp
index ba2b00e..e316fec 100644
--- a/src/gpu/ops/GrAAConvexPathRenderer.cpp
+++ b/src/gpu/ops/GrAAConvexPathRenderer.cpp
@@ -530,7 +530,7 @@
         return sk_sp<GrGeometryProcessor>(new QuadEdgeEffect(color, localMatrix, usesLocalCoords));
     }
 
-    virtual ~QuadEdgeEffect() {}
+    ~QuadEdgeEffect() override {}
 
     const char* name() const override { return "QuadEdge"; }
 
diff --git a/src/gpu/ops/GrAnalyticRectOp.cpp b/src/gpu/ops/GrAnalyticRectOp.cpp
index 5dbfd5e..45e20f0 100644
--- a/src/gpu/ops/GrAnalyticRectOp.cpp
+++ b/src/gpu/ops/GrAnalyticRectOp.cpp
@@ -69,7 +69,7 @@
 
     const SkMatrix& localMatrix() const { return fLocalMatrix; }
 
-    virtual ~RectGeometryProcessor() {}
+    ~RectGeometryProcessor() override {}
 
     const char* name() const override { return "RectEdge"; }
 
diff --git a/src/gpu/ops/GrMSAAPathRenderer.cpp b/src/gpu/ops/GrMSAAPathRenderer.cpp
index 04b0b14..ccbd0e2 100644
--- a/src/gpu/ops/GrMSAAPathRenderer.cpp
+++ b/src/gpu/ops/GrMSAAPathRenderer.cpp
@@ -116,7 +116,7 @@
         return new MSAAQuadProcessor(viewMatrix);
     }
 
-    virtual ~MSAAQuadProcessor() {}
+    ~MSAAQuadProcessor() override {}
 
     const char* name() const override { return "MSAAQuadProcessor"; }
 
diff --git a/src/gpu/ops/GrOvalOpFactory.cpp b/src/gpu/ops/GrOvalOpFactory.cpp
index 8ab33f5..dbab985 100644
--- a/src/gpu/ops/GrOvalOpFactory.cpp
+++ b/src/gpu/ops/GrOvalOpFactory.cpp
@@ -103,7 +103,7 @@
 
     bool implementsDistanceVector() const override { return !fInClipPlane; }
 
-    virtual ~CircleGeometryProcessor() {}
+    ~CircleGeometryProcessor() override {}
 
     const char* name() const override { return "CircleEdge"; }
 
@@ -274,7 +274,7 @@
         fStroke = stroke;
     }
 
-    virtual ~EllipseGeometryProcessor() {}
+    ~EllipseGeometryProcessor() override {}
 
     const char* name() const override { return "EllipseEdge"; }
 
@@ -416,7 +416,7 @@
         fStyle = style;
     }
 
-    virtual ~DIEllipseGeometryProcessor() {}
+    ~DIEllipseGeometryProcessor() override {}
 
     const char* name() const override { return "DIEllipseEdge"; }
 
diff --git a/src/gpu/ops/GrSmallPathRenderer.h b/src/gpu/ops/GrSmallPathRenderer.h
index ba752d0..d43da83 100644
--- a/src/gpu/ops/GrSmallPathRenderer.h
+++ b/src/gpu/ops/GrSmallPathRenderer.h
@@ -21,7 +21,7 @@
 class GrSmallPathRenderer : public GrPathRenderer {
 public:
     GrSmallPathRenderer();
-    virtual ~GrSmallPathRenderer();
+    ~GrSmallPathRenderer() override;
 
 private:
     StencilSupport onGetStencilSupport(const GrShape&) const override {
diff --git a/src/gpu/vk/GrVkGpuCommandBuffer.h b/src/gpu/vk/GrVkGpuCommandBuffer.h
index d3eece3..93370fe 100644
--- a/src/gpu/vk/GrVkGpuCommandBuffer.h
+++ b/src/gpu/vk/GrVkGpuCommandBuffer.h
@@ -27,7 +27,7 @@
                          const LoadAndStoreInfo& colorInfo,
                          const LoadAndStoreInfo& stencilInfo);
 
-    virtual ~GrVkGpuCommandBuffer();
+    ~GrVkGpuCommandBuffer() override;
 
     void end() override;
 
diff --git a/src/image/SkImage_Raster.cpp b/src/image/SkImage_Raster.cpp
index 6f3a54d..1428589 100644
--- a/src/image/SkImage_Raster.cpp
+++ b/src/image/SkImage_Raster.cpp
@@ -74,7 +74,7 @@
     }
 
     SkImage_Raster(const SkImageInfo&, sk_sp<SkData>, size_t rb, SkColorTable*);
-    virtual ~SkImage_Raster();
+    ~SkImage_Raster() override;
 
     SkImageInfo onImageInfo() const override {
         return fBitmap.info();
diff --git a/src/image/SkSurface_Gpu.h b/src/image/SkSurface_Gpu.h
index 5b92eeb..cc8b87d 100644
--- a/src/image/SkSurface_Gpu.h
+++ b/src/image/SkSurface_Gpu.h
@@ -17,7 +17,7 @@
 class SkSurface_Gpu : public SkSurface_Base {
 public:
     SkSurface_Gpu(sk_sp<SkGpuDevice>);
-    virtual ~SkSurface_Gpu();
+    ~SkSurface_Gpu() override;
 
     GrBackendObject onGetTextureHandle(BackendHandleAccess) override;
     bool onGetRenderTargetHandle(GrBackendObject*, BackendHandleAccess) override;
diff --git a/src/lazy/SkDiscardableMemoryPool.cpp b/src/lazy/SkDiscardableMemoryPool.cpp
index fece7f0..2cb1b3f 100644
--- a/src/lazy/SkDiscardableMemoryPool.cpp
+++ b/src/lazy/SkDiscardableMemoryPool.cpp
@@ -31,7 +31,7 @@
      *  Without mutex, will be not be thread safe.
      */
     DiscardableMemoryPool(size_t budget, SkBaseMutex* mutex = nullptr);
-    virtual ~DiscardableMemoryPool();
+    ~DiscardableMemoryPool() override;
 
     SkDiscardableMemory* create(size_t bytes) override;
 
@@ -80,7 +80,7 @@
 public:
     PoolDiscardableMemory(DiscardableMemoryPool* pool,
                             void* pointer, size_t bytes);
-    virtual ~PoolDiscardableMemory();
+    ~PoolDiscardableMemory() override;
     bool lock() override;
     void* data() override;
     void unlock() override;
diff --git a/src/pdf/SkDeflate.h b/src/pdf/SkDeflate.h
index 387de40..be76a1d 100644
--- a/src/pdf/SkDeflate.h
+++ b/src/pdf/SkDeflate.h
@@ -35,7 +35,7 @@
                      bool gzip = false);
 
     /** The destructor calls finalize(). */
-    ~SkDeflateWStream();
+    ~SkDeflateWStream() override;
 
     /** Write the end of the compressed stream.  All subsequent calls to
         write() will fail. Subsequent calls to finalize() do nothing. */
diff --git a/src/pdf/SkPDFCanvas.h b/src/pdf/SkPDFCanvas.h
index 7c4d26f..93c055a 100644
--- a/src/pdf/SkPDFCanvas.h
+++ b/src/pdf/SkPDFCanvas.h
@@ -14,7 +14,7 @@
 class SkPDFCanvas : public SkCanvas {
 public:
     SkPDFCanvas(const sk_sp<SkPDFDevice>&);
-    ~SkPDFCanvas();
+    ~SkPDFCanvas() override;
 
 protected:
     void onClipRect(const SkRect&, SkClipOp, ClipEdgeStyle) override;
diff --git a/src/pdf/SkPDFDevice.h b/src/pdf/SkPDFDevice.h
index 303d450..93eb78d 100644
--- a/src/pdf/SkPDFDevice.h
+++ b/src/pdf/SkPDFDevice.h
@@ -72,7 +72,7 @@
         return new SkPDFDevice(pageSize, rasterDpi, doc, false);
     }
 
-    virtual ~SkPDFDevice();
+    ~SkPDFDevice() override;
 
     /** These are called inside the per-device-layer loop for each draw call.
      When these are called, we have already applied any saveLayer operations,
diff --git a/src/pdf/SkPDFDocument.h b/src/pdf/SkPDFDocument.h
index 15e1479..aa6dcb2 100644
--- a/src/pdf/SkPDFDocument.h
+++ b/src/pdf/SkPDFDocument.h
@@ -50,7 +50,7 @@
                   const SkDocument::PDFMetadata&,
                   sk_sp<SkPixelSerializer>,
                   bool);
-    virtual ~SkPDFDocument();
+    ~SkPDFDocument() override;
     SkCanvas* onBeginPage(SkScalar, SkScalar, const SkRect&) override;
     void onEndPage() override;
     void onClose(SkWStream*) override;
diff --git a/src/pdf/SkPDFFont.cpp b/src/pdf/SkPDFFont.cpp
index 41b0d4d..09d133e 100644
--- a/src/pdf/SkPDFFont.cpp
+++ b/src/pdf/SkPDFFont.cpp
@@ -51,7 +51,7 @@
 
 struct SkPDFType0Font final : public SkPDFFont {
     SkPDFType0Font(SkPDFFont::Info, const SkAdvancedTypefaceMetrics&);
-    virtual ~SkPDFType0Font();
+    ~SkPDFType0Font() override;
     void getFontSubset(SkPDFCanon*) override;
 #ifdef SK_DEBUG
     void emitObject(SkWStream*, const SkPDFObjNumMap&) const override;
@@ -62,13 +62,13 @@
 
 struct SkPDFType1Font final : public SkPDFFont {
     SkPDFType1Font(SkPDFFont::Info, const SkAdvancedTypefaceMetrics&, SkPDFCanon*);
-    virtual ~SkPDFType1Font() {}
+    ~SkPDFType1Font() override {}
     void getFontSubset(SkPDFCanon*) override {} // TODO(halcanary): implement
 };
 
 struct SkPDFType3Font final : public SkPDFFont {
     SkPDFType3Font(SkPDFFont::Info, const SkAdvancedTypefaceMetrics&);
-    virtual ~SkPDFType3Font() {}
+    ~SkPDFType3Font() override {}
     void getFontSubset(SkPDFCanon*) override;
 };
 
diff --git a/src/pdf/SkPDFFont.h b/src/pdf/SkPDFFont.h
index 3858b64..67786f3 100644
--- a/src/pdf/SkPDFFont.h
+++ b/src/pdf/SkPDFFont.h
@@ -29,7 +29,7 @@
 class SkPDFFont : public SkPDFDict {
 
 public:
-    virtual ~SkPDFFont();
+    ~SkPDFFont() override;
 
     /** Returns the typeface represented by this class. Returns nullptr for the
      *  default typeface.
diff --git a/src/pdf/SkPDFTypes.h b/src/pdf/SkPDFTypes.h
index 201d62b..0be20f1 100644
--- a/src/pdf/SkPDFTypes.h
+++ b/src/pdf/SkPDFTypes.h
@@ -187,7 +187,7 @@
     /** Create a PDF array. Maximum length is 8191.
      */
     SkPDFArray();
-    virtual ~SkPDFArray();
+    ~SkPDFArray() override;
 
     // The SkPDFObject interface.
     void emitObject(SkWStream* stream,
@@ -235,7 +235,7 @@
      */
     explicit SkPDFDict(const char type[] = nullptr);
 
-    virtual ~SkPDFDict();
+    ~SkPDFDict() override;
 
     // The SkPDFObject interface.
     void emitObject(SkWStream* stream,
@@ -298,7 +298,7 @@
 class SkPDFSharedStream final : public SkPDFObject {
 public:
     SkPDFSharedStream(std::unique_ptr<SkStreamAsset> data);
-    ~SkPDFSharedStream();
+    ~SkPDFSharedStream() override;
     SkPDFDict* dict() { return &fDict; }
     void emitObject(SkWStream*,
                     const SkPDFObjNumMap&) const override;
@@ -327,7 +327,7 @@
      *  @param stream The data part of the stream. */
     explicit SkPDFStream(sk_sp<SkData> data);
     explicit SkPDFStream(std::unique_ptr<SkStreamAsset> stream);
-    virtual ~SkPDFStream();
+    ~SkPDFStream() override;
 
     SkPDFDict* dict() { return &fDict; }
 
diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp
index 9e3a7d3..5489996 100644
--- a/src/ports/SkFontHost_FreeType.cpp
+++ b/src/ports/SkFontHost_FreeType.cpp
@@ -450,7 +450,7 @@
     SkScalerContext_FreeType(sk_sp<SkTypeface>,
                              const SkScalerContextEffects&,
                              const SkDescriptor* desc);
-    virtual ~SkScalerContext_FreeType();
+    ~SkScalerContext_FreeType() override;
 
     bool success() const {
         return fFTSize != nullptr && fFace != nullptr;
diff --git a/src/ports/SkFontMgr_fontconfig.cpp b/src/ports/SkFontMgr_fontconfig.cpp
index 85230b3..bceb4de 100644
--- a/src/ports/SkFontMgr_fontconfig.cpp
+++ b/src/ports/SkFontMgr_fontconfig.cpp
@@ -503,7 +503,7 @@
         return info;
     }
 
-    virtual ~SkTypeface_fontconfig() {
+    ~SkTypeface_fontconfig() override {
         // Hold the lock while unrefing the pattern.
         FCLocker lock;
         fPattern.reset();
@@ -534,7 +534,7 @@
             : fFontMgr(SkRef(parent)), fFontSet(fontSet)
         { }
 
-        virtual ~StyleSet() {
+        ~StyleSet() override {
             // Hold the lock while unrefing the font set.
             FCLocker lock;
             fFontSet.reset();
@@ -667,7 +667,7 @@
         : fFC(config ? config : FcInitLoadConfigAndFonts())
         , fFamilyNames(GetFamilyNames(fFC)) { }
 
-    virtual ~SkFontMgr_fontconfig() {
+    ~SkFontMgr_fontconfig() override {
         // Hold the lock while unrefing the config.
         FCLocker lock;
         fFC.reset();
diff --git a/src/sksl/SkSLCompiler.h b/src/sksl/SkSLCompiler.h
index 497d06d..ec02c5a 100644
--- a/src/sksl/SkSLCompiler.h
+++ b/src/sksl/SkSLCompiler.h
@@ -40,7 +40,7 @@
 public:
     Compiler();
 
-    ~Compiler();
+    ~Compiler() override;
 
     std::unique_ptr<Program> convertProgram(Program::Kind kind, SkString text,
                                             const Program::Settings& settings);
diff --git a/src/svg/SkSVGDevice.h b/src/svg/SkSVGDevice.h
index 092ef28..e05dc92 100644
--- a/src/svg/SkSVGDevice.h
+++ b/src/svg/SkSVGDevice.h
@@ -52,7 +52,7 @@
 
 private:
     SkSVGDevice(const SkISize& size, SkXMLWriter* writer);
-    virtual ~SkSVGDevice();
+    ~SkSVGDevice() override;
 
     struct MxCp;
     void drawBitmapCommon(const MxCp&, const SkBitmap& bm, const SkPaint& paint);
diff --git a/src/utils/SkCanvasStack.h b/src/utils/SkCanvasStack.h
index cdeeb84..22cfc3e 100644
--- a/src/utils/SkCanvasStack.h
+++ b/src/utils/SkCanvasStack.h
@@ -21,7 +21,7 @@
 class SkCanvasStack : public SkNWayCanvas {
 public:
     SkCanvasStack(int width, int height);
-    virtual ~SkCanvasStack();
+    ~SkCanvasStack() override;
 
     void pushCanvas(std::unique_ptr<SkCanvas>, const SkIPoint& origin);
     void removeAll() override;
diff --git a/src/utils/SkMultiPictureDocument.cpp b/src/utils/SkMultiPictureDocument.cpp
index 217e7a3..d987818 100644
--- a/src/utils/SkMultiPictureDocument.cpp
+++ b/src/utils/SkMultiPictureDocument.cpp
@@ -46,7 +46,7 @@
     SkTArray<SkSize> fSizes;
     MultiPictureDocument(SkWStream* s, void (*d)(SkWStream*, bool))
         : SkDocument(s, d) {}
-    ~MultiPictureDocument() { this->close(); }
+    ~MultiPictureDocument() override { this->close(); }
 
     SkCanvas* onBeginPage(SkScalar w, SkScalar h, const SkRect& c) override {
         fCurrentPageSize.set(w, h);
diff --git a/src/xml/SkXMLWriter.h b/src/xml/SkXMLWriter.h
index b1d513c..c500e16 100644
--- a/src/xml/SkXMLWriter.h
+++ b/src/xml/SkXMLWriter.h
@@ -64,7 +64,7 @@
 class SkXMLStreamWriter : public SkXMLWriter {
 public:
     SkXMLStreamWriter(SkWStream*);
-    virtual ~SkXMLStreamWriter();
+    ~SkXMLStreamWriter() override;
     void writeHeader() override;
 
 protected:
@@ -80,7 +80,7 @@
 class SkXMLParserWriter : public SkXMLWriter {
 public:
     SkXMLParserWriter(SkXMLParser*);
-    virtual ~SkXMLParserWriter();
+    ~SkXMLParserWriter() override;
 protected:
     void onStartElementLen(const char elem[], size_t length) override;
     void onEndElement() override;
diff --git a/tests/CachedDecodingPixelRefTest.cpp b/tests/CachedDecodingPixelRefTest.cpp
index d9a9e9e..c423441 100644
--- a/tests/CachedDecodingPixelRefTest.cpp
+++ b/tests/CachedDecodingPixelRefTest.cpp
@@ -37,7 +37,7 @@
     : INHERITED(GetMyInfo(colorType)), fType(type), fReporter(reporter) {
         SkASSERT((fType <= kLast_TestType) && (fType >= 0));
     }
-    virtual ~TestImageGenerator() { }
+    ~TestImageGenerator() override {}
 
 protected:
     static SkImageInfo GetMyInfo(SkColorType colorType) {
diff --git a/tests/LayerRasterizerTest.cpp b/tests/LayerRasterizerTest.cpp
index dcbfdd1..310aa3b 100644
--- a/tests/LayerRasterizerTest.cpp
+++ b/tests/LayerRasterizerTest.cpp
@@ -26,7 +26,7 @@
         gCount++;
     }
 
-    ~DummyRasterizer() {
+    ~DummyRasterizer() override {
         // Not threadsafe. Only used in one thread.
         gCount--;
     }
diff --git a/tests/PathTest.cpp b/tests/PathTest.cpp
index 0949a5d..d41ed47 100644
--- a/tests/PathTest.cpp
+++ b/tests/PathTest.cpp
@@ -4315,7 +4315,7 @@
 class ChangeListener : public SkPathRef::GenIDChangeListener {
 public:
     ChangeListener(bool *changed) : fChanged(changed) { *fChanged = false; }
-    virtual ~ChangeListener() {}
+    ~ChangeListener() override {}
     void onChange() override {
         *fChanged = true;
     }
diff --git a/tests/PictureBBHTest.cpp b/tests/PictureBBHTest.cpp
index b8698bc..69cb443 100644
--- a/tests/PictureBBHTest.cpp
+++ b/tests/PictureBBHTest.cpp
@@ -59,10 +59,10 @@
 class DrawEmptyPictureBBHTest : public PictureBBHTestBase {
 public:
     DrawEmptyPictureBBHTest()
-        : PictureBBHTestBase(2, 2, 1, 1) { }
-    virtual ~DrawEmptyPictureBBHTest() { }
+        : PictureBBHTestBase(2, 2, 1, 1) {}
+    ~DrawEmptyPictureBBHTest() override {}
 
-    void doTest(SkCanvas&, SkCanvas&) override { }
+    void doTest(SkCanvas&, SkCanvas&) override {}
 };
 
 // Test to verify the playback of a picture into a canvas that has
@@ -71,7 +71,7 @@
 class EmptyClipPictureBBHTest : public PictureBBHTestBase {
 public:
     EmptyClipPictureBBHTest()
-        : PictureBBHTestBase(2, 2, 3, 3) { }
+        : PictureBBHTestBase(2, 2, 3, 3) {}
 
     void doTest(SkCanvas& playbackCanvas, SkCanvas& recordingCanvas) override {
         // intersect with out of bounds rect -> empty clip.
@@ -80,7 +80,7 @@
         recordingCanvas.drawRect(SkRect::MakeWH(3, 3), paint);
     }
 
-    virtual ~EmptyClipPictureBBHTest() { }
+    ~EmptyClipPictureBBHTest() override {}
 };
 
 DEF_TEST(PictureBBH, reporter) {
diff --git a/tests/QuickRejectTest.cpp b/tests/QuickRejectTest.cpp
index 6f472dc..cf886d3 100644
--- a/tests/QuickRejectTest.cpp
+++ b/tests/QuickRejectTest.cpp
@@ -34,7 +34,7 @@
     class TestDrawLooperContext : public SkDrawLooper::Context {
     public:
         TestDrawLooperContext() : fOnce(true) {}
-        virtual ~TestDrawLooperContext() {}
+        ~TestDrawLooperContext() override {}
 
         bool next(SkCanvas* canvas, SkPaint*) override {
             if (fOnce) {
diff --git a/tests/ResourceCacheTest.cpp b/tests/ResourceCacheTest.cpp
index 8051191..9573161 100644
--- a/tests/ResourceCacheTest.cpp
+++ b/tests/ResourceCacheTest.cpp
@@ -295,7 +295,7 @@
         return new TestResource(gpu, size);
     }
 
-    ~TestResource() {
+    ~TestResource() override {
         --fNumAlive;
         SkSafeUnref(fToDelete);
     }
diff --git a/tools/debugger/SkDebugCanvas.h b/tools/debugger/SkDebugCanvas.h
index 0f2ae51..7c6a0f4 100644
--- a/tools/debugger/SkDebugCanvas.h
+++ b/tools/debugger/SkDebugCanvas.h
@@ -26,7 +26,7 @@
 public:
     SkDebugCanvas(int width, int height);
 
-    virtual ~SkDebugCanvas();
+    ~SkDebugCanvas() override;
 
     void toggleFilter(bool toggle) { fFilter = toggle; }
 
diff --git a/tools/debugger/SkDrawCommand.h b/tools/debugger/SkDrawCommand.h
index e23eed1..4004b3b 100644
--- a/tools/debugger/SkDrawCommand.h
+++ b/tools/debugger/SkDrawCommand.h
@@ -533,7 +533,7 @@
 public:
     SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
                         const SkPaint& paint);
-    virtual ~SkDrawPointsCommand() { delete [] fPts; }
+    ~SkDrawPointsCommand() override { delete [] fPts; }
     void execute(SkCanvas* canvas) const override;
     bool render(SkCanvas* canvas) const override;
     Json::Value toJSON(UrlDataManager& urlDataManager) const override;
@@ -552,7 +552,7 @@
 public:
     SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
                       const SkPaint& paint);
-    virtual ~SkDrawTextCommand() { delete [] fText; }
+    ~SkDrawTextCommand() override { delete [] fText; }
     void execute(SkCanvas* canvas) const override;
     Json::Value toJSON(UrlDataManager& urlDataManager) const override;
     static SkDrawTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
@@ -571,7 +571,7 @@
 public:
     SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
                          const SkPaint& paint);
-    virtual ~SkDrawPosTextCommand() { delete [] fPos; delete [] fText; }
+    ~SkDrawPosTextCommand() override { delete [] fPos; delete [] fText; }
     void execute(SkCanvas* canvas) const override;
     Json::Value toJSON(UrlDataManager& urlDataManager) const override;
     static SkDrawPosTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
@@ -589,7 +589,7 @@
 public:
     SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path,
                             const SkMatrix* matrix, const SkPaint& paint);
-    virtual ~SkDrawTextOnPathCommand() { delete [] fText; }
+    ~SkDrawTextOnPathCommand() override { delete [] fText; }
     void execute(SkCanvas* canvas) const override;
     Json::Value toJSON(UrlDataManager& urlDataManager) const override;
     static SkDrawTextOnPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
@@ -628,7 +628,7 @@
 public:
     SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
                           SkScalar constY, const SkPaint& paint);
-    virtual ~SkDrawPosTextHCommand() { delete [] fXpos; delete [] fText; }
+    ~SkDrawPosTextHCommand() override { delete [] fXpos; delete [] fText; }
     void execute(SkCanvas* canvas) const override;
     Json::Value toJSON(UrlDataManager& urlDataManager) const override;
     static SkDrawPosTextHCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
@@ -759,7 +759,7 @@
 class SkSaveLayerCommand : public SkDrawCommand {
 public:
     SkSaveLayerCommand(const SkCanvas::SaveLayerRec&);
-    virtual ~SkSaveLayerCommand();
+    ~SkSaveLayerCommand() override;
     void execute(SkCanvas* canvas) const override;
     Json::Value toJSON(UrlDataManager& urlDataManager) const override;
     static SkSaveLayerCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
diff --git a/tools/gpu/gl/GLTestContext.h b/tools/gpu/gl/GLTestContext.h
index 09dce05..9bd1039 100644
--- a/tools/gpu/gl/GLTestContext.h
+++ b/tools/gpu/gl/GLTestContext.h
@@ -18,7 +18,7 @@
  */
 class GLTestContext : public TestContext {
 public:
-    virtual ~GLTestContext();
+    ~GLTestContext() override;
 
     virtual GrBackend backend() override { return kOpenGL_GrBackend; }
     virtual GrBackendContext backendContext() override {
diff --git a/tools/gpu/gl/debug/GrBufferObj.h b/tools/gpu/gl/debug/GrBufferObj.h
index c91606d..d0217b2 100644
--- a/tools/gpu/gl/debug/GrBufferObj.h
+++ b/tools/gpu/gl/debug/GrBufferObj.h
@@ -25,7 +25,7 @@
         , fSize(0)
         , fUsage(GR_GL_STATIC_DRAW) {
     }
-    virtual ~GrBufferObj() {
+    ~GrBufferObj() override {
         delete[] fDataPtr;
     }
 
diff --git a/tools/gpu/gl/debug/GrFrameBufferObj.h b/tools/gpu/gl/debug/GrFrameBufferObj.h
index 3bd642f..9003127 100644
--- a/tools/gpu/gl/debug/GrFrameBufferObj.h
+++ b/tools/gpu/gl/debug/GrFrameBufferObj.h
@@ -27,7 +27,7 @@
         , fStencilBuffer(nullptr) {
     }
 
-    virtual ~GrFrameBufferObj() {
+    ~GrFrameBufferObj() override {
         fColorBuffer = nullptr;
         fDepthBuffer = nullptr;
         fStencilBuffer = nullptr;
diff --git a/tools/gpu/gl/debug/GrTextureObj.h b/tools/gpu/gl/debug/GrTextureObj.h
index e290838..5532723 100644
--- a/tools/gpu/gl/debug/GrTextureObj.h
+++ b/tools/gpu/gl/debug/GrTextureObj.h
@@ -22,7 +22,7 @@
         : GrFBBindableObj() {
     }
 
-    virtual ~GrTextureObj() {
+    ~GrTextureObj() override {
         GrAlwaysAssert(0 == fTextureUnitReferees.count());
     }
 
