IWYU for gms.

This almost gets gms to be iwyu clean. The last bit is around gm.cpp
and the tracing framework and its use of atomic. Will also need a way
of keeping things from regressing, which is difficult due to needing to
do this outside-in.

Change-Id: I1393531e99da8b0f1a29f55c53c86d53f459af7d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/211593
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
diff --git a/gm/OverStroke.cpp b/gm/OverStroke.cpp
index 55fcc05..6352a94 100644
--- a/gm/OverStroke.cpp
+++ b/gm/OverStroke.cpp
@@ -22,13 +22,19 @@
  * See crbug.com/589769 skbug.com/5405 skbug.com/5406
  */
 
-
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
 #include "include/core/SkPathMeasure.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
 #include "src/core/SkPointPriv.h"
 
+#include <cstddef>
+
 const SkScalar OVERSTROKE_WIDTH = 500.0f;
 const SkScalar NORMALSTROKE_WIDTH = 3.0f;
 
diff --git a/gm/bitmaptiled.cpp b/gm/bitmaptiled.cpp
index abee913..dc5f5aa 100644
--- a/gm/bitmaptiled.cpp
+++ b/gm/bitmaptiled.cpp
@@ -13,6 +13,8 @@
 #include "include/core/SkTypes.h"
 #include "include/gpu/GrContext.h"
 
+class GrRenderTargetContext;
+
 // This test exercises Ganesh's drawing of tiled bitmaps. In particular, that the offsets and the
 // extents of the tiles don't causes gaps between tiles.
 static void draw_tile_bitmap_with_fractional_offset(GrContext* context, SkCanvas* canvas,
diff --git a/gm/cgm.c b/gm/cgm.c
index 9448125..bac8dbd 100644
--- a/gm/cgm.c
+++ b/gm/cgm.c
@@ -15,6 +15,10 @@
 #include "include/c/sk_paint.h"
 #include "include/c/sk_shader.h"
 #include "include/c/sk_surface.h"
+#include "include/c/sk_types.h"
+
+#include <stdbool.h>
+#include <stddef.h>
 
 extern void sk_test_c_api(sk_canvas_t*);
 
diff --git a/gm/cgms.cpp b/gm/cgms.cpp
index 44ab443..e45f370 100644
--- a/gm/cgms.cpp
+++ b/gm/cgms.cpp
@@ -8,6 +8,8 @@
 #include "gm/gm.h"
 #include "include/c/sk_types.h"
 
+class SkCanvas;
+
 extern "C" void sk_test_c_api(sk_canvas_t*);
 
 DEF_SIMPLE_GM(c_gms, canvas, 640, 480) {
diff --git a/gm/circle_sizes.cpp b/gm/circle_sizes.cpp
index 99eb110..f7aa67a 100644
--- a/gm/circle_sizes.cpp
+++ b/gm/circle_sizes.cpp
@@ -4,7 +4,11 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkPaint.h"
+
 // https://crbug.com/772953
 DEF_SIMPLE_GM(circle_sizes, canvas, 128, 128) {
     SkPaint p;
diff --git a/gm/circles.cpp b/gm/circles.cpp
index e8f8a1c..a7dcc3d 100644
--- a/gm/circles.cpp
+++ b/gm/circles.cpp
@@ -4,10 +4,22 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm/gm.h"
-#include "include/core/SkColorFilter.h"
+#include "include/core/SkBlurTypes.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkDrawLooper.h"
 #include "include/core/SkMaskFilter.h"
 #include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkBlurDrawLooper.h"
 #include "include/effects/SkGradientShader.h"
 #include "include/private/SkTArray.h"
diff --git a/gm/circulararcs.cpp b/gm/circulararcs.cpp
index 31e53e7..393b980 100644
--- a/gm/circulararcs.cpp
+++ b/gm/circulararcs.cpp
@@ -5,10 +5,20 @@
  * found in the LICENSE file.
  */
 
-#include <functional>
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPath.h"
+#include "include/core/SkPathEffect.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkDashPathEffect.h"
+#include "include/private/SkFloatBits.h"
+#include "include/private/SkTArray.h"
+
+#include <functional>
 
 constexpr SkScalar kStarts[] = {0.f, 10.f, 30.f, 45.f, 90.f, 165.f, 180.f, 270.f};
 constexpr SkScalar kSweeps[] = {1.f, 45.f, 90.f, 130.f, 180.f, 184.f, 300.f, 355.f};
diff --git a/gm/circularclips.cpp b/gm/circularclips.cpp
index 1a5bffc..025b693 100644
--- a/gm/circularclips.cpp
+++ b/gm/circularclips.cpp
@@ -7,7 +7,15 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkClipOp.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
+#include "src/core/SkClipOpPriv.h"
 
 class CircularClipsGM : public skiagm::GM {
     SkScalar fX1, fX2, fY, fR;
diff --git a/gm/clip_error.cpp b/gm/clip_error.cpp
index b35d207..2f87dbb 100644
--- a/gm/clip_error.cpp
+++ b/gm/clip_error.cpp
@@ -6,12 +6,24 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlurTypes.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
 #include "include/core/SkMaskFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkTextBlob.h"
+#include "include/core/SkTypeface.h"
 #include "src/core/SkBlurMask.h"
 #include "tools/ToolUtils.h"
 
+#include <string.h>
+
 #define WIDTH 800
 #define HEIGHT 800
 
diff --git a/gm/clip_strokerect.cpp b/gm/clip_strokerect.cpp
index dfe435d..746ea2f 100644
--- a/gm/clip_strokerect.cpp
+++ b/gm/clip_strokerect.cpp
@@ -7,7 +7,11 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
-#include "include/core/SkPath.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 
 class ClipStrokeRectGM : public skiagm::GM {
 public:
diff --git a/gm/clipdrawdraw.cpp b/gm/clipdrawdraw.cpp
index d230f3f..f5a86a8 100644
--- a/gm/clipdrawdraw.cpp
+++ b/gm/clipdrawdraw.cpp
@@ -6,6 +6,10 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
 #include "include/core/SkRegion.h"
 
 // This GM exercises the use case found in crbug.com/423834.
diff --git a/gm/clippedbitmapshaders.cpp b/gm/clippedbitmapshaders.cpp
index cdb5f49..a26e603 100644
--- a/gm/clippedbitmapshaders.cpp
+++ b/gm/clippedbitmapshaders.cpp
@@ -9,7 +9,16 @@
 #include "include/core/SkBitmap.h"
 #include "include/core/SkCanvas.h"
 #include "include/core/SkColor.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 
 namespace skiagm {
 
diff --git a/gm/clockwise.cpp b/gm/clockwise.cpp
index 016e45b..6adc688 100644
--- a/gm/clockwise.cpp
+++ b/gm/clockwise.cpp
@@ -6,22 +6,57 @@
  */
 
 #include "gm/gm.h"
-
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColorSpace.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "include/gpu/GrContext.h"
-#include "include/gpu/GrRenderTarget.h"
+#include "include/gpu/GrSamplerState.h"
+#include "include/gpu/GrTypes.h"
 #include "include/private/GrRecordingContext.h"
+#include "include/private/GrSurfaceProxy.h"
+#include "include/private/GrTextureProxy.h"
+#include "include/private/GrTypesPriv.h"
+#include "include/private/SkColorData.h"
+#include "src/gpu/GrBuffer.h"
+#include "src/gpu/GrCaps.h"
 #include "src/gpu/GrClip.h"
+#include "src/gpu/GrColorSpaceXform.h"
 #include "src/gpu/GrContextPriv.h"
+#include "src/gpu/GrGeometryProcessor.h"
+#include "src/gpu/GrGpuBuffer.h"
 #include "src/gpu/GrGpuCommandBuffer.h"
 #include "src/gpu/GrMemoryPool.h"
+#include "src/gpu/GrMesh.h"
 #include "src/gpu/GrOpFlushState.h"
+#include "src/gpu/GrPipeline.h"
+#include "src/gpu/GrPrimitiveProcessor.h"
+#include "src/gpu/GrProcessor.h"
+#include "src/gpu/GrProcessorSet.h"
 #include "src/gpu/GrRecordingContextPriv.h"
 #include "src/gpu/GrRenderTargetContext.h"
 #include "src/gpu/GrRenderTargetContextPriv.h"
+#include "src/gpu/GrResourceProvider.h"
+#include "src/gpu/GrShaderCaps.h"
+#include "src/gpu/GrShaderVar.h"
 #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h"
 #include "src/gpu/glsl/GrGLSLGeometryProcessor.h"
+#include "src/gpu/glsl/GrGLSLPrimitiveProcessor.h"
 #include "src/gpu/glsl/GrGLSLVarying.h"
-#include "src/gpu/glsl/GrGLSLVertexGeoBuilder.h"
+#include "src/gpu/ops/GrDrawOp.h"
+#include "src/gpu/ops/GrOp.h"
+
+#include <memory>
+#include <utility>
+
+class GrAppliedClip;
+class GrGLSLProgramDataManager;
 
 namespace skiagm {
 
diff --git a/gm/color4f.cpp b/gm/color4f.cpp
index 2a35fbb..8a99c14 100644
--- a/gm/color4f.cpp
+++ b/gm/color4f.cpp
@@ -6,13 +6,18 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
 #include "include/core/SkCanvas.h"
-#include "include/core/SkColorPriv.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorFilter.h"
+#include "include/core/SkColorSpace.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
 #include "include/core/SkShader.h"
 #include "include/core/SkSurface.h"
-
-#include "include/effects/SkColorMatrixFilter.h"
-#include "include/effects/SkGradientShader.h"
+#include "include/effects/SkColorMatrix.h"
 
 static sk_sp<SkShader> make_opaque_color() {
     return SkShaders::Color(0xFFFF0000);
@@ -88,7 +93,6 @@
 }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
-#include "include/core/SkColorSpace.h"
 
 DEF_SIMPLE_GM(color4shader, canvas, 360, 480) {
     canvas->translate(10, 10);
diff --git a/gm/coloremoji.cpp b/gm/coloremoji.cpp
index b8e3f99..f02353c 100644
--- a/gm/coloremoji.cpp
+++ b/gm/coloremoji.cpp
@@ -6,18 +6,33 @@
  */
 
 #include "gm/gm.h"
-#include "tools/ToolUtils.h"
-
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorFilter.h"
 #include "include/core/SkFont.h"
 #include "include/core/SkFontMetrics.h"
-#include "include/core/SkStream.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
 #include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkBlurImageFilter.h"
 #include "include/effects/SkColorFilterImageFilter.h"
 #include "include/effects/SkColorMatrixFilter.h"
 #include "include/effects/SkGradientShader.h"
-#include "tools/Resources.h"
+#include "tools/ToolUtils.h"
+
+#include <string.h>
+#include <initializer_list>
+#include <utility>
 
 /*
  * Spits out a dummy gradient to test blur with shader on paint
diff --git a/gm/coloremoji_blendmodes.cpp b/gm/coloremoji_blendmodes.cpp
index 791c493..f0f44f5 100644
--- a/gm/coloremoji_blendmodes.cpp
+++ b/gm/coloremoji_blendmodes.cpp
@@ -10,7 +10,9 @@
 #include "include/core/SkBlendMode.h"
 #include "include/core/SkCanvas.h"
 #include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
 #include "include/core/SkFontStyle.h"
+#include "include/core/SkFontTypes.h"
 #include "include/core/SkImageInfo.h"
 #include "include/core/SkMatrix.h"
 #include "include/core/SkPaint.h"
@@ -20,6 +22,7 @@
 #include "include/core/SkShader.h"
 #include "include/core/SkSize.h"
 #include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
 #include "include/core/SkTypeface.h"
 #include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
@@ -27,6 +30,8 @@
 #include "src/utils/SkUTF.h"
 #include "tools/ToolUtils.h"
 
+#include <string.h>
+
 namespace skiagm {
 
 static uint16_t gData[] = { 0xFFFF, 0xCCCF, 0xCCCF, 0xFFFF };
diff --git a/gm/colorfilteralpha8.cpp b/gm/colorfilteralpha8.cpp
index 54bf9ff..0fe6b5e 100644
--- a/gm/colorfilteralpha8.cpp
+++ b/gm/colorfilteralpha8.cpp
@@ -7,7 +7,13 @@
 
 #include "gm/gm.h"
 #include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkColorFilter.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 
 class ColorFilterAlpha8 : public skiagm::GM {
 public:
diff --git a/gm/colorfilterimagefilter.cpp b/gm/colorfilterimagefilter.cpp
index 70f95ef..cfce7a4 100644
--- a/gm/colorfilterimagefilter.cpp
+++ b/gm/colorfilterimagefilter.cpp
@@ -6,14 +6,29 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
 #include "include/core/SkCanvas.h"
-#include "include/core/SkColorPriv.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorFilter.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkShader.h"
-#include "include/effects/SkColorMatrixFilter.h"
-
+#include "include/core/SkTileMode.h"
 #include "include/effects/SkBlurImageFilter.h"
 #include "include/effects/SkColorFilterImageFilter.h"
+#include "include/effects/SkColorMatrix.h"
+#include "include/effects/SkGradientShader.h"
+#include "include/private/SkTArray.h"
 #include "include/private/SkTDArray.h"
+#include "tools/Resources.h"
+
+#include <string.h>
+#include <utility>
 
 #define FILTER_WIDTH    SkIntToScalar(30)
 #define FILTER_HEIGHT   SkIntToScalar(30)
@@ -50,10 +65,6 @@
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-#include "include/core/SkImage.h"
-#include "include/effects/SkGradientShader.h"
-#include "tools/Resources.h"
-
 static sk_sp<SkShader> sh_make_lineargradient0() {
     const SkPoint pts[] = { { 0, 0 }, { 100, 100 } };
     const SkColor colors[] = { SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE };
@@ -186,8 +197,6 @@
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-#include "include/effects/SkGradientShader.h"
-
 template <typename T> class SkTRefArray : public SkTDArray<T> {
 public:
     ~SkTRefArray() { this->unrefAll(); }
diff --git a/gm/colorfilters.cpp b/gm/colorfilters.cpp
index 82caff5..c0c95d3 100644
--- a/gm/colorfilters.cpp
+++ b/gm/colorfilters.cpp
@@ -7,6 +7,17 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkColorMatrixFilter.h"
 #include "include/effects/SkGradientShader.h"
 
diff --git a/gm/colormatrix.cpp b/gm/colormatrix.cpp
index cf3faca..806dea6 100644
--- a/gm/colormatrix.cpp
+++ b/gm/colormatrix.cpp
@@ -6,8 +6,23 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorFilter.h"
 #include "include/core/SkImage.h"
-#include "include/effects/SkColorMatrixFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
+#include "include/effects/SkColorMatrix.h"
 #include "include/effects/SkGradientShader.h"
 
 #define WIDTH 500
diff --git a/gm/colorwheel.cpp b/gm/colorwheel.cpp
index 688251f..ffe9158 100644
--- a/gm/colorwheel.cpp
+++ b/gm/colorwheel.cpp
@@ -6,8 +6,16 @@
  */
 
 #include "gm/gm.h"
-#include "include/core/SkData.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontStyle.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "tools/Resources.h"
 #include "tools/ToolUtils.h"
 
diff --git a/gm/complexclip.cpp b/gm/complexclip.cpp
index b3c4dc7..64922b6 100644
--- a/gm/complexclip.cpp
+++ b/gm/complexclip.cpp
@@ -7,10 +7,23 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkClipOp.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
+#include "src/core/SkClipOpPriv.h"
 #include "tools/ToolUtils.h"
 
+#include <string.h>
+
 namespace skiagm {
 
 constexpr SkColor gPathColor = SK_ColorBLACK;
diff --git a/gm/complexclip2.cpp b/gm/complexclip2.cpp
index c119341..4e49e8f 100644
--- a/gm/complexclip2.cpp
+++ b/gm/complexclip2.cpp
@@ -5,13 +5,20 @@
  * found in the LICENSE file.
  */
 
-
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkClipOp.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
 #include "include/core/SkRRect.h"
 #include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "include/utils/SkRandom.h"
+#include "src/core/SkClipOpPriv.h"
 
 namespace skiagm {
 
diff --git a/gm/complexclip3.cpp b/gm/complexclip3.cpp
index 531f8d3..f138ee0 100644
--- a/gm/complexclip3.cpp
+++ b/gm/complexclip3.cpp
@@ -4,9 +4,21 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkClipOp.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
+#include "src/core/SkClipOpPriv.h"
 #include "tools/ToolUtils.h"
 
 #include <utility>
diff --git a/gm/complexclip4.cpp b/gm/complexclip4.cpp
index f8d324a..69dc32b 100644
--- a/gm/complexclip4.cpp
+++ b/gm/complexclip4.cpp
@@ -4,9 +4,17 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkRRect.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "src/core/SkClipOpPriv.h"
 
 namespace skiagm {
diff --git a/gm/complexclip_blur_tiled.cpp b/gm/complexclip_blur_tiled.cpp
index 8abb87d..5b684af 100644
--- a/gm/complexclip_blur_tiled.cpp
+++ b/gm/complexclip_blur_tiled.cpp
@@ -6,7 +6,16 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkRRect.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
 #include "include/effects/SkBlurImageFilter.h"
 #include "src/core/SkClipOpPriv.h"
diff --git a/gm/composeshader.cpp b/gm/composeshader.cpp
index 96843e8..ec9f7e3 100644
--- a/gm/composeshader.cpp
+++ b/gm/composeshader.cpp
@@ -6,16 +6,29 @@
  */
 
 #include "gm/gm.h"
-
+#include "include/core/SkBitmap.h"
+#include "include/core/SkBlendMode.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkColorPriv.h"
-#include "include/core/SkGraphics.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
 #include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 #include "include/private/SkTDArray.h"
 
+#include <utility>
+
 static sk_sp<SkShader> make_shader(SkBlendMode mode) {
     SkPoint pts[2];
     SkColor colors[2];
diff --git a/gm/compositor_quads.cpp b/gm/compositor_quads.cpp
index db2202e..8a24df2 100644
--- a/gm/compositor_quads.cpp
+++ b/gm/compositor_quads.cpp
@@ -5,21 +5,45 @@
  * found in the LICENSE file.
  */
 
+// This test only works with the GPU backend.
+
 #include "gm/gm.h"
-
-#if SK_SUPPORT_GPU
-
+#include "include/core/SkBitmap.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorFilter.h"
+#include "include/core/SkData.h"
+#include "include/core/SkFilterQuality.h"
 #include "include/core/SkFont.h"
-#include "include/effects/SkColorMatrixFilter.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMaskFilter.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
+#include "include/effects/SkColorMatrix.h"
 #include "include/effects/SkGradientShader.h"
 #include "include/effects/SkMorphologyImageFilter.h"
 #include "include/effects/SkShaderMaskFilter.h"
-#include "include/utils/SkPaintFilterCanvas.h"
+#include "include/private/SkTArray.h"
 #include "src/core/SkLineClipper.h"
 #include "tools/Resources.h"
 #include "tools/gpu/YUVUtils.h"
 
 #include <array>
+#include <memory>
+#include <utility>
 
 // This GM mimics the draw calls used by complex compositors that focus on drawing rectangles
 // and quadrilaterals with per-edge AA, with complex images, effects, and seamless tiling.
@@ -1035,5 +1059,3 @@
 DEF_GM(return new CompositorGM("shader", make_shader_renderers());)
 DEF_GM(return new CompositorGM("image", make_image_renderers());)
 DEF_GM(return new CompositorGM("filter", make_filtered_renderers());)
-
-#endif // SK_SUPPORT_GPU
diff --git a/gm/concavepaths.cpp b/gm/concavepaths.cpp
index d0c3824..1082a56 100644
--- a/gm/concavepaths.cpp
+++ b/gm/concavepaths.cpp
@@ -7,7 +7,9 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkScalar.h"
 
 namespace {
 // Concave test
diff --git a/gm/conicpaths.cpp b/gm/conicpaths.cpp
index c8c621c..1ba8b44 100644
--- a/gm/conicpaths.cpp
+++ b/gm/conicpaths.cpp
@@ -7,7 +7,16 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
+#include "include/private/SkFloatBits.h"
 #include "include/private/SkTArray.h"
 
 class ConicPathsGM : public skiagm::GM {
diff --git a/gm/constcolorprocessor.cpp b/gm/constcolorprocessor.cpp
index ec0c7da..93ef95a 100644
--- a/gm/constcolorprocessor.cpp
+++ b/gm/constcolorprocessor.cpp
@@ -8,15 +8,39 @@
 // This test only works with the GPU backend.
 
 #include "gm/gm.h"
-#include "tools/ToolUtils.h"
-
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
+#include "include/gpu/GrConfig.h"
 #include "include/gpu/GrContext.h"
+#include "include/private/GrColor.h"
+#include "include/private/GrTypesPriv.h"
+#include "include/private/SkColorData.h"
+#include "src/gpu/GrFragmentProcessor.h"
+#include "src/gpu/GrPaint.h"
+#include "src/gpu/GrRenderTargetContext.h"
 #include "src/gpu/GrRenderTargetContextPriv.h"
 #include "src/gpu/SkGr.h"
 #include "src/gpu/effects/generated/GrConstColorProcessor.h"
 #include "src/gpu/ops/GrDrawOp.h"
 #include "src/gpu/ops/GrFillRectOp.h"
+#include "tools/ToolUtils.h"
+
+#include <utility>
 
 namespace skiagm {
 /**
diff --git a/gm/convex_all_line_paths.cpp b/gm/convex_all_line_paths.cpp
index 1f84c8f..2fa2adf 100644
--- a/gm/convex_all_line_paths.cpp
+++ b/gm/convex_all_line_paths.cpp
@@ -6,8 +6,20 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPath.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "src/core/SkPathPriv.h"
-#include "src/utils/SkPolyUtils.h"
+
+#include <memory>
 
 static void create_ngon(int n, SkPoint* pts, SkScalar width, SkScalar height) {
     float angleStep = 360.0f / n, angle = 0.0f;
diff --git a/gm/convexpaths.cpp b/gm/convexpaths.cpp
index b60e356..f5cc6fa 100644
--- a/gm/convexpaths.cpp
+++ b/gm/convexpaths.cpp
@@ -4,8 +4,19 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
+#include "include/private/SkNoncopyable.h"
 #include "include/private/SkTArray.h"
 #include "include/utils/SkRandom.h"
 
diff --git a/gm/convexpolyclip.cpp b/gm/convexpolyclip.cpp
index 201943f..08c5160 100644
--- a/gm/convexpolyclip.cpp
+++ b/gm/convexpolyclip.cpp
@@ -6,13 +6,28 @@
  */
 
 #include "gm/gm.h"
-#include "tools/ToolUtils.h"
-
 #include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkClipOp.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
+#include "src/core/SkClipOpPriv.h"
 #include "src/core/SkTLList.h"
+#include "tools/ToolUtils.h"
 
 static SkBitmap make_bmp(int w, int h) {
     SkBitmap bmp;
diff --git a/gm/convexpolyeffect.cpp b/gm/convexpolyeffect.cpp
index 2526220..7d06f13 100644
--- a/gm/convexpolyeffect.cpp
+++ b/gm/convexpolyeffect.cpp
@@ -8,21 +8,48 @@
 // This test only works with the GPU backend.
 
 #include "gm/gm.h"
-
-#include "include/core/SkColorPriv.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPath.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "include/gpu/GrContext.h"
 #include "include/private/GrRecordingContext.h"
-#include "src/core/SkGeometry.h"
+#include "include/private/GrSharedEnums.h"
+#include "include/private/GrTypesPriv.h"
+#include "include/private/SkColorData.h"
 #include "src/core/SkPointPriv.h"
 #include "src/core/SkTLList.h"
+#include "src/gpu/GrCaps.h"
 #include "src/gpu/GrDefaultGeoProcFactory.h"
+#include "src/gpu/GrFragmentProcessor.h"
+#include "src/gpu/GrGeometryProcessor.h"
 #include "src/gpu/GrMemoryPool.h"
 #include "src/gpu/GrOpFlushState.h"
-#include "src/gpu/GrPathUtils.h"
+#include "src/gpu/GrPaint.h"
+#include "src/gpu/GrProcessorAnalysis.h"
+#include "src/gpu/GrProcessorSet.h"
 #include "src/gpu/GrRecordingContextPriv.h"
+#include "src/gpu/GrRenderTargetContext.h"
 #include "src/gpu/GrRenderTargetContextPriv.h"
+#include "src/gpu/GrUserStencilSettings.h"
 #include "src/gpu/effects/GrConvexPolyEffect.h"
+#include "src/gpu/effects/GrPorterDuffXferProcessor.h"
+#include "src/gpu/ops/GrDrawOp.h"
 #include "src/gpu/ops/GrMeshDrawOp.h"
+#include "src/gpu/ops/GrOp.h"
+
+#include <memory>
+#include <utility>
+
+class GrAppliedClip;
 
 /** outset rendered rect to visualize anti-aliased poly edges */
 static SkRect outset(const SkRect& unsorted) {
diff --git a/gm/copyTo4444.cpp b/gm/copyTo4444.cpp
index 60c7b01..e7dcc89 100644
--- a/gm/copyTo4444.cpp
+++ b/gm/copyTo4444.cpp
@@ -6,11 +6,17 @@
  */
 
 #include "gm/gm.h"
-#include "tools/ToolUtils.h"
-
+#include "include/core/SkBitmap.h"
 #include "include/core/SkCanvas.h"
-#include "src/core/SkOSFile.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPixmap.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "tools/Resources.h"
+#include "tools/ToolUtils.h"
 
 namespace skiagm {
 
diff --git a/gm/crbug_691386.cpp b/gm/crbug_691386.cpp
index a8c6189..4e8b090 100644
--- a/gm/crbug_691386.cpp
+++ b/gm/crbug_691386.cpp
@@ -6,6 +6,10 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPath.h"
+#include "include/core/SkString.h"
 #include "include/utils/SkParsePath.h"
 
 DEF_SIMPLE_GM_CAN_FAIL(crbug_691386, canvas, errorMsg, 256, 256) {
diff --git a/gm/crbug_884166.cpp b/gm/crbug_884166.cpp
index 618c641..c94aa8e 100644
--- a/gm/crbug_884166.cpp
+++ b/gm/crbug_884166.cpp
@@ -7,6 +7,7 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
 
 DEF_SIMPLE_GM(crbug_884166, canvas, 300, 300) {
diff --git a/gm/crbug_887103.cpp b/gm/crbug_887103.cpp
index 994b0a8..d9e8ae7 100644
--- a/gm/crbug_887103.cpp
+++ b/gm/crbug_887103.cpp
@@ -7,6 +7,7 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
 
 DEF_SIMPLE_GM(crbug_887103, canvas, 520, 520) {
diff --git a/gm/crbug_892988.cpp b/gm/crbug_892988.cpp
index 7466625..abfcb54 100644
--- a/gm/crbug_892988.cpp
+++ b/gm/crbug_892988.cpp
@@ -6,8 +6,10 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
 #include "include/core/SkCanvas.h"
 #include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
 
 // The root cause of this bug was that when dual source blending was not supported and we made a
 // copy of the destination to perform blending we would clip the copy bounds to the current clip.
diff --git a/gm/crbug_899512.cpp b/gm/crbug_899512.cpp
index d3adea9..d44ebe2 100644
--- a/gm/crbug_899512.cpp
+++ b/gm/crbug_899512.cpp
@@ -6,10 +6,15 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkBlurTypes.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkColorFilter.h"
-#include "include/effects/SkBlurMaskFilter.h"
-#include "include/effects/SkLayerDrawLooper.h"
+#include "include/core/SkMaskFilter.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
 
 DEF_SIMPLE_GM(crbug_899512, canvas, 520, 520) {
     // comment this line below to solve the problem
diff --git a/gm/crbug_905548.cpp b/gm/crbug_905548.cpp
index 64a9f33..2b086b0 100644
--- a/gm/crbug_905548.cpp
+++ b/gm/crbug_905548.cpp
@@ -6,7 +6,14 @@
  */
 
 #include "gm/gm.h"
-
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
 #include "include/core/SkSurface.h"
 #include "include/effects/SkArithmeticImageFilter.h"
 #include "include/effects/SkBlurImageFilter.h"
diff --git a/gm/crbug_918512.cpp b/gm/crbug_918512.cpp
index 64fc724..bd592a3 100644
--- a/gm/crbug_918512.cpp
+++ b/gm/crbug_918512.cpp
@@ -2,7 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
 
 #include "gm/gm.h"
-
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
 #include "include/effects/SkLumaColorFilter.h"
 
 // PDF backend should produce correct results.
diff --git a/gm/crbug_938592.cpp b/gm/crbug_938592.cpp
index 854f985..de23850 100644
--- a/gm/crbug_938592.cpp
+++ b/gm/crbug_938592.cpp
@@ -7,7 +7,12 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkTileMode.h"
 #include "include/effects/SkGradientShader.h"
 
 // This draws a hard stop gradient applied to a rectangle. The hard stops fall at half pixel
diff --git a/gm/crbug_946965.cpp b/gm/crbug_946965.cpp
index 9947e42..00586b5 100644
--- a/gm/crbug_946965.cpp
+++ b/gm/crbug_946965.cpp
@@ -8,8 +8,8 @@
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
 #include "include/core/SkPaint.h"
-#include "include/core/SkPath.h"
 #include "include/core/SkRRect.h"
+#include "include/core/SkRect.h"
 
 // Exposed a bug in ellipse rendering where the radii were wrong under 90 degree rotation.
 DEF_SIMPLE_GM(crbug_946965, canvas, 75, 150) {
diff --git a/gm/crbug_947055.cpp b/gm/crbug_947055.cpp
index 180e606..ebea8bb 100644
--- a/gm/crbug_947055.cpp
+++ b/gm/crbug_947055.cpp
@@ -7,7 +7,10 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
-#include "include/core/SkPath.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
 
 DEF_SIMPLE_GM_BG(crbug_947055, canvas, 200, 50, SK_ColorBLUE) {
     // Green 2D rectangle to highlight the red rectangle. Isn't necessary
diff --git a/gm/croppedrects.cpp b/gm/croppedrects.cpp
index 8135fdb..0ab1257 100644
--- a/gm/croppedrects.cpp
+++ b/gm/croppedrects.cpp
@@ -6,10 +6,19 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
-#include "include/core/SkRRect.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
-#include "include/utils/SkRandom.h"
 
 namespace skiagm {
 
diff --git a/gm/crosscontextimage.cpp b/gm/crosscontextimage.cpp
index e1fe4ba..dd61c2a 100644
--- a/gm/crosscontextimage.cpp
+++ b/gm/crosscontextimage.cpp
@@ -6,10 +6,21 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkData.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPixmap.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "tools/Resources.h"
 
-#include "include/core/SkImage.h"
-#include "include/gpu/GrContext.h"
+class GrContext;
+class GrRenderTargetContext;
 
 DEF_SIMPLE_GPU_GM_CAN_FAIL(cross_context_image, context, rtc, canvas, errorMsg,
                            5 * 256 + 60, 256 + 128 + 30) {
diff --git a/gm/cubicpaths.cpp b/gm/cubicpaths.cpp
index 9bee582..a5925ef 100644
--- a/gm/cubicpaths.cpp
+++ b/gm/cubicpaths.cpp
@@ -7,8 +7,18 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkMatrix.h"
 #include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/utils/SkRandom.h"
 #include "tools/ToolUtils.h"
 
diff --git a/gm/daa.cpp b/gm/daa.cpp
index 4ef78e8..37af912 100644
--- a/gm/daa.cpp
+++ b/gm/daa.cpp
@@ -6,8 +6,13 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkFont.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkTypes.h"
 
 // This GM shows off a flaw in delta-based rasterizers (DAA, CCPR, etc.).
 // See also the bottom of dashing4 and skia:6886.
diff --git a/gm/dashcircle.cpp b/gm/dashcircle.cpp
index 57adf3f..d650306 100644
--- a/gm/dashcircle.cpp
+++ b/gm/dashcircle.cpp
@@ -6,7 +6,18 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPathEffect.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkDashPathEffect.h"
 #include "tools/timer/AnimTimer.h"
 
diff --git a/gm/dashcubics.cpp b/gm/dashcubics.cpp
index 676b5a3..df44380 100644
--- a/gm/dashcubics.cpp
+++ b/gm/dashcubics.cpp
@@ -7,13 +7,21 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPathEffect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkDashPathEffect.h"
 #include "include/effects/SkTrimPathEffect.h"
 #include "include/private/SkTArray.h"
 #include "include/utils/SkParsePath.h"
 #include "tools/timer/AnimTimer.h"
 
+#include <math.h>
 #include <utility>
 
 /*
diff --git a/gm/dashing.cpp b/gm/dashing.cpp
index 068afa1..6677f94 100644
--- a/gm/dashing.cpp
+++ b/gm/dashing.cpp
@@ -7,10 +7,25 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkMatrix.h"
 #include "include/core/SkPaint.h"
+#include "include/core/SkPath.h"
+#include "include/core/SkPathEffect.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkDashPathEffect.h"
 #include "tools/ToolUtils.h"
 
+#include <math.h>
+#include <initializer_list>
+
 static void drawline(SkCanvas* canvas, int on, int off, const SkPaint& paint,
                      SkScalar finalX = SkIntToScalar(600), SkScalar finalY = SkIntToScalar(0),
                      SkScalar phase = SkIntToScalar(0),
diff --git a/gm/degeneratesegments.cpp b/gm/degeneratesegments.cpp
index c3fa952..596da5e 100644
--- a/gm/degeneratesegments.cpp
+++ b/gm/degeneratesegments.cpp
@@ -4,10 +4,20 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
 #include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/utils/SkRandom.h"
 #include "tools/ToolUtils.h"
 
diff --git a/gm/dftext.cpp b/gm/dftext.cpp
index 486ba99..199d9ee 100644
--- a/gm/dftext.cpp
+++ b/gm/dftext.cpp
@@ -7,15 +7,33 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorSpace.h"
 #include "include/core/SkFont.h"
-#include "include/core/SkStream.h"
+#include "include/core/SkFontStyle.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkSurfaceProps.h"
 #include "include/core/SkTextBlob.h"
 #include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
+#include "include/private/SkTemplates.h"
 #include "include/private/SkTo.h"
-#include "tools/Resources.h"
 #include "tools/ToolUtils.h"
 
+#include <string.h>
+
+class GrContext;
+
 class DFTextGM : public skiagm::GM {
 public:
     DFTextGM() {
diff --git a/gm/dftext_blob_persp.cpp b/gm/dftext_blob_persp.cpp
index 64d6042..5c42218 100644
--- a/gm/dftext_blob_persp.cpp
+++ b/gm/dftext_blob_persp.cpp
@@ -7,12 +7,28 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorSpace.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkSurfaceProps.h"
 #include "include/core/SkTextBlob.h"
-#include "include/core/SkTypeface.h"
-#include "tools/Resources.h"
+#include "include/core/SkTypes.h"
+#include "include/private/SkTArray.h"
 #include "tools/ToolUtils.h"
 
+#include <initializer_list>
+
+class GrContext;
+
 /**
  * This GM tests reusing the same text blobs with distance fields rendering using various
  * combinations of perspective and non-perspetive matrices, scissor clips, and different x,y params
diff --git a/gm/discard.cpp b/gm/discard.cpp
index d2c0e28..bdde173 100644
--- a/gm/discard.cpp
+++ b/gm/discard.cpp
@@ -7,11 +7,21 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkImageInfo.h"
 #include "include/core/SkPaint.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTypes.h"
 #include "include/utils/SkRandom.h"
 #include "tools/ToolUtils.h"
 
+class GrContext;
+class GrRenderTargetContext;
+
 namespace skiagm {
 
 /*
diff --git a/gm/displacement.cpp b/gm/displacement.cpp
index 624041a..b788d6f 100644
--- a/gm/displacement.cpp
+++ b/gm/displacement.cpp
@@ -6,11 +6,23 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/effects/SkDisplacementMapEffect.h"
 #include "include/effects/SkImageSource.h"
 #include "tools/ToolUtils.h"
 
+#include <utility>
+
 namespace skiagm {
 
 class DisplacementMapGM : public GM {
diff --git a/gm/distantclip.cpp b/gm/distantclip.cpp
index d650415..51fe395 100644
--- a/gm/distantclip.cpp
+++ b/gm/distantclip.cpp
@@ -8,9 +8,15 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkPath.h"
 #include "include/core/SkPicture.h"
 #include "include/core/SkPictureRecorder.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 
 namespace skiagm {
 
diff --git a/gm/downsamplebitmap.cpp b/gm/downsamplebitmap.cpp
index f578310..76af66f 100644
--- a/gm/downsamplebitmap.cpp
+++ b/gm/downsamplebitmap.cpp
@@ -6,6 +6,21 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontStyle.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPixmap.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "tools/Resources.h"
 #include "tools/ToolUtils.h"
 
diff --git a/gm/draw_bitmap_rect_skbug4374.cpp b/gm/draw_bitmap_rect_skbug4374.cpp
index 2e09a3a..52d17e3 100644
--- a/gm/draw_bitmap_rect_skbug4374.cpp
+++ b/gm/draw_bitmap_rect_skbug4374.cpp
@@ -4,8 +4,14 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkRect.h"
 #include "tools/Resources.h"
+
 // https://bug.skia.org/4374
 DEF_SIMPLE_GM(draw_bitmap_rect_skbug4734, canvas, 64, 64) {
     SkBitmap source;
diff --git a/gm/drawable.cpp b/gm/drawable.cpp
index 2ef2abf..7780049 100644
--- a/gm/drawable.cpp
+++ b/gm/drawable.cpp
@@ -7,8 +7,13 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkDrawable.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
 
 struct MyDrawable : public SkDrawable {
     SkRect onGetBounds() override { return SkRect::MakeWH(50, 100);  }
diff --git a/gm/drawatlas.cpp b/gm/drawatlas.cpp
index 7a3c7e9..3042472 100644
--- a/gm/drawatlas.cpp
+++ b/gm/drawatlas.cpp
@@ -6,14 +6,41 @@
  */
 
 #include "gm/gm.h"
-
+#include "include/core/SkBlendMode.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorFilter.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPath.h"
+#include "include/core/SkPathMeasure.h"
+#include "include/core/SkPoint.h"
 #include "include/core/SkRSXform.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
 #include "include/core/SkTextBlob.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
+#include "include/core/SkVertices.h"
+#include "include/effects/SkGradientShader.h"
+#include "include/private/SkTemplates.h"
 #include "src/core/SkAutoMalloc.h"
+#include "src/core/SkFontPriv.h"
+#include "tools/Resources.h"
 #include "tools/ToolUtils.h"
 
+#include <initializer_list>
+
 class DrawAtlasGM : public skiagm::GM {
     static sk_sp<SkImage> MakeAtlas(SkCanvas* caller, const SkRect& target) {
         SkImageInfo info = SkImageInfo::MakeN32Premul(100, 100);
@@ -99,10 +126,6 @@
 DEF_GM( return new DrawAtlasGM; )
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
-#include "include/core/SkFont.h"
-#include "include/core/SkPath.h"
-#include "include/core/SkPathMeasure.h"
-#include "src/core/SkFontPriv.h"
 
 static void draw_text_on_path(SkCanvas* canvas, const void* text, size_t length,
                               const SkPoint xy[], const SkPath& path, const SkFont& font, const SkPaint& paint,
@@ -153,7 +176,6 @@
     }
 }
 
-#include "include/effects/SkGradientShader.h"
 static sk_sp<SkShader> make_shader() {
     SkPoint pts[2] = {{0, 0}, {220, 0}};
     SkColor colors[2] = {SK_ColorRED, SK_ColorBLUE};
@@ -237,10 +259,6 @@
     canvas->drawTextBlob(blob, offset.fX, offset.fY, paint);
 }
 
-#include "include/core/SkColorFilter.h"
-#include "include/core/SkVertices.h"
-#include "tools/Resources.h"
-
 static sk_sp<SkVertices> make_vertices(sk_sp<SkImage> image, const SkRect& r,
                                        SkColor color) {
     SkPoint pos[4];
diff --git a/gm/drawatlascolor.cpp b/gm/drawatlascolor.cpp
index c6f1da0..096620d 100644
--- a/gm/drawatlascolor.cpp
+++ b/gm/drawatlascolor.cpp
@@ -6,9 +6,22 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkRSXform.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "tools/ToolUtils.h"
 
 // Create a square atlas of:
diff --git a/gm/drawbitmaprect.cpp b/gm/drawbitmaprect.cpp
index 29e9f1a..e4bfac8 100644
--- a/gm/drawbitmaprect.cpp
+++ b/gm/drawbitmaprect.cpp
@@ -6,15 +6,31 @@
  */
 
 #include "gm/gm.h"
-#include "include/core/SkColorPriv.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkBlurTypes.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkFont.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMaskFilter.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
-#include "include/effects/SkBlurMaskFilter.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 #include "src/core/SkBlurMask.h"
 #include "src/core/SkMathPriv.h"
-#include "src/image/SkImage_Base.h"
 #include "tools/ToolUtils.h"
 
 static SkBitmap make_chessbm(int w, int h) {
diff --git a/gm/drawimageset.cpp b/gm/drawimageset.cpp
index bd00b63..c121afe 100644
--- a/gm/drawimageset.cpp
+++ b/gm/drawimageset.cpp
@@ -6,12 +6,31 @@
  */
 
 #include "gm/gm.h"
-
-#include <algorithm>
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 #include "tools/ToolUtils.h"
 
+#include <algorithm>
+#include <initializer_list>
+#include <utility>
+
 // Makes a set of m x n tiled images to be drawn with SkCanvas::experimental_drawImageSetV1().
 static void make_image_tiles(int tileW, int tileH, int m, int n, const SkColor colors[4],
                              SkCanvas::ImageSetEntry set[]) {
diff --git a/gm/drawlooper.cpp b/gm/drawlooper.cpp
index 4168ab8..c060813 100644
--- a/gm/drawlooper.cpp
+++ b/gm/drawlooper.cpp
@@ -6,11 +6,22 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkBlurTypes.h"
 #include "include/core/SkCanvas.h"
-#include "include/core/SkGraphics.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkDrawLooper.h"
+#include "include/core/SkFont.h"
 #include "include/core/SkMaskFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkLayerDrawLooper.h"
-#include "include/utils/SkRandom.h"
 #include "src/core/SkBlurMask.h"
 #include "tools/ToolUtils.h"
 
diff --git a/gm/drawminibitmaprect.cpp b/gm/drawminibitmaprect.cpp
index 7052dee..8f9d606 100644
--- a/gm/drawminibitmaprect.cpp
+++ b/gm/drawminibitmaprect.cpp
@@ -6,10 +6,22 @@
  */
 
 #include "gm/gm.h"
-#include "include/core/SkColorPriv.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 #include "include/utils/SkRandom.h"
 #include "src/core/SkMathPriv.h"
diff --git a/gm/drawquadset.cpp b/gm/drawquadset.cpp
index 6d6fc2a..9e0c080 100644
--- a/gm/drawquadset.cpp
+++ b/gm/drawquadset.cpp
@@ -6,14 +6,31 @@
  */
 
 #include "gm/gm.h"
-
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 #include "include/gpu/GrContext.h"
+#include "include/private/GrTypesPriv.h"
 #include "src/gpu/GrClip.h"
+#include "src/gpu/GrPaint.h"
 #include "src/gpu/GrRenderTargetContext.h"
-#include "src/gpu/GrSurfaceContextPriv.h"
 #include "src/gpu/SkGr.h"
 
+#include <utility>
+
 static constexpr SkScalar kTileWidth = 40;
 static constexpr SkScalar kTileHeight = 30;
 
diff --git a/gm/drawregion.cpp b/gm/drawregion.cpp
index ff06d1f..0f9dcc9 100644
--- a/gm/drawregion.cpp
+++ b/gm/drawregion.cpp
@@ -7,7 +7,11 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
 #include "include/core/SkRegion.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 
 /**
  *  This is very similar to the RectGrid macrobench in Android.
diff --git a/gm/drawregionmodes.cpp b/gm/drawregionmodes.cpp
index 3e6ad92..bb0c4ae 100644
--- a/gm/drawregionmodes.cpp
+++ b/gm/drawregionmodes.cpp
@@ -6,9 +6,19 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlurTypes.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkImageFilter.h"
 #include "include/core/SkMaskFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPathEffect.h"
+#include "include/core/SkPoint.h"
 #include "include/core/SkRegion.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
 #include "include/effects/SkBlurImageFilter.h"
 #include "include/effects/SkDashPathEffect.h"
 #include "include/effects/SkGradientShader.h"
diff --git a/gm/dropshadowimagefilter.cpp b/gm/dropshadowimagefilter.cpp
index 38d5716..f4244b6 100644
--- a/gm/dropshadowimagefilter.cpp
+++ b/gm/dropshadowimagefilter.cpp
@@ -6,12 +6,26 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkColorFilter.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkColorFilterImageFilter.h"
 #include "include/effects/SkDropShadowImageFilter.h"
 #include "include/utils/SkTextUtils.h"
 #include "tools/ToolUtils.h"
 
+#include <utility>
+
 ///////////////////////////////////////////////////////////////////////////////
 
 static void draw_paint(SkCanvas* canvas, const SkRect& r, sk_sp<SkImageFilter> imf) {
diff --git a/gm/drrect.cpp b/gm/drrect.cpp
index ea2a72b..634e203 100644
--- a/gm/drrect.cpp
+++ b/gm/drrect.cpp
@@ -7,8 +7,14 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
-#include "include/core/SkPath.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
 #include "include/core/SkRRect.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 
 class DRRectGM : public skiagm::GM {
 public:
diff --git a/gm/drrect_small_inner.cpp b/gm/drrect_small_inner.cpp
index d62b693..f38f403 100644
--- a/gm/drrect_small_inner.cpp
+++ b/gm/drrect_small_inner.cpp
@@ -9,6 +9,10 @@
 #include "include/core/SkCanvas.h"
 #include "include/core/SkPaint.h"
 #include "include/core/SkRRect.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+
+#include <initializer_list>
 
 DEF_SIMPLE_GM(drrect_small_inner, canvas, 170, 610) {
     SkPaint paint;
diff --git a/gm/dstreadshuffle.cpp b/gm/dstreadshuffle.cpp
index 4fba80f..d9a2a9f 100644
--- a/gm/dstreadshuffle.cpp
+++ b/gm/dstreadshuffle.cpp
@@ -4,11 +4,26 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm/gm.h"
-#include "include/core/SkBitmap.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorSpace.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
-#include "include/core/SkShader.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/utils/SkRandom.h"
 #include "tools/ToolUtils.h"
 
diff --git a/gm/emboss.cpp b/gm/emboss.cpp
index 883471d..bb98546 100644
--- a/gm/emboss.cpp
+++ b/gm/emboss.cpp
@@ -6,10 +6,19 @@
  */
 
 #include "gm/gm.h"
-
+#include "include/core/SkBitmap.h"
+#include "include/core/SkBlendMode.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkColorFilter.h"
 #include "include/core/SkFont.h"
+#include "include/core/SkMaskFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypeface.h"
 #include "src/core/SkBlurMask.h"
 #include "src/effects/SkEmbossMaskFilter.h"
 
diff --git a/gm/emptypath.cpp b/gm/emptypath.cpp
index 0a81dd1..d3a6a13 100644
--- a/gm/emptypath.cpp
+++ b/gm/emptypath.cpp
@@ -4,10 +4,20 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
 #include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/utils/SkRandom.h"
 #include "tools/ToolUtils.h"
 
diff --git a/gm/encode-alpha-jpeg.cpp b/gm/encode-alpha-jpeg.cpp
index fbca742..8fc0241 100644
--- a/gm/encode-alpha-jpeg.cpp
+++ b/gm/encode-alpha-jpeg.cpp
@@ -6,10 +6,19 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColorSpace.h"
+#include "include/core/SkData.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPixmap.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkStream.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "include/encode/SkJpegEncoder.h"
-#include "include/private/SkImageInfoPriv.h"
-
+#include "include/private/SkTemplates.h"
 #include "tools/Resources.h"
 
 namespace skiagm {
diff --git a/gm/encode-platform.cpp b/gm/encode-platform.cpp
index ecfd331..f636cb9 100644
--- a/gm/encode-platform.cpp
+++ b/gm/encode-platform.cpp
@@ -6,16 +6,28 @@
  */
 
 #include "gm/gm.h"
-
+#include "include/core/SkBitmap.h"
 #include "include/core/SkCanvas.h"
 #include "include/core/SkData.h"
+#include "include/core/SkEncodedImageFormat.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPixmap.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkStream.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "include/encode/SkJpegEncoder.h"
 #include "include/encode/SkPngEncoder.h"
 #include "include/encode/SkWebpEncoder.h"
-#include "src/images/SkImageEncoderPriv.h"
 #include "tools/Resources.h"
 
+#if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) || defined(SK_BUILD_FOR_WIN)
+#include "src/images/SkImageEncoderPriv.h"
+#endif
+
 namespace skiagm {
 
 #if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS)
diff --git a/gm/encode-srgb.cpp b/gm/encode-srgb.cpp
index 12a0ee3..0db8dc1 100644
--- a/gm/encode-srgb.cpp
+++ b/gm/encode-srgb.cpp
@@ -6,17 +6,27 @@
  */
 
 #include "gm/gm.h"
-
 #include "include/codec/SkCodec.h"
+#include "include/core/SkBitmap.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColorSpace.h"
 #include "include/core/SkData.h"
+#include "include/core/SkEncodedImageFormat.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPixmap.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkStream.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "include/encode/SkJpegEncoder.h"
 #include "include/encode/SkPngEncoder.h"
 #include "include/encode/SkWebpEncoder.h"
-#include "src/images/SkImageEncoderPriv.h"
 #include "tools/Resources.h"
 
+#include <memory>
+
 namespace skiagm {
 
 static const int imageWidth = 128;
diff --git a/gm/encode.cpp b/gm/encode.cpp
index 3e97c85..7776446 100644
--- a/gm/encode.cpp
+++ b/gm/encode.cpp
@@ -4,13 +4,19 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
-#include "gm/gm.h"
 
+#include "gm/gm.h"
+#include "include/core/SkBitmap.h"
 #include "include/core/SkCanvas.h"
 #include "include/core/SkData.h"
+#include "include/core/SkEncodedImageFormat.h"
 #include "include/core/SkFont.h"
 #include "include/core/SkImage.h"
 #include "include/core/SkImageEncoder.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "tools/Resources.h"
 
 namespace skiagm {
diff --git a/gm/etc1.cpp b/gm/etc1.cpp
index ac8a74e..773ba2d 100644
--- a/gm/etc1.cpp
+++ b/gm/etc1.cpp
@@ -5,21 +5,25 @@
  * found in the LICENSE file.
  */
 
-#include "gm/gm.h"
-#include "include/core/SkImage.h"
-#include "include/utils/SkRandom.h"
-#include "tools/ToolUtils.h"
+#include "include/core/SkTypes.h" // IWYU pragma: keep
 
-#if SK_SUPPORT_GPU && !defined(SK_BUILD_FOR_GOOGLE3)
+#if !defined(SK_BUILD_FOR_GOOGLE3)
+
+#include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkData.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "third_party/etc1/etc1.h"
 
-#include "include/gpu/GrContext.h"
-#include "include/private/GrTextureProxy.h"
-#include "src/gpu/GrGpu.h"
-#include "src/gpu/GrRenderTargetContext.h"
-#include "src/gpu/GrRenderTargetContextPriv.h"
-#include "src/gpu/effects/generated/GrSimpleTextureEffect.h"
-#include "src/gpu/ops/GrFillRectOp.h"
+class GrContext;
+class GrRenderTargetContext;
 
 // Basic test of Ganesh's ETC1 support
 class ETC1GM : public skiagm::GpuGM {
diff --git a/gm/extractbitmap.cpp b/gm/extractbitmap.cpp
index 6726f27..97d724d 100644
--- a/gm/extractbitmap.cpp
+++ b/gm/extractbitmap.cpp
@@ -8,8 +8,12 @@
 #include "gm/gm.h"
 #include "include/core/SkBitmap.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
 #include "include/core/SkString.h"
-#include "include/core/SkSurface.h"
 
 namespace skiagm {
 
diff --git a/gm/fadefilter.cpp b/gm/fadefilter.cpp
index 1240519..9681d66 100644
--- a/gm/fadefilter.cpp
+++ b/gm/fadefilter.cpp
@@ -6,8 +6,15 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColorFilter.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
 #include "include/effects/SkColorFilterImageFilter.h"
-#include "include/effects/SkColorMatrixFilter.h"
+
+#include <utility>
 
 // This GM renders correctly in 8888, but fails in PDF
 DEF_SIMPLE_GM(fadefilter, canvas, 256, 256) {
diff --git a/gm/fatpathfill.cpp b/gm/fatpathfill.cpp
index 1952fd9..bd82d17 100644
--- a/gm/fatpathfill.cpp
+++ b/gm/fatpathfill.cpp
@@ -7,7 +7,11 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkSurface.h"
 #include "tools/ToolUtils.h"
 
diff --git a/gm/filltypes.cpp b/gm/filltypes.cpp
index 96ef374..0b251eb 100644
--- a/gm/filltypes.cpp
+++ b/gm/filltypes.cpp
@@ -6,7 +6,14 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 
 namespace skiagm {
 
diff --git a/gm/filltypespersp.cpp b/gm/filltypespersp.cpp
index a9f0f12..4edaa3a 100644
--- a/gm/filltypespersp.cpp
+++ b/gm/filltypespersp.cpp
@@ -6,7 +6,19 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 
 namespace skiagm {
diff --git a/gm/filterbitmap.cpp b/gm/filterbitmap.cpp
index 5dae169..ee37789 100644
--- a/gm/filterbitmap.cpp
+++ b/gm/filterbitmap.cpp
@@ -6,12 +6,22 @@
  */
 
 #include "gm/gm.h"
-#include "tools/ToolUtils.h"
-
-#include "include/core/SkStream.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontStyle.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkTypeface.h"
-#include "include/effects/SkGradientShader.h"
+#include "include/core/SkTypes.h"
 #include "tools/Resources.h"
+#include "tools/ToolUtils.h"
 
 static void setTypeface(SkFont* font, const char name[], SkFontStyle style) {
     font->setTypeface(ToolUtils::create_portable_typeface(name, style));
diff --git a/gm/filterbug.cpp b/gm/filterbug.cpp
index 1da33e4..151a32f 100644
--- a/gm/filterbug.cpp
+++ b/gm/filterbug.cpp
@@ -6,8 +6,21 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkColorPriv.h"
+#include "include/core/SkFilterQuality.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
 
 static const sk_sp<SkImage> make_image(int firstBlackRow, int lastBlackRow) {
     static const int kWidth = 25;
diff --git a/gm/filterfastbounds.cpp b/gm/filterfastbounds.cpp
index 8b1366e..6819e9e 100644
--- a/gm/filterfastbounds.cpp
+++ b/gm/filterfastbounds.cpp
@@ -6,16 +6,35 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPicture.h"
 #include "include/core/SkPictureRecorder.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRRect.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkBlurImageFilter.h"
 #include "include/effects/SkDropShadowImageFilter.h"
 #include "include/effects/SkImageSource.h"
 #include "include/effects/SkOffsetImageFilter.h"
 #include "include/effects/SkPictureImageFilter.h"
 #include "include/effects/SkTileImageFilter.h"
-#include "include/utils/SkRandom.h"
+#include "include/private/SkTArray.h"
+
+#include <utility>
 
 namespace skiagm {
 
diff --git a/gm/filterindiabox.cpp b/gm/filterindiabox.cpp
index ead2a8d..c22a0e7 100644
--- a/gm/filterindiabox.cpp
+++ b/gm/filterindiabox.cpp
@@ -6,14 +6,18 @@
  */
 
 #include "gm/gm.h"
-#include "tools/ToolUtils.h"
-
-#include "include/core/SkImageEncoder.h"
-#include "include/core/SkStream.h"
-#include "include/core/SkTypeface.h"
-#include "include/effects/SkGradientShader.h"
-#include "src/core/SkBitmapProcState.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "tools/Resources.h"
+#include "tools/ToolUtils.h"
 
 static SkSize computeSize(const SkBitmap& bm, const SkMatrix& mat) {
     SkRect bounds = SkRect::MakeWH(SkIntToScalar(bm.width()),
diff --git a/gm/flippity.cpp b/gm/flippity.cpp
index 7c595d6..8718da6 100644
--- a/gm/flippity.cpp
+++ b/gm/flippity.cpp
@@ -6,14 +6,36 @@
  */
 
 #include "gm/gm.h"
-#include "tools/ToolUtils.h"
-
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
-
-#include "src/gpu/GrContextPriv.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
+#include "include/gpu/GrContext.h"
+#include "include/gpu/GrTypes.h"
+#include "include/private/SkTArray.h"
+#include "src/image/SkImage_Base.h"
 #include "src/image/SkImage_Gpu.h"
+#include "tools/ToolUtils.h"
 #include "tools/gpu/ProxyUtils.h"
 
+#include <string.h>
+#include <utility>
+
+class GrRenderTargetContext;
+
 static const int kNumMatrices = 6;
 static const int kImageSize = 128;
 static const int kLabelSize = 32;
diff --git a/gm/fontcache.cpp b/gm/fontcache.cpp
index 7223860..fb0bad2 100644
--- a/gm/fontcache.cpp
+++ b/gm/fontcache.cpp
@@ -9,17 +9,25 @@
 // It's not necessary to run this with CPU configs
 
 #include "gm/gm.h"
-
-#include "gm/gm.h"
 #include "include/core/SkCanvas.h"
-#include "include/core/SkGraphics.h"
-#include "include/core/SkImage.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontStyle.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkTypeface.h"
 #include "include/gpu/GrContext.h"
 #include "include/gpu/GrContextOptions.h"
+#include "include/private/GrTypesPriv.h"
 #include "src/gpu/GrContextPriv.h"
 #include "tools/ToolUtils.h"
 
+class GrRenderTargetContext;
+
 static SkScalar draw_string(SkCanvas* canvas, const SkString& text, SkScalar x,
                            SkScalar y, const SkFont& font) {
     SkPaint paint;
diff --git a/gm/fontmgr.cpp b/gm/fontmgr.cpp
index 76c93a6..e86c2c6 100644
--- a/gm/fontmgr.cpp
+++ b/gm/fontmgr.cpp
@@ -7,15 +7,28 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
 #include "include/core/SkFontMetrics.h"
 #include "include/core/SkFontMgr.h"
+#include "include/core/SkFontStyle.h"
+#include "include/core/SkFontTypes.h"
 #include "include/core/SkGraphics.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "src/core/SkFontPriv.h"
 #include "src/utils/SkMetaData.h"
 #include "tools/ToolUtils.h"
-#include "tools/flags/CommandLineFlags.h"
+
+#include <utility>
 
 // limit this just so we don't take too long to draw
 #define MAX_FAMILIES    30
diff --git a/gm/fontregen.cpp b/gm/fontregen.cpp
index 7124c97..721ad0c 100644
--- a/gm/fontregen.cpp
+++ b/gm/fontregen.cpp
@@ -14,18 +14,28 @@
 // the Plot with the first set of text will not get overwritten by the new large text.
 
 #include "gm/gm.h"
-
-#include "gm/gm.h"
 #include "include/core/SkCanvas.h"
-#include "include/core/SkGraphics.h"
-#include "include/core/SkImage.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontStyle.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTextBlob.h"
 #include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/gpu/GrContext.h"
 #include "include/gpu/GrContextOptions.h"
+#include "include/private/GrTypesPriv.h"
+#include "include/private/SkTemplates.h"
 #include "src/gpu/GrContextPriv.h"
-
 #include "tools/ToolUtils.h"
 
+class GrRenderTargetContext;
+
 static sk_sp<SkTextBlob> make_blob(const SkString& text, const SkFont& font) {
     size_t len = text.size();
     SkAutoTArray<SkScalar>  pos(len);
diff --git a/gm/fontscaler.cpp b/gm/fontscaler.cpp
index d0898b4..27505db 100644
--- a/gm/fontscaler.cpp
+++ b/gm/fontscaler.cpp
@@ -4,10 +4,18 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
 #include "include/core/SkFont.h"
-#include "include/core/SkTypeface.h"
-#include "tools/ToolUtils.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+
+#include <string.h>
 
 namespace skiagm {
 
diff --git a/gm/fontscalerdistortable.cpp b/gm/fontscalerdistortable.cpp
index a2d9c13..50c2118 100644
--- a/gm/fontscalerdistortable.cpp
+++ b/gm/fontscalerdistortable.cpp
@@ -4,14 +4,28 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
 #include "include/core/SkFont.h"
+#include "include/core/SkFontArguments.h"
 #include "include/core/SkFontMgr.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkStream.h"
+#include "include/core/SkString.h"
 #include "include/core/SkTypeface.h"
-#include "include/private/SkFixed.h"
-#include "src/core/SkFontDescriptor.h"
+#include "include/core/SkTypes.h"
 #include "tools/Resources.h"
 
+#include <string.h>
+#include <memory>
+#include <utility>
+
 namespace skiagm {
 
 class FontScalerDistortableGM : public GM {
diff --git a/gm/fwidth_squircle.cpp b/gm/fwidth_squircle.cpp
index 1448e48..267e065 100644
--- a/gm/fwidth_squircle.cpp
+++ b/gm/fwidth_squircle.cpp
@@ -6,24 +6,50 @@
  */
 
 #include "gm/gm.h"
-#include "include/utils/SkTextUtils.h"
-#include "tools/ToolUtils.h"
-
-#if SK_SUPPORT_GPU
-
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkString.h"
 #include "include/gpu/GrContext.h"
 #include "include/private/GrRecordingContext.h"
+#include "include/private/GrTypesPriv.h"
+#include "src/gpu/GrBuffer.h"
+#include "src/gpu/GrCaps.h"
 #include "src/gpu/GrContextPriv.h"
+#include "src/gpu/GrGeometryProcessor.h"
+#include "src/gpu/GrGpuBuffer.h"
 #include "src/gpu/GrGpuCommandBuffer.h"
 #include "src/gpu/GrMemoryPool.h"
+#include "src/gpu/GrMesh.h"
 #include "src/gpu/GrOpFlushState.h"
+#include "src/gpu/GrPipeline.h"
+#include "src/gpu/GrPrimitiveProcessor.h"
+#include "src/gpu/GrProcessor.h"
+#include "src/gpu/GrProcessorSet.h"
 #include "src/gpu/GrRecordingContextPriv.h"
 #include "src/gpu/GrRenderTargetContext.h"
 #include "src/gpu/GrRenderTargetContextPriv.h"
+#include "src/gpu/GrResourceProvider.h"
+#include "src/gpu/GrShaderCaps.h"
+#include "src/gpu/GrShaderVar.h"
 #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h"
 #include "src/gpu/glsl/GrGLSLGeometryProcessor.h"
+#include "src/gpu/glsl/GrGLSLPrimitiveProcessor.h"
+#include "src/gpu/glsl/GrGLSLProgramDataManager.h"
+#include "src/gpu/glsl/GrGLSLUniformHandler.h"
 #include "src/gpu/glsl/GrGLSLVarying.h"
 #include "src/gpu/glsl/GrGLSLVertexGeoBuilder.h"
+#include "src/gpu/ops/GrDrawOp.h"
+#include "src/gpu/ops/GrOp.h"
+
+#include <memory>
+#include <utility>
+
+class GrAppliedClip;
 
 /**
  * This test ensures that fwidth() works properly on GPU configs by drawing a squircle.
@@ -172,5 +198,3 @@
 }
 
 }
-
-#endif  // SK_SUPPORT_GPU
diff --git a/gm/gamma.cpp b/gm/gamma.cpp
index 99e73f8..400c1c0 100644
--- a/gm/gamma.cpp
+++ b/gm/gamma.cpp
@@ -6,11 +6,29 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorPriv.h"
+#include "include/core/SkColorSpace.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypeface.h"
+#include "include/effects/SkGradientShader.h"
 #include "tools/ToolUtils.h"
 
-#include "include/effects/SkGradientShader.h"
-#include "src/core/SkBlendModePriv.h"
-#include "tools/Resources.h"
+#include <string.h>
 
 DEF_SIMPLE_GM(gamma, canvas, 850, 200) {
     SkPaint p;
diff --git a/gm/gammatext.cpp b/gm/gammatext.cpp
index fc1ca4a..a2b6de5 100644
--- a/gm/gammatext.cpp
+++ b/gm/gammatext.cpp
@@ -7,10 +7,21 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
-#include "include/core/SkPath.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontStyle.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
 #include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
-#include "tools/ToolUtils.h"
 
 static sk_sp<SkShader> make_heatGradient(const SkPoint pts[2]) {
     const SkColor bw[] = { SK_ColorBLACK, SK_ColorWHITE };
diff --git a/gm/getpostextpath.cpp b/gm/getpostextpath.cpp
index c0911ec..fbce398 100644
--- a/gm/getpostextpath.cpp
+++ b/gm/getpostextpath.cpp
@@ -6,15 +6,22 @@
  */
 
 #include "gm/gm.h"
-#include "tools/ToolUtils.h"
-
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
 #include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkTextBlob.h"
+#include "include/core/SkTypeface.h"
 #include "include/private/SkTemplates.h"
 #include "include/utils/SkRandom.h"
 #include "src/core/SkFontPriv.h"
+#include "tools/ToolUtils.h"
+
+#include <string.h>
 
 static void strokePath(SkCanvas* canvas, const SkPath& path) {
     SkPaint paint;
diff --git a/gm/giantbitmap.cpp b/gm/giantbitmap.cpp
index fe8237d..4a32c29 100644
--- a/gm/giantbitmap.cpp
+++ b/gm/giantbitmap.cpp
@@ -6,9 +6,17 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
 #include "include/core/SkCanvas.h"
-#include "include/core/SkColorPriv.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
 
 /*
  *  Want to ensure that our bitmap sampler (in bitmap shader) keeps plenty of
diff --git a/gm/glyph_pos.cpp b/gm/glyph_pos.cpp
index a0ef297..e2f191f 100644
--- a/gm/glyph_pos.cpp
+++ b/gm/glyph_pos.cpp
@@ -7,8 +7,15 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "tools/ToolUtils.h"
 
 /* This test tries to define the effect of using hairline strokes on text.
diff --git a/gm/gm.cpp b/gm/gm.cpp
index 7d52f1d..38ab2be 100644
--- a/gm/gm.cpp
+++ b/gm/gm.cpp
@@ -6,11 +6,26 @@
  */
 
 #include "gm/gm.h"
-
+#include "include/core/SkBitmap.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
 #include "include/core/SkShader.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypeface.h"
 #include "include/gpu/GrContext.h"
 #include "src/core/SkTraceEvent.h"
 #include "tools/ToolUtils.h"
+
+#include <stdarg.h>
+
+class GrRenderTargetContext;
+
 using namespace skiagm;
 
 constexpr char GM::kErrorMsg_DrawSkippedGpuOnly[];
diff --git a/gm/gm.h b/gm/gm.h
index b391a9c..070c760 100644
--- a/gm/gm.h
+++ b/gm/gm.h
@@ -8,16 +8,18 @@
 #ifndef skiagm_DEFINED
 #define skiagm_DEFINED
 
-#include "include/core/SkBitmap.h"
-#include "include/core/SkCanvas.h"
-#include "include/core/SkPaint.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkSize.h"
 #include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "include/private/SkMacros.h"
-#include "src/core/SkClipOpPriv.h"
 #include "tools/Registry.h"
 
 class AnimTimer;
+class GrContext;
+class GrRenderTargetContext;
+class SkCanvas;
 class SkMetaData;
 struct GrContextOptions;
 
diff --git a/gm/gradientDirtyLaundry.cpp b/gm/gradientDirtyLaundry.cpp
index fa712e9..3750899 100644
--- a/gm/gradientDirtyLaundry.cpp
+++ b/gm/gradientDirtyLaundry.cpp
@@ -4,7 +4,20 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 
 using namespace skiagm;
diff --git a/gm/gradient_matrix.cpp b/gm/gradient_matrix.cpp
index f45ad8c..3c4f887 100644
--- a/gm/gradient_matrix.cpp
+++ b/gm/gradient_matrix.cpp
@@ -5,6 +5,7 @@
  * found in the LICENSE file.
  */
 
+#include "gm/gm.h"
 #include "include/core/SkCanvas.h"
 #include "include/core/SkColor.h"
 #include "include/core/SkMatrix.h"
@@ -13,12 +14,11 @@
 #include "include/core/SkRect.h"
 #include "include/core/SkRefCnt.h"
 #include "include/core/SkScalar.h"
-#include "include/core/SkSize.h"
-#include "include/core/SkString.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 
-#include "gm/gm.h"
-
 constexpr SkColor gColors[] = {
     SK_ColorRED, SK_ColorYELLOW
 };
diff --git a/gm/gradients.cpp b/gm/gradients.cpp
index 09de0e8..7b1a1f7 100644
--- a/gm/gradients.cpp
+++ b/gm/gradients.cpp
@@ -6,8 +6,27 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorSpace.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPicture.h"
+#include "include/core/SkPictureRecorder.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 
+#include <math.h>
+
 namespace skiagm {
 
 struct GradData {
@@ -914,8 +933,6 @@
     draw_many_stops(canvas);
 }
 
-#include "include/core/SkPictureRecorder.h"
-
 static void draw_circle_shader(SkCanvas* canvas, SkScalar cx, SkScalar cy, SkScalar r,
                                sk_sp<SkShader> (*shaderFunc)()) {
     SkPaint p;
diff --git a/gm/gradients_2pt_conical.cpp b/gm/gradients_2pt_conical.cpp
index 5e33e1d..4a884b4 100644
--- a/gm/gradients_2pt_conical.cpp
+++ b/gm/gradients_2pt_conical.cpp
@@ -6,6 +6,19 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 
 namespace skiagm {
diff --git a/gm/gradients_degenerate.cpp b/gm/gradients_degenerate.cpp
index 3f16f8b..8fea72e 100644
--- a/gm/gradients_degenerate.cpp
+++ b/gm/gradients_degenerate.cpp
@@ -6,7 +6,19 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkFont.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 
 // NOTE: The positions define hardstops for the red and green borders. For the repeating degenerate
diff --git a/gm/gradients_no_texture.cpp b/gm/gradients_no_texture.cpp
index 3515db9..32412b9 100644
--- a/gm/gradients_no_texture.cpp
+++ b/gm/gradients_no_texture.cpp
@@ -4,9 +4,24 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 
+#include <string.h>
+
 using namespace skiagm;
 
 struct GradData {
diff --git a/gm/gradtext.cpp b/gm/gradtext.cpp
index 60e2df5..e636b5d 100644
--- a/gm/gradtext.cpp
+++ b/gm/gradtext.cpp
@@ -7,7 +7,19 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
 #include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 #include "tools/ToolUtils.h"
 
diff --git a/gm/grayscalejpg.cpp b/gm/grayscalejpg.cpp
index 38b18ac..f51db14 100644
--- a/gm/grayscalejpg.cpp
+++ b/gm/grayscalejpg.cpp
@@ -6,7 +6,10 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkTypes.h"
 #include "tools/Resources.h"
 
 /*
diff --git a/gm/hairlines.cpp b/gm/hairlines.cpp
index b4e2f92..ed4f918 100644
--- a/gm/hairlines.cpp
+++ b/gm/hairlines.cpp
@@ -7,7 +7,15 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "include/private/SkTArray.h"
 
 namespace skiagm {
diff --git a/gm/hairmodes.cpp b/gm/hairmodes.cpp
index 9e46c1b..e05ca92 100644
--- a/gm/hairmodes.cpp
+++ b/gm/hairmodes.cpp
@@ -6,9 +6,21 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkBlendMode.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkColorPriv.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 
 constexpr SkBlendMode gModes[] = {
     SkBlendMode::kClear,
diff --git a/gm/hardstop_gradients.cpp b/gm/hardstop_gradients.cpp
index 9ac3086..4155dd0 100644
--- a/gm/hardstop_gradients.cpp
+++ b/gm/hardstop_gradients.cpp
@@ -37,7 +37,17 @@
  */
 
 #include "gm/gm.h"
-
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
 #include "include/effects/SkGradientShader.h"
 
 const int WIDTH  = 500;
diff --git a/gm/highcontrastfilter.cpp b/gm/highcontrastfilter.cpp
index e0d7779..e56ae1c 100644
--- a/gm/highcontrastfilter.cpp
+++ b/gm/highcontrastfilter.cpp
@@ -7,11 +7,28 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorFilter.h"
 #include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 #include "include/effects/SkHighContrastFilter.h"
 #include "tools/ToolUtils.h"
 
+#include <stdio.h>
+#include <string.h>
+
 using InvertStyle = SkHighContrastConfig::InvertStyle;
 
 static SkScalar kSize   = 200;
diff --git a/gm/hittestpath.cpp b/gm/hittestpath.cpp
index 6fbb5fa..27dab17 100644
--- a/gm/hittestpath.cpp
+++ b/gm/hittestpath.cpp
@@ -7,7 +7,12 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkTypes.h"
 #include "include/utils/SkRandom.h"
 
 static void test_hittest(SkCanvas* canvas, const SkPath& path) {
diff --git a/gm/hsl.cpp b/gm/hsl.cpp
index bee02c8..5c936f2 100644
--- a/gm/hsl.cpp
+++ b/gm/hsl.cpp
@@ -6,6 +6,13 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "tools/ToolUtils.h"
 
 // Hue, Saturation, Color, and Luminosity blend modes are oddballs.
diff --git a/gm/hugepath.cpp b/gm/hugepath.cpp
index 157111f..0d2902a 100644
--- a/gm/hugepath.cpp
+++ b/gm/hugepath.cpp
@@ -7,7 +7,10 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
 #include "include/core/SkSurface.h"
 
 DEF_SIMPLE_GM(path_huge_crbug_800804, canvas, 50, 600) {
diff --git a/gm/image.cpp b/gm/image.cpp
index bc09b1c..b5b020a 100644
--- a/gm/image.cpp
+++ b/gm/image.cpp
@@ -6,17 +6,41 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkColorPriv.h"
+#include "include/core/SkColorSpace.h"
 #include "include/core/SkData.h"
-#include "include/core/SkStream.h"
+#include "include/core/SkEncodedImageFormat.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageEncoder.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPicture.h"
+#include "include/core/SkPictureRecorder.h"
+#include "include/core/SkPixmap.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
-#include "include/gpu/GrContext.h"
-#include "include/utils/SkRandom.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
+#include "include/private/SkMalloc.h"
 #include "src/core/SkAutoPixmapStorage.h"
+#include "src/core/SkReadBuffer.h"
+#include "src/core/SkWriteBuffer.h"
 #include "tools/ToolUtils.h"
 
 #include <functional>
+#include <utility>
+
+class GrContext;
+class GrRenderTargetContext;
 
 static void drawContents(SkSurface* surface, SkColor fillC) {
     SkSize size = SkSize::Make(SkIntToScalar(surface->width()),
@@ -154,8 +178,6 @@
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-#include "include/core/SkPictureRecorder.h"
-
 static void draw_pixmap(SkCanvas* canvas, const SkPixmap& pmap) {
     SkBitmap bitmap;
     bitmap.installPixels(pmap);
@@ -383,8 +405,6 @@
     return SkImage::MakeFromEncoded(std::move(data));
 }
 
-#include "src/core/SkReadBuffer.h"
-#include "src/core/SkWriteBuffer.h"
 static sk_sp<SkImage> serial_deserial(SkImage* img) {
     SkBinaryWriteBuffer writer;
     writer.writeImage(img);
diff --git a/gm/image_pict.cpp b/gm/image_pict.cpp
index 43a100f..1d8f469 100644
--- a/gm/image_pict.cpp
+++ b/gm/image_pict.cpp
@@ -6,20 +6,41 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorSpace.h"
 #include "include/core/SkImage.h"
 #include "include/core/SkImageGenerator.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPicture.h"
 #include "include/core/SkPictureRecorder.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
-#include "src/core/SkMakeUnique.h"
-#include "src/image/SkImage_Base.h"
-
+#include "include/core/SkTypes.h"
 #include "include/gpu/GrContext.h"
+#include "include/gpu/GrSamplerState.h"
+#include "include/gpu/GrTypes.h"
 #include "include/private/GrTextureProxy.h"
+#include "include/private/GrTypesPriv.h"
+#include "src/core/SkMakeUnique.h"
 #include "src/gpu/GrContextPriv.h"
 #include "src/gpu/GrSurfaceContext.h"
+#include "src/image/SkImage_Base.h"
 #include "src/image/SkImage_Gpu.h"
 
+#include <memory>
+#include <utility>
+
+class GrRecordingContext;
+
 static void draw_something(SkCanvas* canvas, const SkRect& bounds) {
     SkPaint paint;
     paint.setAntiAlias(true);
diff --git a/gm/image_shader.cpp b/gm/image_shader.cpp
index abac563..cfce7a7 100644
--- a/gm/image_shader.cpp
+++ b/gm/image_shader.cpp
@@ -7,10 +7,28 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorSpace.h"
 #include "include/core/SkData.h"
+#include "include/core/SkEncodedImageFormat.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPicture.h"
 #include "include/core/SkPictureRecorder.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
+
+#include <utility>
+
+class GrContext;
 
 static void draw_something(SkCanvas* canvas, const SkRect& bounds) {
     SkPaint paint;
diff --git a/gm/imagealphathreshold.cpp b/gm/imagealphathreshold.cpp
index d4e7b27..e785762 100644
--- a/gm/imagealphathreshold.cpp
+++ b/gm/imagealphathreshold.cpp
@@ -6,7 +6,20 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorSpace.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
 #include "include/core/SkRegion.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
 #include "include/effects/SkAlphaThresholdFilter.h"
 #include "include/effects/SkImageSource.h"
@@ -14,6 +27,8 @@
 #include "include/utils/SkRandom.h"
 #include "tools/ToolUtils.h"
 
+#include <utility>
+
 #define WIDTH 500
 #define HEIGHT 500
 
diff --git a/gm/imageblur.cpp b/gm/imageblur.cpp
index 9bbfa1a..9485fe0 100644
--- a/gm/imageblur.cpp
+++ b/gm/imageblur.cpp
@@ -6,6 +6,13 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkTypeface.h"
 #include "include/effects/SkBlurImageFilter.h"
 #include "include/utils/SkRandom.h"
 #include "tools/ToolUtils.h"
diff --git a/gm/imageblur2.cpp b/gm/imageblur2.cpp
index dfdb295..d849c85 100644
--- a/gm/imageblur2.cpp
+++ b/gm/imageblur2.cpp
@@ -6,6 +6,13 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkBlurImageFilter.h"
 #include "include/utils/SkRandom.h"
 #include "tools/ToolUtils.h"
diff --git a/gm/imageblurclampmode.cpp b/gm/imageblurclampmode.cpp
index f2dbbda..34b4259 100644
--- a/gm/imageblurclampmode.cpp
+++ b/gm/imageblurclampmode.cpp
@@ -6,10 +6,24 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
 #include "include/effects/SkBlurImageFilter.h"
 #include "tools/ToolUtils.h"
 
+#include <initializer_list>
+#include <utility>
+
 static sk_sp<SkImage> make_image(SkCanvas* canvas) {
     SkImageInfo info = SkImageInfo::MakeN32Premul(250, 200);
     auto        surface = ToolUtils::makeSurface(canvas, info);
diff --git a/gm/imageblurrepeatmode.cpp b/gm/imageblurrepeatmode.cpp
index 01835da..ac4aa2d 100644
--- a/gm/imageblurrepeatmode.cpp
+++ b/gm/imageblurrepeatmode.cpp
@@ -6,10 +6,24 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
 #include "include/effects/SkBlurImageFilter.h"
 #include "tools/ToolUtils.h"
 
+#include <initializer_list>
+#include <utility>
+
 static sk_sp<SkImage> make_image(SkCanvas* canvas, int direction) {
     SkImageInfo info = SkImageInfo::MakeN32Premul(250, 200);
     auto        surface = ToolUtils::makeSurface(canvas, info);
diff --git a/gm/imageblurtiled.cpp b/gm/imageblurtiled.cpp
index 46677c6..deadee4 100644
--- a/gm/imageblurtiled.cpp
+++ b/gm/imageblurtiled.cpp
@@ -6,8 +6,17 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkBlurImageFilter.h"
-#include "include/utils/SkRandom.h"
 #include "tools/ToolUtils.h"
 
 #define WIDTH 640
diff --git a/gm/imagefilters.cpp b/gm/imagefilters.cpp
index dd5ef40..91bcbc5 100644
--- a/gm/imagefilters.cpp
+++ b/gm/imagefilters.cpp
@@ -6,13 +6,32 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorFilter.h"
+#include "include/core/SkFilterQuality.h"
 #include "include/core/SkImage.h"
 #include "include/core/SkImageFilter.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRRect.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkBlurImageFilter.h"
-#include "include/effects/SkColorMatrixFilter.h"
+#include "include/effects/SkColorFilterImageFilter.h"
+#include "include/effects/SkColorMatrix.h"
+#include "include/effects/SkMatrixConvolutionImageFilter.h"
+#include "include/effects/SkMorphologyImageFilter.h"
+#include "tools/Resources.h"
 #include "tools/ToolUtils.h"
 
+#include <utility>
+
 /**
  *  Test drawing a primitive w/ an imagefilter (in this case, just matrix w/ identity) to see
  *  that we apply the xfermode *after* the image has been created and filtered, and not during
@@ -104,13 +123,6 @@
 }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
-#include "include/core/SkRRect.h"
-#include "include/effects/SkBlurImageFilter.h"
-#include "include/effects/SkColorFilterImageFilter.h"
-#include "include/effects/SkColorMatrixFilter.h"
-#include "include/effects/SkMatrixConvolutionImageFilter.h"
-#include "include/effects/SkMorphologyImageFilter.h"
-#include "tools/Resources.h"
 
 static void draw_set(SkCanvas* canvas, sk_sp<SkImageFilter> filters[], int count) {
     const SkRect r = SkRect::MakeXYWH(30, 30, 200, 200);
diff --git a/gm/imagefiltersbase.cpp b/gm/imagefiltersbase.cpp
index 02f85f8..4989bef 100644
--- a/gm/imagefiltersbase.cpp
+++ b/gm/imagefiltersbase.cpp
@@ -6,18 +6,34 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkBlendMode.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkColorFilter.h"
-#include "include/core/SkColorPriv.h"
-#include "include/core/SkShader.h"
-#include "include/utils/SkTextUtils.h"
-#include "src/core/SkImageFilterPriv.h"
-#include "tools/ToolUtils.h"
-
+#include "include/core/SkFlattenable.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkBlurImageFilter.h"
 #include "include/effects/SkColorFilterImageFilter.h"
 #include "include/effects/SkDropShadowImageFilter.h"
+#include "include/utils/SkTextUtils.h"
+#include "src/core/SkImageFilterPriv.h"
 #include "src/core/SkSpecialImage.h"
+#include "tools/ToolUtils.h"
+
+#include <utility>
+
+class SkReadBuffer;
 
 class FailImageFilter : public SkImageFilter {
 public:
diff --git a/gm/imagefiltersclipped.cpp b/gm/imagefiltersclipped.cpp
index 5afcb8c..c145e19 100644
--- a/gm/imagefiltersclipped.cpp
+++ b/gm/imagefiltersclipped.cpp
@@ -6,11 +6,25 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
 #include "include/core/SkColor.h"
+#include "include/core/SkFilterQuality.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
 #include "include/core/SkPoint3.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
 #include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkBlurImageFilter.h"
 #include "include/effects/SkDisplacementMapEffect.h"
 #include "include/effects/SkDropShadowImageFilter.h"
@@ -23,6 +37,8 @@
 #include "include/effects/SkPerlinNoiseShader.h"
 #include "tools/ToolUtils.h"
 
+#include <utility>
+
 #define RESIZE_FACTOR_X SkIntToScalar(2)
 #define RESIZE_FACTOR_Y SkIntToScalar(5)
 
diff --git a/gm/imagefilterscropexpand.cpp b/gm/imagefilterscropexpand.cpp
index 5f312b0..b7792bc 100644
--- a/gm/imagefilterscropexpand.cpp
+++ b/gm/imagefilterscropexpand.cpp
@@ -6,25 +6,33 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkColorFilter.h"
-#include "include/core/SkColorPriv.h"
-#include "include/core/SkShader.h"
-
+#include "include/core/SkImage.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
 #include "include/core/SkPoint3.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTileMode.h"
 #include "include/effects/SkBlurImageFilter.h"
 #include "include/effects/SkColorFilterImageFilter.h"
-#include "include/effects/SkColorMatrixFilter.h"
 #include "include/effects/SkDisplacementMapEffect.h"
 #include "include/effects/SkDropShadowImageFilter.h"
 #include "include/effects/SkGradientShader.h"
 #include "include/effects/SkImageSource.h"
 #include "include/effects/SkLightingImageFilter.h"
-#include "include/effects/SkMergeImageFilter.h"
 #include "include/effects/SkMorphologyImageFilter.h"
 #include "include/effects/SkOffsetImageFilter.h"
 
+#include <utility>
+
 namespace {
 
 void make_checkerboard(SkBitmap* bitmap);
diff --git a/gm/imagefilterscropped.cpp b/gm/imagefilterscropped.cpp
index 9c595af..eaf36e7 100644
--- a/gm/imagefilterscropped.cpp
+++ b/gm/imagefilterscropped.cpp
@@ -6,18 +6,30 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkBlendMode.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkColorFilter.h"
-#include "include/core/SkColorPriv.h"
-#include "include/core/SkShader.h"
-#include "include/utils/SkTextUtils.h"
-#include "tools/ToolUtils.h"
-
+#include "include/core/SkFont.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkBlurImageFilter.h"
 #include "include/effects/SkColorFilterImageFilter.h"
 #include "include/effects/SkMergeImageFilter.h"
 #include "include/effects/SkMorphologyImageFilter.h"
 #include "include/effects/SkOffsetImageFilter.h"
+#include "include/utils/SkTextUtils.h"
+#include "tools/ToolUtils.h"
+
+#include <utility>
 
 ///////////////////////////////////////////////////////////////////////////////
 
diff --git a/gm/imagefiltersgraph.cpp b/gm/imagefiltersgraph.cpp
index c26f9bf..ecc4dd8 100644
--- a/gm/imagefiltersgraph.cpp
+++ b/gm/imagefiltersgraph.cpp
@@ -6,24 +6,32 @@
  */
 
 #include "gm/gm.h"
-#include "tools/ToolUtils.h"
-
+#include "include/core/SkBitmap.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkColorFilter.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/effects/SkArithmeticImageFilter.h"
 #include "include/effects/SkBlurImageFilter.h"
 #include "include/effects/SkColorFilterImageFilter.h"
-#include "include/effects/SkColorMatrixFilter.h"
 #include "include/effects/SkImageSource.h"
 #include "include/effects/SkMatrixConvolutionImageFilter.h"
 #include "include/effects/SkMergeImageFilter.h"
 #include "include/effects/SkMorphologyImageFilter.h"
 #include "include/effects/SkOffsetImageFilter.h"
 #include "include/effects/SkXfermodeImageFilter.h"
-#include "src/core/SkReadBuffer.h"
-#include "src/core/SkSpecialImage.h"
-#include "src/core/SkSpecialSurface.h"
-#include "src/core/SkWriteBuffer.h"
+#include "tools/ToolUtils.h"
+
+#include <utility>
 
 class ImageFiltersGraphGM : public skiagm::GM {
 public:
diff --git a/gm/imagefiltersscaled.cpp b/gm/imagefiltersscaled.cpp
index eee336c..471d9ae 100644
--- a/gm/imagefiltersscaled.cpp
+++ b/gm/imagefiltersscaled.cpp
@@ -6,11 +6,25 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
 #include "include/core/SkColor.h"
+#include "include/core/SkFilterQuality.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
 #include "include/core/SkPoint3.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
 #include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkBlurImageFilter.h"
 #include "include/effects/SkDisplacementMapEffect.h"
 #include "include/effects/SkDropShadowImageFilter.h"
@@ -23,6 +37,8 @@
 #include "include/effects/SkPerlinNoiseShader.h"
 #include "tools/ToolUtils.h"
 
+#include <utility>
+
 #define RESIZE_FACTOR SkIntToScalar(4)
 
 static sk_sp<SkImage> make_gradient_circle(int width, int height) {
diff --git a/gm/imagefiltersstroked.cpp b/gm/imagefiltersstroked.cpp
index 0bebfd9..186cc29 100644
--- a/gm/imagefiltersstroked.cpp
+++ b/gm/imagefiltersstroked.cpp
@@ -6,8 +6,18 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
 #include "include/core/SkColor.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
 #include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkBlurImageFilter.h"
 #include "include/effects/SkDropShadowImageFilter.h"
 #include "include/effects/SkOffsetImageFilter.h"
diff --git a/gm/imagefilterstransformed.cpp b/gm/imagefilterstransformed.cpp
index 292e68f..22926fc 100644
--- a/gm/imagefilterstransformed.cpp
+++ b/gm/imagefilterstransformed.cpp
@@ -6,18 +6,34 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
 #include "include/core/SkColor.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
 #include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkBlurImageFilter.h"
 #include "include/effects/SkDisplacementMapEffect.h"
 #include "include/effects/SkDropShadowImageFilter.h"
 #include "include/effects/SkGradientShader.h"
 #include "include/effects/SkImageSource.h"
 #include "include/effects/SkMorphologyImageFilter.h"
+#include "include/effects/SkXfermodeImageFilter.h"
 #include "tools/ToolUtils.h"
 
+#include <utility>
+
 namespace skiagm {
 
 // This GM draws image filters with a CTM containing shearing / rotation.
@@ -117,7 +133,6 @@
 }
 
 //////////////////////////////////////////////////////////////////////////////
-#include "include/effects/SkXfermodeImageFilter.h"
 
 DEF_SIMPLE_GM(rotate_imagefilter, canvas, 500, 500) {
     SkPaint paint;
diff --git a/gm/imagefromyuvtextures.cpp b/gm/imagefromyuvtextures.cpp
index b19b7e9..a491a6a 100644
--- a/gm/imagefromyuvtextures.cpp
+++ b/gm/imagefromyuvtextures.cpp
@@ -8,16 +8,34 @@
 // This test only works with the GPU backend.
 
 #include "gm/gm.h"
-
 #include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorFilter.h"
+#include "include/core/SkColorPriv.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPixmap.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 #include "include/gpu/GrBackendSurface.h"
 #include "include/gpu/GrContext.h"
+#include "include/gpu/GrTypes.h"
+#include "include/private/GrTypesPriv.h"
 #include "include/private/SkTo.h"
 #include "src/gpu/GrContextPriv.h"
 #include "src/gpu/GrGpu.h"
 
+class GrRenderTargetContext;
+
 static sk_sp<SkColorFilter> yuv_to_rgb_colorfilter() {
     static const float kJPEGConversionMatrix[20] = {
         1.0f,  0.0f,       1.402f,    0.0f, -180.0f/255,
diff --git a/gm/imagemagnifier.cpp b/gm/imagemagnifier.cpp
index a9110bf..1c7fad1 100644
--- a/gm/imagemagnifier.cpp
+++ b/gm/imagemagnifier.cpp
@@ -6,13 +6,26 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPixelRef.h"
-#include "include/core/SkSurface.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkTypeface.h"
 #include "include/effects/SkImageSource.h"
 #include "include/effects/SkMagnifierImageFilter.h"
 #include "include/utils/SkRandom.h"
 #include "tools/ToolUtils.h"
 
+#include <utility>
+
 #define WIDTH 500
 #define HEIGHT 500
 
diff --git a/gm/imagemakewithfilter.cpp b/gm/imagemakewithfilter.cpp
index 3ad2fd5..665a0fd 100644
--- a/gm/imagemakewithfilter.cpp
+++ b/gm/imagemakewithfilter.cpp
@@ -6,14 +6,29 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkColorFilter.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkBlurImageFilter.h"
 #include "include/effects/SkColorFilterImageFilter.h"
 #include "include/effects/SkDropShadowImageFilter.h"
 #include "tools/ToolUtils.h"
 
+#include <utility>
+
 ///////////////////////////////////////////////////////////////////////////////
 
 static void show_bounds(SkCanvas* canvas, const SkIRect& subset, const SkIRect& clip) {
diff --git a/gm/imagemasksubset.cpp b/gm/imagemasksubset.cpp
index 6e03f1e..6487eec 100644
--- a/gm/imagemasksubset.cpp
+++ b/gm/imagemasksubset.cpp
@@ -7,9 +7,16 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColorSpace.h"
 #include "include/core/SkImage.h"
 #include "include/core/SkImageGenerator.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkSize.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTypes.h"
 #include "src/core/SkMakeUnique.h"
 #include "tools/ToolUtils.h"
 
diff --git a/gm/imageresizetiled.cpp b/gm/imageresizetiled.cpp
index 95c2d32..042df53 100644
--- a/gm/imageresizetiled.cpp
+++ b/gm/imageresizetiled.cpp
@@ -6,8 +6,16 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkFont.h"
 #include "include/core/SkImageFilter.h"
-#include "include/utils/SkRandom.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "tools/ToolUtils.h"
 
 #define WIDTH 640
diff --git a/gm/imagescalealigned.cpp b/gm/imagescalealigned.cpp
index e519082..d245a10 100644
--- a/gm/imagescalealigned.cpp
+++ b/gm/imagescalealigned.cpp
@@ -6,9 +6,19 @@
  */
 
 #include "gm/gm.h"
-
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFilterQuality.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTypes.h"
 #include "include/private/SkTArray.h"
 
 class ImageScaleAlignedGM : public skiagm::GM {
diff --git a/gm/imagesource.cpp b/gm/imagesource.cpp
index 44dd71a..64f9cfe 100644
--- a/gm/imagesource.cpp
+++ b/gm/imagesource.cpp
@@ -6,10 +6,22 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/effects/SkImageSource.h"
 #include "tools/ToolUtils.h"
 
-#include "include/core/SkImage.h"
-#include "include/effects/SkImageSource.h"
+#include <utility>
 
 // This GM exercises the SkImageSource ImageFilter class.
 
diff --git a/gm/imagesource2.cpp b/gm/imagesource2.cpp
index 61b9086..b0f31ea 100644
--- a/gm/imagesource2.cpp
+++ b/gm/imagesource2.cpp
@@ -6,8 +6,19 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFilterQuality.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkImageSource.h"
 
 namespace skiagm {
diff --git a/gm/internal_links.cpp b/gm/internal_links.cpp
index e71b488..44f9d59 100644
--- a/gm/internal_links.cpp
+++ b/gm/internal_links.cpp
@@ -4,11 +4,22 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
-#include "gm/gm.h"
-#include "tools/ToolUtils.h"
 
+#include "gm/gm.h"
 #include "include/core/SkAnnotation.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkData.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypeface.h"
+#include "tools/ToolUtils.h"
 
 namespace skiagm {
 
diff --git a/gm/inversepaths.cpp b/gm/inversepaths.cpp
index b6848d9..0726983 100644
--- a/gm/inversepaths.cpp
+++ b/gm/inversepaths.cpp
@@ -7,9 +7,17 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPathEffect.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkDashPathEffect.h"
 
+#include <utility>
+
 static SkPath generate_square(SkScalar cx, SkScalar cy, SkScalar w) {
     SkRect rect = SkRect::MakeXYWH(cx - w / 2, cy - w / 2, w, w);
     SkPath path;
diff --git a/gm/jpg_color_cube.cpp b/gm/jpg_color_cube.cpp
index afe6eeb..50db941 100644
--- a/gm/jpg_color_cube.cpp
+++ b/gm/jpg_color_cube.cpp
@@ -4,12 +4,21 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
 #include "include/core/SkCanvas.h"
 #include "include/core/SkColorPriv.h"
 #include "include/core/SkData.h"
+#include "include/core/SkEncodedImageFormat.h"
 #include "include/core/SkImage.h"
 #include "include/core/SkImageEncoder.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
+
+#include <utility>
 
 namespace skiagm {
 
diff --git a/gm/largeglyphblur.cpp b/gm/largeglyphblur.cpp
index 1041cb6..5e18dbb 100644
--- a/gm/largeglyphblur.cpp
+++ b/gm/largeglyphblur.cpp
@@ -6,12 +6,19 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlurTypes.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkMaskFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkTextBlob.h"
+#include "include/core/SkTypeface.h"
+#include "src/core/SkBlurMask.h"
 #include "tools/ToolUtils.h"
 
-#include "include/core/SkCanvas.h"
-#include "include/core/SkMaskFilter.h"
-#include "include/core/SkTextBlob.h"
-#include "src/core/SkBlurMask.h"
+#include <string.h>
 
 // This test ensures that glyphs whose point size is less than the SkStrike's maxmium, but
 // who have a large blur, are still handled correctly
diff --git a/gm/lattice.cpp b/gm/lattice.cpp
index c3f73b6..197f693 100644
--- a/gm/lattice.cpp
+++ b/gm/lattice.cpp
@@ -6,7 +6,20 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/private/SkMalloc.h"
 #include "tools/ToolUtils.h"
 
 static sk_sp<SkSurface> make_surface(SkCanvas* root, int N, int padLeft, int padTop,
diff --git a/gm/lcdblendmodes.cpp b/gm/lcdblendmodes.cpp
index ad56231..4741cbf 100644
--- a/gm/lcdblendmodes.cpp
+++ b/gm/lcdblendmodes.cpp
@@ -5,14 +5,24 @@
  * found in the LICENSE file.
  */
 
-
-/*
- * Tests text rendering with LCD and the various blend modes.
- */
-
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 #include "tools/ToolUtils.h"
 
diff --git a/gm/lcdoverlap.cpp b/gm/lcdoverlap.cpp
index 5bb6f18..8a91efa 100644
--- a/gm/lcdoverlap.cpp
+++ b/gm/lcdoverlap.cpp
@@ -5,15 +5,20 @@
  * found in the LICENSE file.
  */
 
-
-/*
- * Tests overlapping LCD text
- */
-
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
 #include "include/core/SkCanvas.h"
-#include "include/core/SkSurface.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkTextBlob.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "tools/ToolUtils.h"
 
 namespace skiagm {
diff --git a/gm/lcdtext.cpp b/gm/lcdtext.cpp
index e4ee3ba..fc6eb12 100644
--- a/gm/lcdtext.cpp
+++ b/gm/lcdtext.cpp
@@ -5,17 +5,19 @@
  * found in the LICENSE file.
  */
 
-
-/* Tests text rendering with LCD and subpixel rendering turned on and off.
- */
-
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
-#include "include/core/SkPicture.h"
-#include "include/core/SkPictureRecorder.h"
-#include "include/core/SkSurface.h"
-#include "include/effects/SkPictureImageFilter.h"
-#include "tools/ToolUtils.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 
 class LcdTextGM : public skiagm::GM {
 public:
diff --git a/gm/lighting.cpp b/gm/lighting.cpp
index 26521e2..451a921 100644
--- a/gm/lighting.cpp
+++ b/gm/lighting.cpp
@@ -6,7 +6,17 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPoint3.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/effects/SkLightingImageFilter.h"
 #include "include/effects/SkOffsetImageFilter.h"
 #include "tools/ToolUtils.h"
diff --git a/gm/lightingshader.cpp b/gm/lightingshader.cpp
index eb012e8..aac6d7d 100644
--- a/gm/lightingshader.cpp
+++ b/gm/lightingshader.cpp
@@ -6,12 +6,25 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
 #include "include/core/SkPoint3.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "src/core/SkNormalSource.h"
 #include "src/shaders/SkLightingShader.h"
+#include "src/shaders/SkLights.h"
 #include "tools/ToolUtils.h"
 
+#include <utility>
+
 // Create a hemispherical normal map
 static SkBitmap make_hemi_normalmap(int texSize) {
     SkBitmap hemi;
diff --git a/gm/lightingshader2.cpp b/gm/lightingshader2.cpp
index 2ce7e28..6d4c345 100644
--- a/gm/lightingshader2.cpp
+++ b/gm/lightingshader2.cpp
@@ -6,13 +6,29 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontStyle.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPoint3.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkTypeface.h"
 #include "src/core/SkNormalSource.h"
 #include "src/shaders/SkLightingShader.h"
+#include "src/shaders/SkLights.h"
 #include "tools/ToolUtils.h"
 
+#include <initializer_list>
+#include <utility>
+
 // Create a truncated pyramid normal map
 static SkBitmap make_frustum_normalmap(int texSize) {
     SkBitmap frustum;
diff --git a/gm/linepaths.cpp b/gm/linepaths.cpp
index d1d3304..25ffde2 100644
--- a/gm/linepaths.cpp
+++ b/gm/linepaths.cpp
@@ -7,8 +7,14 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
 #include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/utils/SkRandom.h"
 #include "tools/ToolUtils.h"
 
diff --git a/gm/localmatriximagefilter.cpp b/gm/localmatriximagefilter.cpp
index a754748..19dee85 100644
--- a/gm/localmatriximagefilter.cpp
+++ b/gm/localmatriximagefilter.cpp
@@ -7,14 +7,23 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkSurface.h"
 #include "include/effects/SkBlurImageFilter.h"
-#include "include/effects/SkColorFilterImageFilter.h"
 #include "include/effects/SkMorphologyImageFilter.h"
 #include "include/effects/SkOffsetImageFilter.h"
-#include "src/core/SkModeColorFilter.h"
 #include "tools/ToolUtils.h"
 
+#include <utility>
+
 static sk_sp<SkImage> make_image(SkCanvas* rootCanvas) {
     SkImageInfo info = SkImageInfo::MakeN32Premul(100, 100);
     auto        surface(ToolUtils::makeSurface(rootCanvas, info));
diff --git a/gm/localmatriximageshader.cpp b/gm/localmatriximageshader.cpp
index 006f150..d08748d 100644
--- a/gm/localmatriximageshader.cpp
+++ b/gm/localmatriximageshader.cpp
@@ -7,7 +7,17 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkShader.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTileMode.h"
 #include "tools/Resources.h"
 #include "tools/ToolUtils.h"
 
diff --git a/gm/localmatrixshader.cpp b/gm/localmatrixshader.cpp
index deb762d..08e27e9 100644
--- a/gm/localmatrixshader.cpp
+++ b/gm/localmatrixshader.cpp
@@ -6,9 +6,19 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkShader.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTypes.h"
 #include "tools/ToolUtils.h"
 
 static sk_sp<SkImage> make_image(SkCanvas* rootCanvas) {
diff --git a/gm/lumafilter.cpp b/gm/lumafilter.cpp
index 52f07a8..b35208f 100644
--- a/gm/lumafilter.cpp
+++ b/gm/lumafilter.cpp
@@ -6,12 +6,29 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorFilter.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 #include "include/effects/SkLumaColorFilter.h"
-#include "src/core/SkBlendModePriv.h"
 #include "tools/ToolUtils.h"
 
+#include <string.h>
+
 static SkScalar kSize   = 80;
 static SkScalar kInset  = 10;
 static SkColor  kColor1 = SkColorSetARGB(0xff, 0xff, 0xff, 0);
diff --git a/gm/mac_aa_explorer.cpp b/gm/mac_aa_explorer.cpp
index e95e5c9..37adb8d 100644
--- a/gm/mac_aa_explorer.cpp
+++ b/gm/mac_aa_explorer.cpp
@@ -6,11 +6,23 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkFont.h"
-#include "include/core/SkSurface.h"
+#include "include/core/SkFontStyle.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
+
+#include <string.h>
+#include <initializer_list>
 
 #ifdef SK_BUILD_FOR_MAC
 
+#include "include/core/SkSurface.h"
+
 #import <ApplicationServices/ApplicationServices.h>
 
 static void std_cg_setup(CGContextRef ctx) {
diff --git a/gm/makeRasterImage.cpp b/gm/makeRasterImage.cpp
index 72491a3..704e049 100644
--- a/gm/makeRasterImage.cpp
+++ b/gm/makeRasterImage.cpp
@@ -6,7 +6,9 @@
  */
 
 #include "gm/gm.h"
-#include "include/core/SkSurface.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkRefCnt.h"
 #include "tools/Resources.h"
 
 DEF_SIMPLE_GM(makeRasterImage, canvas, 128,128) {
diff --git a/gm/makecolorspace.cpp b/gm/makecolorspace.cpp
index 82ece0c..bda2c0c 100644
--- a/gm/makecolorspace.cpp
+++ b/gm/makecolorspace.cpp
@@ -7,11 +7,22 @@
 
 #include "gm/gm.h"
 #include "include/codec/SkCodec.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkColorSpace.h"
+#include "include/core/SkData.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "src/core/SkImagePriv.h"
 #include "tools/Resources.h"
 
+#include <initializer_list>
+#include <memory>
+
 sk_sp<SkImage> make_raster_image(const char* path) {
     sk_sp<SkData> resourceData = GetResourceAsData(path);
     std::unique_ptr<SkCodec> codec = SkCodec::MakeFromData(resourceData);
diff --git a/gm/mandoline.cpp b/gm/mandoline.cpp
index 4b4a344..a675013 100644
--- a/gm/mandoline.cpp
+++ b/gm/mandoline.cpp
@@ -6,9 +6,15 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
 #include "include/core/SkPoint.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "include/utils/SkRandom.h"
 #include "src/core/SkGeometry.h"
 
diff --git a/gm/manypaths.cpp b/gm/manypaths.cpp
index 845349a..660ad68 100644
--- a/gm/manypaths.cpp
+++ b/gm/manypaths.cpp
@@ -6,8 +6,14 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkRRect.h"
 #include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/utils/SkRandom.h"
 #include "tools/ToolUtils.h"
 
diff --git a/gm/matrixconvolution.cpp b/gm/matrixconvolution.cpp
index 9b4633b..a848b00 100644
--- a/gm/matrixconvolution.cpp
+++ b/gm/matrixconvolution.cpp
@@ -6,7 +6,20 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
 #include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypeface.h"
 #include "include/effects/SkGradientShader.h"
 #include "include/effects/SkMatrixConvolutionImageFilter.h"
 #include "tools/ToolUtils.h"
diff --git a/gm/matriximagefilter.cpp b/gm/matriximagefilter.cpp
index fb15a1f..170f893 100644
--- a/gm/matriximagefilter.cpp
+++ b/gm/matriximagefilter.cpp
@@ -6,8 +6,15 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
 #include "include/core/SkColor.h"
+#include "include/core/SkFilterQuality.h"
 #include "include/core/SkImageFilter.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
 
 static void draw(SkCanvas* canvas, const SkRect& rect, const SkBitmap& bitmap,
                  const SkMatrix& matrix, SkFilterQuality filter) {
diff --git a/gm/megalooper.cpp b/gm/megalooper.cpp
index 0660a6a..70910de 100644
--- a/gm/megalooper.cpp
+++ b/gm/megalooper.cpp
@@ -6,11 +6,23 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkBlurTypes.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkColorFilter.h"
+#include "include/core/SkDrawLooper.h"
 #include "include/core/SkMaskFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/effects/SkLayerDrawLooper.h"
 #include "src/core/SkBlurMask.h"
+#include "src/core/SkClipOpPriv.h"
 
 // This GM tests 3 different ways of drawing four shadows around a square:
 //      just using 4 blurred rects
diff --git a/gm/mipmap.cpp b/gm/mipmap.cpp
index 5f1f5c8..ea86883 100644
--- a/gm/mipmap.cpp
+++ b/gm/mipmap.cpp
@@ -6,10 +6,18 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColorSpace.h"
+#include "include/core/SkFilterQuality.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
-#include "include/utils/SkRandom.h"
+#include "include/core/SkTypes.h"
 
 static sk_sp<SkImage> make_image() {
     const SkImageInfo info = SkImageInfo::MakeN32Premul(319, 52);
diff --git a/gm/mixedtextblobs.cpp b/gm/mixedtextblobs.cpp
index 1c8ef35..2bacd23 100644
--- a/gm/mixedtextblobs.cpp
+++ b/gm/mixedtextblobs.cpp
@@ -6,14 +6,22 @@
  */
 
 #include "gm/gm.h"
-#include "tools/ToolUtils.h"
-
 #include "include/core/SkCanvas.h"
-#include "include/core/SkStream.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkTextBlob.h"
 #include "include/core/SkTypeface.h"
-#include "include/effects/SkGradientShader.h"
 #include "tools/Resources.h"
+#include "tools/ToolUtils.h"
+
+#include <string.h>
 
 namespace skiagm {
 
diff --git a/gm/mixercolorfilter.cpp b/gm/mixercolorfilter.cpp
index e73b540..050523f 100644
--- a/gm/mixercolorfilter.cpp
+++ b/gm/mixercolorfilter.cpp
@@ -6,14 +6,28 @@
  */
 
 #include "gm/gm.h"
-
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkColorFilter.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 #include "include/effects/SkLumaColorFilter.h"
-#include "include/effects/SkTableColorFilter.h"
+#include "tools/Resources.h"
 #include "tools/timer/AnimTimer.h"
 
+#include <math.h>
+
 // A tint filter maps colors to a given range (gradient), based on the input luminance:
 //
 //   c' = lerp(lo, hi, luma(c))
@@ -111,8 +125,6 @@
 } // namespace
 DEF_GM( return new MixerCFGM(SkSize::Make(200, 250), 5); )
 
-#include "tools/Resources.h"
-
 static sk_sp<SkShader> make_resource_shader(const char path[], int size) {
     auto img = GetResourceAsImage(path);
     if (!img) {
diff --git a/gm/modecolorfilters.cpp b/gm/modecolorfilters.cpp
index b062882..0e9361c 100644
--- a/gm/modecolorfilters.cpp
+++ b/gm/modecolorfilters.cpp
@@ -6,7 +6,21 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkColorFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 #include "tools/ToolUtils.h"
 
diff --git a/gm/morphology.cpp b/gm/morphology.cpp
index b0759bd..ef2174e 100644
--- a/gm/morphology.cpp
+++ b/gm/morphology.cpp
@@ -6,6 +6,17 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkMorphologyImageFilter.h"
 #include "tools/ToolUtils.h"
 
diff --git a/gm/multipicturedraw.cpp b/gm/multipicturedraw.cpp
index 40e204b..688154e 100644
--- a/gm/multipicturedraw.cpp
+++ b/gm/multipicturedraw.cpp
@@ -6,13 +6,28 @@
  */
 
 #include "gm/gm.h"
-#include "tools/ToolUtils.h"
-
+#include "include/core/SkBBHFactory.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkColorFilter.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
 #include "include/core/SkMultiPictureDraw.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPicture.h"
 #include "include/core/SkPictureRecorder.h"
+#include "include/core/SkRRect.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTypes.h"
+#include "include/private/SkTArray.h"
+#include "tools/ToolUtils.h"
 
 constexpr SkScalar kRoot3Over2 = 0.86602545f;  // sin(60)
 constexpr SkScalar kRoot3      = 1.73205081f;
diff --git a/gm/nested.cpp b/gm/nested.cpp
index 2da4d3c..859077f 100644
--- a/gm/nested.cpp
+++ b/gm/nested.cpp
@@ -6,8 +6,16 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
 #include "include/core/SkRRect.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "include/utils/SkRandom.h"
 
 namespace skiagm {
diff --git a/gm/ninepatchstretch.cpp b/gm/ninepatchstretch.cpp
index b366852..d7ba99c 100644
--- a/gm/ninepatchstretch.cpp
+++ b/gm/ninepatchstretch.cpp
@@ -6,6 +6,17 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
 #include "tools/ToolUtils.h"
 
diff --git a/gm/nonclosedpaths.cpp b/gm/nonclosedpaths.cpp
index 7698a20..0f7b081 100644
--- a/gm/nonclosedpaths.cpp
+++ b/gm/nonclosedpaths.cpp
@@ -7,7 +7,12 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 
 namespace skiagm {
 
diff --git a/gm/offsetimagefilter.cpp b/gm/offsetimagefilter.cpp
index f264eb7..4b9fcaa 100644
--- a/gm/offsetimagefilter.cpp
+++ b/gm/offsetimagefilter.cpp
@@ -6,12 +6,24 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkImage.h"
-#include "include/core/SkSurface.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/effects/SkImageSource.h"
 #include "include/effects/SkOffsetImageFilter.h"
 #include "tools/ToolUtils.h"
 
+#include <utility>
+
 #define WIDTH 600
 #define HEIGHT 100
 #define MARGIN 12
diff --git a/gm/orientation.cpp b/gm/orientation.cpp
index 9744c0e..7998a23 100644
--- a/gm/orientation.cpp
+++ b/gm/orientation.cpp
@@ -6,10 +6,10 @@
  */
 
 #include "gm/gm.h"
-
 #include "include/core/SkCanvas.h"
-#include "include/core/SkColor.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkString.h"
 #include "tools/Resources.h"
 
 // This gm draws 8 images that are mostly the same when respecting the
diff --git a/gm/ovals.cpp b/gm/ovals.cpp
index 74f0d4e..b7cb6b5 100644
--- a/gm/ovals.cpp
+++ b/gm/ovals.cpp
@@ -6,11 +6,18 @@
  */
 
 #include "gm/gm.h"
-#include "include/core/SkColorFilter.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
 #include "include/core/SkRect.h"
-#include "include/effects/SkBlurDrawLooper.h"
-#include "include/effects/SkBlurMaskFilter.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 #include "include/private/SkTArray.h"
 #include "include/utils/SkRandom.h"
diff --git a/gm/overdrawcanvas.cpp b/gm/overdrawcanvas.cpp
index 1e75e8d..e953f15 100644
--- a/gm/overdrawcanvas.cpp
+++ b/gm/overdrawcanvas.cpp
@@ -6,9 +6,20 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorFilter.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
 #include "include/core/SkOverdrawCanvas.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkSurface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkOverdrawColorFilter.h"
-#include "tools/ToolUtils.h"
 
 #define WIDTH 500
 #define HEIGHT 500
diff --git a/gm/overdrawcolorfilter.cpp b/gm/overdrawcolorfilter.cpp
index ba92bce..694bcbc 100644
--- a/gm/overdrawcolorfilter.cpp
+++ b/gm/overdrawcolorfilter.cpp
@@ -6,7 +6,16 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorFilter.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkOverdrawColorFilter.h"
 
 static inline void set_bitmap(SkBitmap* bitmap, uint8_t alpha) {
diff --git a/gm/p3.cpp b/gm/p3.cpp
index c8eae66..92a0e34 100644
--- a/gm/p3.cpp
+++ b/gm/p3.cpp
@@ -6,14 +6,31 @@
  */
 
 #include "gm/gm.h"
-
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkColorSpace.h"
+#include "include/core/SkFilterQuality.h"
 #include "include/core/SkFont.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPathEffect.h"
+#include "include/core/SkPixmap.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
 #include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkDashPathEffect.h"
 #include "include/effects/SkGradientShader.h"
 #include "src/core/SkColorSpaceXformSteps.h"
 
+#include <math.h>
+#include <string.h>
+
 static bool nearly_equal(SkColor4f x, SkColor4f y) {
     const float K = 0.01f;
     return fabsf(x.fR - y.fR) < K
diff --git a/gm/patch.cpp b/gm/patch.cpp
index 1631c8f..997fcf6 100644
--- a/gm/patch.cpp
+++ b/gm/patch.cpp
@@ -6,10 +6,21 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 #include "src/utils/SkPatchUtils.h"
+#include "tools/Resources.h"
 
 static sk_sp<SkShader> make_shader() {
     const SkColor colors[] = {
@@ -147,7 +158,6 @@
     };
     dopatch(canvas, colors);
 }
-#include "tools/Resources.h"
 DEF_SIMPLE_GM(patch_image, canvas, 1500, 1100) {
     const SkColor colors[SkPatchUtils::kNumCorners] = {
         SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorCYAN
diff --git a/gm/path_stroke_with_zero_length.cpp b/gm/path_stroke_with_zero_length.cpp
index 48f54d2..2f2cbca 100644
--- a/gm/path_stroke_with_zero_length.cpp
+++ b/gm/path_stroke_with_zero_length.cpp
@@ -6,10 +6,19 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkColorPriv.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTypes.h"
 #include "include/utils/SkParsePath.h"
 #include "src/core/SkAutoPixmapStorage.h"
 
diff --git a/gm/pathcontourstart.cpp b/gm/pathcontourstart.cpp
index e3c568a..430e59b 100644
--- a/gm/pathcontourstart.cpp
+++ b/gm/pathcontourstart.cpp
@@ -6,11 +6,19 @@
  */
 
 #include "gm/gm.h"
-
+#include "include/core/SkCanvas.h"
 #include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPathEffect.h"
+#include "include/core/SkPoint.h"
 #include "include/core/SkRRect.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/effects/SkDashPathEffect.h"
+#include "include/private/SkTArray.h"
+#include "include/private/SkTemplates.h"
 
 namespace skiagm {
 
diff --git a/gm/patheffects.cpp b/gm/patheffects.cpp
index 8669c3e..33a6841 100644
--- a/gm/patheffects.cpp
+++ b/gm/patheffects.cpp
@@ -4,14 +4,28 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkMatrix.h"
 #include "include/core/SkPaint.h"
+#include "include/core/SkPath.h"
+#include "include/core/SkPathEffect.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/Sk1DPathEffect.h"
 #include "include/effects/Sk2DPathEffect.h"
 #include "include/effects/SkCornerPathEffect.h"
 #include "include/effects/SkDashPathEffect.h"
 #include "include/effects/SkDiscretePathEffect.h"
+#include "include/effects/SkOpPathEffect.h"
+#include "include/pathops/SkPathOps.h"
+
+#include <initializer_list>
 
 namespace skiagm {
 
@@ -165,7 +179,6 @@
 }
 
 //////////////////////////////////////////////////////////////////////////////
-#include "include/effects/SkOpPathEffect.h"
 
 class ComboPathEfectsGM : public skiagm::GM {
 public:
diff --git a/gm/pathfill.cpp b/gm/pathfill.cpp
index 17caae5..6a00f39 100644
--- a/gm/pathfill.cpp
+++ b/gm/pathfill.cpp
@@ -6,7 +6,15 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 
 typedef SkScalar (*MakePathProc)(SkPath*);
 
diff --git a/gm/pathinterior.cpp b/gm/pathinterior.cpp
index 06feb53..b152f72 100644
--- a/gm/pathinterior.cpp
+++ b/gm/pathinterior.cpp
@@ -7,11 +7,13 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
-#include "include/core/SkGraphics.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
-#include "include/effects/SkBlurMaskFilter.h"
-#include "include/effects/SkLayerDrawLooper.h"
-#include "include/utils/SkRandom.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "tools/ToolUtils.h"
 
 static SkRect inset(const SkRect& r) {
diff --git a/gm/pathmaskcache.cpp b/gm/pathmaskcache.cpp
index a6d60b4..8014275 100644
--- a/gm/pathmaskcache.cpp
+++ b/gm/pathmaskcache.cpp
@@ -6,10 +6,17 @@
  */
 
 #include "gm/gm.h"
-
+#include "include/core/SkCanvas.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
-#include "include/gpu/GrContext.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/gpu/GrContextOptions.h"
+#include "include/private/GrTypesPriv.h"
+#include "include/private/SkTArray.h"
 
 /** This tests the GPU backend's caching of path coverage masks */
 class PathMaskCache : public skiagm::GM {
diff --git a/gm/pathmeasure.cpp b/gm/pathmeasure.cpp
index 7402a73..cd79cfb 100644
--- a/gm/pathmeasure.cpp
+++ b/gm/pathmeasure.cpp
@@ -5,18 +5,18 @@
  * found in the LICENSE file.
  */
 
-#include "gm/gm.h"
-#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
 #include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPathEffect.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkDashPathEffect.h"
 
 // Repro case for skia:7674.  Requires lots of RAM to run, and currently triggers UB:
 // ../include/private/SkTDArray.h:382:26:
 //   runtime error: signed integer overflow: 2147483644 + 4 cannot be represented in type 'int'
 
-#if 0
-DEF_SIMPLE_GM(PathMeasure_explosion, canvas, 500,500) {
+static SK_UNUSED void path_measure_explosion(SkCanvas* canvas) {
     SkPaint p;
     p.setAntiAlias(false);
     float intervals[] = { 0, 10e9f };
@@ -53,4 +53,10 @@
     }
     canvas->drawPath(path, p);
 }
+
+#if 0
+#include "gm/gm.h"
+DEF_SIMPLE_GM(PathMeasure_explosion, canvas, 500,500) {
+    path_measure_explosion(canvas);
+}
 #endif
diff --git a/gm/pathopsinverse.cpp b/gm/pathopsinverse.cpp
index a09237c..60f80d0 100644
--- a/gm/pathopsinverse.cpp
+++ b/gm/pathopsinverse.cpp
@@ -7,8 +7,14 @@
 
 #include "gm/gm.h"
 #include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
 #include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/pathops/SkPathOps.h"
 #include "tools/ToolUtils.h"
 
diff --git a/gm/pathopsskpclip.cpp b/gm/pathopsskpclip.cpp
index 74846df..75e7bd8 100644
--- a/gm/pathopsskpclip.cpp
+++ b/gm/pathopsskpclip.cpp
@@ -6,14 +6,15 @@
  */
 
 #include "gm/gm.h"
-#include "include/core/SkBitmap.h"
 #include "include/core/SkCanvas.h"
 #include "include/core/SkPath.h"
 #include "include/core/SkPicture.h"
 #include "include/core/SkPictureRecorder.h"
 #include "include/core/SkRect.h"
-#include "include/pathops/SkPathOps.h"
-#include "src/core/SkClipStack.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 
 namespace skiagm {
 
diff --git a/gm/pathreverse.cpp b/gm/pathreverse.cpp
index de8bcc0..b8b3547 100644
--- a/gm/pathreverse.cpp
+++ b/gm/pathreverse.cpp
@@ -7,8 +7,11 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
-#include "include/core/SkTypeface.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkString.h"
 
 /* The hiragino_maru_goth_pro_e path was generated with Mac-specific code:
  *
diff --git a/gm/pdf_never_embed.cpp b/gm/pdf_never_embed.cpp
index e54f9df..0b6ccd7 100644
--- a/gm/pdf_never_embed.cpp
+++ b/gm/pdf_never_embed.cpp
@@ -6,11 +6,19 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkString.h"
 #include "include/core/SkTextBlob.h"
 #include "include/core/SkTypeface.h"
-#include "include/private/SkTo.h"
 #include "tools/Resources.h"
 
+#include <string.h>
+
 static void excercise_draw_pos_text(SkCanvas* canvas,
                                     const char* text,
                                     SkScalar x, SkScalar y,
diff --git a/gm/perlinnoise.cpp b/gm/perlinnoise.cpp
index 4261faa..7cd9129 100644
--- a/gm/perlinnoise.cpp
+++ b/gm/perlinnoise.cpp
@@ -6,9 +6,20 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/effects/SkPerlinNoiseShader.h"
 
+#include <utility>
+
 namespace {
 
 enum class Type {
diff --git a/gm/perspimages.cpp b/gm/perspimages.cpp
index 7bada24..6be57b6 100644
--- a/gm/perspimages.cpp
+++ b/gm/perspimages.cpp
@@ -6,12 +6,20 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkFilterQuality.h"
 #include "include/core/SkImage.h"
-#include "include/core/SkPath.h"
-#include "include/core/SkSurface.h"
-#include "include/effects/SkGradientShader.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/private/SkTArray.h"
+#include "include/private/SkTDArray.h"
 #include "tools/Resources.h"
-#include "tools/ToolUtils.h"
+
+#include <initializer_list>
 
 static sk_sp<SkImage> make_image1() { return GetResourceAsImage("images/mandrill_128.png"); }
 
diff --git a/gm/perspshaders.cpp b/gm/perspshaders.cpp
index 8a5786d..9c59c52 100644
--- a/gm/perspshaders.cpp
+++ b/gm/perspshaders.cpp
@@ -6,9 +6,25 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFilterQuality.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 #include "tools/ToolUtils.h"
 
diff --git a/gm/picture.cpp b/gm/picture.cpp
index 0fdec1c..55c493b 100644
--- a/gm/picture.cpp
+++ b/gm/picture.cpp
@@ -6,9 +6,17 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkMatrix.h"
 #include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPicture.h"
 #include "include/core/SkPictureRecorder.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 
 static sk_sp<SkPicture> make_picture() {
     SkPictureRecorder rec;
diff --git a/gm/pictureimagefilter.cpp b/gm/pictureimagefilter.cpp
index 6324714..38b5893 100644
--- a/gm/pictureimagefilter.cpp
+++ b/gm/pictureimagefilter.cpp
@@ -6,13 +6,25 @@
  */
 
 #include "gm/gm.h"
-#include "tools/ToolUtils.h"
-
-#include "include/core/SkPictureRecorder.h"
-#include "include/effects/SkPictureImageFilter.h"
-
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorSpace.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkFont.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPicture.h"
+#include "include/core/SkPictureRecorder.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypeface.h"
 #include "include/effects/SkImageSource.h"
+#include "include/effects/SkPictureImageFilter.h"
+#include "tools/ToolUtils.h"
 
 // This GM exercises the SkPictureImageFilter ImageFilter class.
 
diff --git a/gm/pictureimagegenerator.cpp b/gm/pictureimagegenerator.cpp
index 2cc2d6d..2fe7ca2 100644
--- a/gm/pictureimagegenerator.cpp
+++ b/gm/pictureimagegenerator.cpp
@@ -8,17 +8,36 @@
 #include "gm/gm.h"
 #include "include/core/SkBitmap.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorSpace.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkImage.h"
 #include "include/core/SkImageGenerator.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
 #include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
 #include "include/core/SkPicture.h"
 #include "include/core/SkPictureRecorder.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 #include "include/pathops/SkPathOps.h"
 #include "include/utils/SkTextUtils.h"
-#include "src/core/SkFontPriv.h"
 #include "tools/ToolUtils.h"
 
+#include <string.h>
+#include <memory>
+
 static void draw_vector_logo(SkCanvas* canvas, const SkRect& viewBox) {
     constexpr char kSkiaStr[] = "SKIA";
     constexpr SkScalar kGradientPad = .1f;
diff --git a/gm/pictureshader.cpp b/gm/pictureshader.cpp
index 2f72979..85eb316 100644
--- a/gm/pictureshader.cpp
+++ b/gm/pictureshader.cpp
@@ -6,13 +6,23 @@
  */
 
 #include "gm/gm.h"
-#include "tools/ToolUtils.h"
-
 #include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkMatrix.h"
 #include "include/core/SkPaint.h"
 #include "include/core/SkPicture.h"
 #include "include/core/SkPictureRecorder.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
+#include "tools/ToolUtils.h"
 
 static struct {
     SkTileMode tmx;
diff --git a/gm/pictureshadercache.cpp b/gm/pictureshadercache.cpp
index 3273a4a..b0d4990 100644
--- a/gm/pictureshadercache.cpp
+++ b/gm/pictureshadercache.cpp
@@ -6,12 +6,25 @@
  */
 
 #include "gm/gm.h"
-
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorSpace.h"
+#include "include/core/SkImageInfo.h"
 #include "include/core/SkPaint.h"
 #include "include/core/SkPicture.h"
 #include "include/core/SkPictureRecorder.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTileMode.h"
+#include "include/third_party/skcms/skcms.h"
+
+#include <utility>
 
 class PictureShaderCacheGM : public skiagm::GM {
 public:
diff --git a/gm/pictureshadertile.cpp b/gm/pictureshadertile.cpp
index 94abf8d..d7afbe9 100644
--- a/gm/pictureshadertile.cpp
+++ b/gm/pictureshadertile.cpp
@@ -6,11 +6,21 @@
  */
 
 #include "gm/gm.h"
-
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkMatrix.h"
 #include "include/core/SkPaint.h"
 #include "include/core/SkPicture.h"
 #include "include/core/SkPictureRecorder.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 
 constexpr SkScalar kPictureSize = SK_Scalar1;
 constexpr SkScalar kFillSize = 100;
diff --git a/gm/pixelsnap.cpp b/gm/pixelsnap.cpp
index 01a3272..d3522bb 100644
--- a/gm/pixelsnap.cpp
+++ b/gm/pixelsnap.cpp
@@ -6,9 +6,19 @@
  */
 
 #include "gm/gm.h"
-#include "tools/ToolUtils.h"
-
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
+#include "tools/ToolUtils.h"
 
 // This class of GMs test how edges/verts snap near rounding boundaries in device space without
 // anti-aliaing.
diff --git a/gm/plus.cpp b/gm/plus.cpp
index 94c5d7f..5144b46 100644
--- a/gm/plus.cpp
+++ b/gm/plus.cpp
@@ -6,7 +6,12 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkRect.h"
 
 DEF_SIMPLE_GM(PlusMergesAA, canvas, 256, 256) {
     SkPaint p;
diff --git a/gm/points.cpp b/gm/points.cpp
index c9d52c8..6dd0dcb 100644
--- a/gm/points.cpp
+++ b/gm/points.cpp
@@ -4,9 +4,19 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/utils/SkRandom.h"
 
+#include <stddef.h>
+
 namespace skiagm {
 
 class PointsGM : public GM {
diff --git a/gm/poly2poly.cpp b/gm/poly2poly.cpp
index f5f5db3..63d71ca 100644
--- a/gm/poly2poly.cpp
+++ b/gm/poly2poly.cpp
@@ -6,12 +6,24 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
 #include "include/core/SkFontMetrics.h"
-#include "include/core/SkPath.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkTypeface.h"
 #include "include/utils/SkTextUtils.h"
 #include "tools/Resources.h"
-#include "tools/ToolUtils.h"
+
+#include <stdint.h>
 
 class Poly2PolyGM : public skiagm::GM {
 public:
diff --git a/gm/polygonoffset.cpp b/gm/polygonoffset.cpp
index f70ebb0..9703dd0 100644
--- a/gm/polygonoffset.cpp
+++ b/gm/polygonoffset.cpp
@@ -6,10 +6,23 @@
  */
 
 #include "gm/gm.h"
-#include "src/core/SkPathPriv.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPath.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
+#include "include/private/SkTDArray.h"
 #include "src/utils/SkPolyUtils.h"
 #include "tools/ToolUtils.h"
 
+#include <functional>
+#include <memory>
+
 static void create_ngon(int n, SkPoint* pts, SkScalar w, SkScalar h, SkPath::Direction dir) {
     float angleStep = 360.0f / n, angle = 0.0f;
     if ((n % 2) == 1) {
diff --git a/gm/polygons.cpp b/gm/polygons.cpp
index 876b17d..42bf677 100644
--- a/gm/polygons.cpp
+++ b/gm/polygons.cpp
@@ -7,8 +7,14 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPoint.h"
 #include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "include/private/SkTArray.h"
 #include "include/utils/SkRandom.h"
 
diff --git a/gm/postercircle.cpp b/gm/postercircle.cpp
index 49a06ab..52f3ce6 100644
--- a/gm/postercircle.cpp
+++ b/gm/postercircle.cpp
@@ -7,9 +7,20 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFilterQuality.h"
 #include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkMatrix44.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkRRect.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
 #include "tools/timer/AnimTimer.h"
 
diff --git a/gm/quadpaths.cpp b/gm/quadpaths.cpp
index 46763a9..359661f 100644
--- a/gm/quadpaths.cpp
+++ b/gm/quadpaths.cpp
@@ -7,8 +7,16 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
 #include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/utils/SkRandom.h"
 #include "tools/ToolUtils.h"
 
diff --git a/gm/radial_gradient_precision.cpp b/gm/radial_gradient_precision.cpp
index e51370d..8835fa5 100644
--- a/gm/radial_gradient_precision.cpp
+++ b/gm/radial_gradient_precision.cpp
@@ -6,6 +6,14 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 
 // All we're looking for here is that we see a smooth gradient.
diff --git a/gm/readpixels.cpp b/gm/readpixels.cpp
index 44bda99..30f7272 100644
--- a/gm/readpixels.cpp
+++ b/gm/readpixels.cpp
@@ -7,14 +7,30 @@
 
 #include "gm/gm.h"
 #include "include/codec/SkCodec.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
 #include "include/core/SkColorSpace.h"
+#include "include/core/SkData.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPicture.h"
 #include "include/core/SkPictureRecorder.h"
-#include "include/private/SkHalf.h"
-#include "include/private/SkImageInfoPriv.h"
-#include "src/core/SkColorSpacePriv.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkStream.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
+#include "include/third_party/skcms/skcms.h"
 #include "tools/Resources.h"
 
+#include <string.h>
+#include <memory>
+#include <utility>
+
+class GrContext;
+
 static const int kWidth = 64;
 static const int kHeight = 64;
 
diff --git a/gm/recordopts.cpp b/gm/recordopts.cpp
index db553f9..83e30cf 100644
--- a/gm/recordopts.cpp
+++ b/gm/recordopts.cpp
@@ -6,9 +6,18 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
 #include "include/core/SkCanvas.h"
-#include "include/core/SkPath.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorFilter.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPicture.h"
 #include "include/core/SkPictureRecorder.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkColorFilterImageFilter.h"
 #include "include/effects/SkPictureImageFilter.h"
 #include "include/effects/SkTableColorFilter.h"
diff --git a/gm/rectangletexture.cpp b/gm/rectangletexture.cpp
index c32b3f9..71b4bbd 100644
--- a/gm/rectangletexture.cpp
+++ b/gm/rectangletexture.cpp
@@ -8,15 +8,41 @@
 // This test only works with the GPU backend.
 
 #include "gm/gm.h"
-
 #include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFilterQuality.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 #include "include/gpu/GrBackendSurface.h"
 #include "include/gpu/GrContext.h"
+#include "include/gpu/GrTypes.h"
+#include "include/gpu/gl/GrGLFunctions.h"
+#include "include/gpu/gl/GrGLInterface.h"
+#include "include/gpu/gl/GrGLTypes.h"
+#include "include/private/GrTypesPriv.h"
 #include "src/gpu/GrContextPriv.h"
 #include "src/gpu/GrGpu.h"
 #include "src/gpu/gl/GrGLContext.h"
+#include "src/gpu/gl/GrGLDefines.h"
+#include "src/gpu/gl/GrGLUtil.h"
+
+#include <algorithm>
+#include <cstdint>
+#include <memory>
+
+class GrRenderTargetContext;
 
 namespace skiagm {
 class RectangleTexture : public GpuGM {
diff --git a/gm/rects.cpp b/gm/rects.cpp
index 2bf3e7b..4466b4d 100644
--- a/gm/rects.cpp
+++ b/gm/rects.cpp
@@ -6,10 +6,22 @@
  */
 
 #include "gm/gm.h"
-#include "include/core/SkColorFilter.h"
+#include "include/core/SkBlurTypes.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkDrawLooper.h"
+#include "include/core/SkMaskFilter.h"
 #include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkBlurDrawLooper.h"
-#include "include/effects/SkBlurMaskFilter.h"
 #include "include/effects/SkGradientShader.h"
 #include "include/private/SkTArray.h"
 #include "src/core/SkBlurMask.h"
diff --git a/gm/repeated_bitmap.cpp b/gm/repeated_bitmap.cpp
index cc95266..cc9c4dd 100644
--- a/gm/repeated_bitmap.cpp
+++ b/gm/repeated_bitmap.cpp
@@ -6,7 +6,15 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "tools/Resources.h"
 #include "tools/ToolUtils.h"
 
diff --git a/gm/resizeimagefilter.cpp b/gm/resizeimagefilter.cpp
index 7d64f4c..db40866 100644
--- a/gm/resizeimagefilter.cpp
+++ b/gm/resizeimagefilter.cpp
@@ -6,11 +6,23 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
 #include "include/core/SkColor.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
 #include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
 #include "include/effects/SkImageSource.h"
 
+#include <utility>
+
 namespace skiagm {
 
 class ResizeGM : public GM {
diff --git a/gm/roundrects.cpp b/gm/roundrects.cpp
index 61cf2c9..6a984b3 100644
--- a/gm/roundrects.cpp
+++ b/gm/roundrects.cpp
@@ -6,12 +6,19 @@
  */
 
 #include "gm/gm.h"
-#include "include/core/SkColorFilter.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
 #include "include/core/SkRRect.h"
 #include "include/core/SkRect.h"
-#include "include/effects/SkBlurDrawLooper.h"
-#include "include/effects/SkBlurMaskFilter.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 #include "include/private/SkTArray.h"
 #include "include/utils/SkRandom.h"
diff --git a/gm/rrect.cpp b/gm/rrect.cpp
index 51dd501..275afb4 100644
--- a/gm/rrect.cpp
+++ b/gm/rrect.cpp
@@ -7,8 +7,15 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
-#include "include/core/SkPath.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
 #include "include/core/SkRRect.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "tools/ToolUtils.h"
 
 typedef void (*InsetProc)(const SkRRect&, SkScalar dx, SkScalar dy, SkRRect*);
diff --git a/gm/rrectclipdrawpaint.cpp b/gm/rrectclipdrawpaint.cpp
index 86b2c5f..cd1d709 100644
--- a/gm/rrectclipdrawpaint.cpp
+++ b/gm/rrectclipdrawpaint.cpp
@@ -6,7 +6,15 @@
  */
 
 #include "gm/gm.h"
-#include "include/core/SkPath.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRRect.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkTileMode.h"
 #include "include/effects/SkGradientShader.h"
 
 // Exercises code in GrRenderTargetContext that attempts to replace a rrect clip/draw paint with
diff --git a/gm/rrects.cpp b/gm/rrects.cpp
index a0b56ce..2287081 100644
--- a/gm/rrects.cpp
+++ b/gm/rrects.cpp
@@ -6,14 +6,33 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
 #include "include/core/SkRRect.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "include/gpu/GrContext.h"
+#include "include/private/GrSharedEnums.h"
+#include "include/private/GrTypesPriv.h"
 #include "src/gpu/GrCaps.h"
+#include "src/gpu/GrFragmentProcessor.h"
+#include "src/gpu/GrPaint.h"
+#include "src/gpu/GrRenderTargetContext.h"
 #include "src/gpu/GrRenderTargetContextPriv.h"
+#include "src/gpu/effects/GrPorterDuffXferProcessor.h"
 #include "src/gpu/effects/GrRRectEffect.h"
 #include "src/gpu/ops/GrDrawOp.h"
 #include "src/gpu/ops/GrFillRectOp.h"
 
+#include <memory>
+#include <utility>
+
 namespace skiagm {
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/gm/runtimecolorfilter.cpp b/gm/runtimecolorfilter.cpp
index a6c1335..73fc25a 100644
--- a/gm/runtimecolorfilter.cpp
+++ b/gm/runtimecolorfilter.cpp
@@ -7,12 +7,23 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColorFilter.h"
+#include "include/core/SkData.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "src/core/SkColorFilterPriv.h"
 #include "src/core/SkReadBuffer.h"
-#include "src/gpu/effects/GrSkSLFP.h"
+#include "src/core/SkWriteBuffer.h"
 #include "tools/Resources.h"
-#include "tools/ToolUtils.h"
+
+#include <stddef.h>
+#include <utility>
+
+class GrContext;
+class GrRenderTargetContext;
 
 const char* SKSL_TEST_SRC = R"(
     layout(ctype=float) in uniform half b;
diff --git a/gm/samplelocations.cpp b/gm/samplelocations.cpp
index 017a1c3..94a5c0e 100644
--- a/gm/samplelocations.cpp
+++ b/gm/samplelocations.cpp
@@ -6,23 +6,59 @@
  */
 
 #include "gm/gm.h"
-
-#if SK_SUPPORT_GPU
-
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColorSpace.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "include/gpu/GrContext.h"
+#include "include/gpu/GrSamplerState.h"
+#include "include/gpu/GrTypes.h"
 #include "include/private/GrRecordingContext.h"
+#include "include/private/GrSurfaceProxy.h"
+#include "include/private/GrTextureProxy.h"
+#include "include/private/GrTypesPriv.h"
+#include "include/private/SkColorData.h"
+#include "src/gpu/GrBuffer.h"
+#include "src/gpu/GrCaps.h"
 #include "src/gpu/GrClip.h"
+#include "src/gpu/GrColorSpaceXform.h"
 #include "src/gpu/GrContextPriv.h"
+#include "src/gpu/GrGeometryProcessor.h"
+#include "src/gpu/GrGpuCommandBuffer.h"
 #include "src/gpu/GrMemoryPool.h"
+#include "src/gpu/GrMesh.h"
 #include "src/gpu/GrOpFlushState.h"
+#include "src/gpu/GrPaint.h"
+#include "src/gpu/GrPipeline.h"
+#include "src/gpu/GrPrimitiveProcessor.h"
+#include "src/gpu/GrProcessor.h"
+#include "src/gpu/GrProcessorSet.h"
 #include "src/gpu/GrRecordingContextPriv.h"
 #include "src/gpu/GrRenderTargetContext.h"
 #include "src/gpu/GrRenderTargetContextPriv.h"
+#include "src/gpu/GrShaderCaps.h"
+#include "src/gpu/GrShaderVar.h"
+#include "src/gpu/GrUserStencilSettings.h"
+#include "src/gpu/effects/GrPorterDuffXferProcessor.h"
 #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h"
 #include "src/gpu/glsl/GrGLSLGeometryProcessor.h"
+#include "src/gpu/glsl/GrGLSLPrimitiveProcessor.h"
 #include "src/gpu/glsl/GrGLSLProgramBuilder.h"
 #include "src/gpu/glsl/GrGLSLVarying.h"
 #include "src/gpu/glsl/GrGLSLVertexGeoBuilder.h"
+#include "src/gpu/ops/GrDrawOp.h"
+#include "src/gpu/ops/GrOp.h"
+
+#include <memory>
+#include <utility>
+
+class GrAppliedClip;
+class GrGLSLProgramDataManager;
 
 namespace skiagm {
 
@@ -275,5 +311,3 @@
 DEF_GM( return new SampleLocationsGM(GradType::kSW, kBottomLeft_GrSurfaceOrigin); )
 
 }
-
-#endif  // SK_SUPPORT_GPU
diff --git a/gm/samplerstress.cpp b/gm/samplerstress.cpp
index ed829df..0f8c124 100644
--- a/gm/samplerstress.cpp
+++ b/gm/samplerstress.cpp
@@ -6,10 +6,22 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkBlurTypes.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
 #include "include/core/SkMaskFilter.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypeface.h"
 #include "tools/ToolUtils.h"
 
 namespace skiagm {
diff --git a/gm/savelayer.cpp b/gm/savelayer.cpp
index 43bf0c9..5a6a8df 100644
--- a/gm/savelayer.cpp
+++ b/gm/savelayer.cpp
@@ -6,10 +6,42 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorSpace.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMaskFilter.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPicture.h"
+#include "include/core/SkPictureRecorder.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkSurface.h"
+#include "include/core/SkTextBlob.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
+#include "include/effects/SkBlurImageFilter.h"
+#include "include/effects/SkGradientShader.h"
 #include "include/effects/SkShaderMaskFilter.h"
+#include "include/utils/SkRandom.h"
 #include "src/core/SkCanvasPriv.h"
+#include "tools/Resources.h"
 #include "tools/ToolUtils.h"
 
+#include <string.h>
+#include <initializer_list>
+
 // This GM tests out the deprecated Android-specific unclipped saveLayer "feature".
 // In particular, it attempts to compare the performance of unclipped saveLayers with alternatives.
 
@@ -103,8 +135,6 @@
     }
 };
 
-#include "tools/Resources.h"
-
 // Test kInitWithPrevious_SaveLayerFlag by drawing an image, save a layer with the flag, which
 // should seed the layer with the image (from below). Then we punch a hole in the layer and
 // restore with kPlus mode, which should show the mandrill super-bright on the outside, but
@@ -123,12 +153,6 @@
     canvas->restore();
 };
 
-#include "include/core/SkPicture.h"
-#include "include/core/SkPictureRecorder.h"
-#include "include/core/SkSurface.h"
-#include "include/effects/SkBlurImageFilter.h"
-#include "include/effects/SkGradientShader.h"
-
 static void draw_mask(SkCanvas* canvas, int size) {
     const SkScalar cx = size * SK_ScalarHalf,
                    cy = cx;
@@ -334,10 +358,6 @@
     canvas->restore();
 }
 
-#include "include/core/SkFont.h"
-#include "include/core/SkTextBlob.h"
-#include "include/effects/SkGradientShader.h"
-
 static void draw_cell(SkCanvas* canvas, sk_sp<SkTextBlob> blob, SkColor c, SkScalar w, SkScalar h,
                       bool useDrawBehind) {
     SkRect r = SkRect::MakeWH(w, h);
diff --git a/gm/scaledemoji.cpp b/gm/scaledemoji.cpp
index 365d915..fb42ac9 100644
--- a/gm/scaledemoji.cpp
+++ b/gm/scaledemoji.cpp
@@ -6,15 +6,22 @@
  */
 
 #include "gm/gm.h"
-#include "tools/ToolUtils.h"
-
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
 #include "include/core/SkFontMetrics.h"
-#include "include/core/SkStream.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkTextBlob.h"
 #include "include/core/SkTypeface.h"
-#include "include/private/SkTo.h"
-#include "tools/Resources.h"
+#include "tools/ToolUtils.h"
+
+#include <string.h>
+#include <initializer_list>
 
 static sk_sp<SkTextBlob> make_hpos_test_blob_utf8(const char* text, const SkFont& font) {
     constexpr SkTextEncoding enc = SkTextEncoding::kUTF8;
diff --git a/gm/scaledemoji_rendering.cpp b/gm/scaledemoji_rendering.cpp
index f64e7cc..b41204d 100644
--- a/gm/scaledemoji_rendering.cpp
+++ b/gm/scaledemoji_rendering.cpp
@@ -6,14 +6,23 @@
 */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontMetrics.h"
+#include "include/core/SkFontStyle.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypeface.h"
+#include "tools/Resources.h"
 #include "tools/ToolUtils.h"
 
-#include "include/core/SkCanvas.h"
-#include "include/core/SkFontMetrics.h"
-#include "include/core/SkStream.h"
-#include "include/core/SkTypeface.h"
-#include "include/private/SkTo.h"
-#include "tools/Resources.h"
+#include <string.h>
+#include <initializer_list>
 
 namespace skiagm {
 class ScaledEmojiRenderingGM : public GM {
diff --git a/gm/scaledstrokes.cpp b/gm/scaledstrokes.cpp
index e83ec4f..5d5b06a 100644
--- a/gm/scaledstrokes.cpp
+++ b/gm/scaledstrokes.cpp
@@ -7,8 +7,12 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
-#include "include/core/SkRRect.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 
 class ScaledStrokesGM : public skiagm::GM {
 public:
diff --git a/gm/shadermaskfilter.cpp b/gm/shadermaskfilter.cpp
index 5ea72b4..7ef23a4 100644
--- a/gm/shadermaskfilter.cpp
+++ b/gm/shadermaskfilter.cpp
@@ -6,15 +6,40 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkBlurTypes.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkCoverageMode.h"
+#include "include/core/SkFont.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkImageInfo.h"
 #include "include/core/SkMaskFilter.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPath.h"
+#include "include/core/SkPicture.h"
 #include "include/core/SkPictureRecorder.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkString.h"
+#include "include/core/SkSurface.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
+#include "include/effects/SkBlurImageFilter.h"
+#include "include/effects/SkGradientShader.h"
 #include "include/effects/SkShaderMaskFilter.h"
 #include "include/utils/SkTextUtils.h"
 #include "src/core/SkBlendModePriv.h"
+#include "tools/Resources.h"
 #include "tools/ToolUtils.h"
 
+#include <initializer_list>
+
 static void draw_masked_image(SkCanvas* canvas, const SkImage* image, SkScalar x, SkScalar y,
                               const SkImage* mask, sk_sp<SkMaskFilter> outer, SkBlendMode mode) {
     SkMatrix matrix = SkMatrix::MakeScale(SkIntToScalar(image->width()) / mask->width(),
@@ -33,7 +58,6 @@
     canvas->drawImage(image, x, y, &paint);
 }
 
-#include "include/effects/SkGradientShader.h"
 static sk_sp<SkShader> make_shader(const SkRect& r) {
     const SkPoint pts[] = {
         { r.fLeft, r.fTop }, { r.fRight, r.fBottom },
@@ -57,7 +81,6 @@
     canvas->drawOval(r, paint);
 }
 
-#include "tools/Resources.h"
 DEF_SIMPLE_GM_CAN_FAIL(shadermaskfilter_image, canvas, errorMsg, 560, 370) {
     canvas->scale(1.25f, 1.25f);
 
@@ -86,9 +109,6 @@
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-#include "include/core/SkPath.h"
-#include "include/core/SkPictureRecorder.h"
-
 static sk_sp<SkMaskFilter> make_path_mf(const SkPath& path, unsigned alpha) {
     SkPaint paint;
     paint.setAntiAlias(true);
@@ -172,9 +192,6 @@
     canvas->restore();
 }
 
-#include "include/core/SkMaskFilter.h"
-#include "include/core/SkSurface.h"
-#include "include/effects/SkBlurImageFilter.h"
 static sk_sp<SkImage> make_circle_image(SkCanvas* canvas, SkScalar radius, int margin) {
     const int n = SkScalarCeilToInt(radius) * 2 + margin * 2;
     auto      surf = ToolUtils::makeSurface(canvas, SkImageInfo::MakeN32Premul(n, n));
diff --git a/gm/shadertext3.cpp b/gm/shadertext3.cpp
index 37b6485..22252ed 100644
--- a/gm/shadertext3.cpp
+++ b/gm/shadertext3.cpp
@@ -6,10 +6,27 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 #include "tools/ToolUtils.h"
 
+#include <string.h>
+
 namespace skiagm {
 
 static void makebm(SkBitmap* bm, int w, int h) {
diff --git a/gm/shadows.cpp b/gm/shadows.cpp
index f1ef671..da6628e 100644
--- a/gm/shadows.cpp
+++ b/gm/shadows.cpp
@@ -6,9 +6,21 @@
  */
 
 #include "gm/gm.h"
-#include "include/core/SkColorFilter.h"
-#include "include/core/SkMaskFilter.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkDrawLooper.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkBlurDrawLooper.h"
 #include "src/core/SkBlurMask.h"
 
diff --git a/gm/shadowutils.cpp b/gm/shadowutils.cpp
index 0c7bbc1..a9cdc59 100644
--- a/gm/shadowutils.cpp
+++ b/gm/shadowutils.cpp
@@ -7,9 +7,22 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkPoint3.h"
+#include "include/core/SkRRect.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkTypes.h"
+#include "include/private/SkShadowFlags.h"
+#include "include/private/SkTArray.h"
+#include "include/private/SkTDArray.h"
 #include "include/utils/SkShadowUtils.h"
-#include "src/core/SkResourceCache.h"
+
+#include <initializer_list>
 
 void draw_shadow(SkCanvas* canvas, const SkPath& path, SkScalar height, SkColor color,
                  SkPoint3 lightPos, SkScalar lightR, bool isAmbient, uint32_t flags) {
diff --git a/gm/shallowgradient.cpp b/gm/shallowgradient.cpp
index bc565c8..43bee6a 100644
--- a/gm/shallowgradient.cpp
+++ b/gm/shallowgradient.cpp
@@ -6,6 +6,17 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 
 typedef sk_sp<SkShader> (*MakeShaderProc)(const SkColor[], int count, const SkSize&);
diff --git a/gm/shapes.cpp b/gm/shapes.cpp
index 55afb62..edfe4bd 100644
--- a/gm/shapes.cpp
+++ b/gm/shapes.cpp
@@ -6,7 +6,19 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
 #include "include/core/SkRRect.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
+#include "include/private/SkTArray.h"
 #include "include/utils/SkRandom.h"
 
 namespace skiagm {
diff --git a/gm/sharedcorners.cpp b/gm/sharedcorners.cpp
index 64b74d7..7fc8fd1 100644
--- a/gm/sharedcorners.cpp
+++ b/gm/sharedcorners.cpp
@@ -6,9 +6,18 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkMatrix.h"
 #include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
 #include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
+#include "include/utils/SkRandom.h"
 #include "tools/ToolUtils.h"
 
 #include <array>
diff --git a/gm/showmiplevels.cpp b/gm/showmiplevels.cpp
index 7d072b2..fe1a234 100644
--- a/gm/showmiplevels.cpp
+++ b/gm/showmiplevels.cpp
@@ -6,16 +6,23 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorPriv.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPixmap.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/private/SkNx.h"
+#include "src/core/SkMipMap.h"
 #include "tools/ToolUtils.h"
 
-#include "include/core/SkColorPriv.h"
-#include "include/core/SkPaint.h"
-#include "include/core/SkStream.h"
-#include "include/core/SkTypeface.h"
-#include "include/effects/SkGradientShader.h"
-#include "src/core/SkMipMap.h"
-#include "tools/Resources.h"
-#include "tools/Resources.h"
+#include <math.h>
 
 #define SHOW_MIP_COLOR  0xFF000000
 
@@ -51,7 +58,6 @@
     return bm;
 }
 
-#include "include/private/SkNx.h"
 static SkBitmap make_bitmap3(int w, int h) {
     SkBitmap bm;
     bm.allocN32Pixels(w, h);
diff --git a/gm/simple_magnification.cpp b/gm/simple_magnification.cpp
index b942632..3c0a636 100644
--- a/gm/simple_magnification.cpp
+++ b/gm/simple_magnification.cpp
@@ -6,10 +6,28 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkColorPriv.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkImageSource.h"
 #include "include/effects/SkMagnifierImageFilter.h"
+#include "include/gpu/GrTypes.h"
+
+#include <utility>
+
+class GrContext;
 
 static sk_sp<SkImage> make_image(GrContext* context, int size, GrSurfaceOrigin origin) {
     if (context) {
diff --git a/gm/simpleaaclip.cpp b/gm/simpleaaclip.cpp
index b9fc5bf..cb1e184 100644
--- a/gm/simpleaaclip.cpp
+++ b/gm/simpleaaclip.cpp
@@ -6,9 +6,23 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkClipOp.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRegion.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "src/core/SkAAClip.h"
+#include "src/core/SkClipOpPriv.h"
+#include "src/core/SkMask.h"
 #include "tools/ToolUtils.h"
 
 namespace skiagm {
diff --git a/gm/simplerect.cpp b/gm/simplerect.cpp
index 6e7550d..b6238f6 100644
--- a/gm/simplerect.cpp
+++ b/gm/simplerect.cpp
@@ -6,11 +6,17 @@
  */
 
 #include "gm/gm.h"
-#include "include/core/SkPath.h"
-#include "include/effects/SkBlurMaskFilter.h"
-#include "src/core/SkBlurMask.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/utils/SkRandom.h"
 #include "tools/ToolUtils.h"
 
+class AnimTimer;
+
 class SimpleRectGM : public skiagm::GM {
 public:
     SimpleRectGM() {}
diff --git a/gm/skbug1719.cpp b/gm/skbug1719.cpp
index 1c09e57..177b903 100644
--- a/gm/skbug1719.cpp
+++ b/gm/skbug1719.cpp
@@ -6,10 +6,14 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkBlurTypes.h"
+#include "include/core/SkCanvas.h"
 #include "include/core/SkColorFilter.h"
 #include "include/core/SkMaskFilter.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
-#include "tools/ToolUtils.h"
+#include "include/core/SkScalar.h"
 
 /**
  * This test exercises bug 1719. An anti-aliased blurred path is rendered through a soft clip. On
diff --git a/gm/skbug_257.cpp b/gm/skbug_257.cpp
index c70ccc1..d5654f8 100644
--- a/gm/skbug_257.cpp
+++ b/gm/skbug_257.cpp
@@ -6,11 +6,25 @@
  */
 
 #include "gm/gm.h"
-#include "include/core/SkImage.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
 #include "include/core/SkRRect.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
 #include "include/core/SkTextBlob.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypeface.h"
 #include "tools/ToolUtils.h"
 
+#include <string.h>
+
 static void rotated_checkerboard_shader(SkPaint* paint,
                                         SkColor c1,
                                         SkColor c2,
diff --git a/gm/skbug_4868.cpp b/gm/skbug_4868.cpp
index 89eb4c2..24defc8 100644
--- a/gm/skbug_4868.cpp
+++ b/gm/skbug_4868.cpp
@@ -6,6 +6,9 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
 
 // clipRect and drawLine should line up exactly when they use the same point.
 // When SkPDF rounds large floats, this doesn't always happen.
diff --git a/gm/skbug_5321.cpp b/gm/skbug_5321.cpp
index 73fb268..3ad71af 100644
--- a/gm/skbug_5321.cpp
+++ b/gm/skbug_5321.cpp
@@ -6,8 +6,15 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkTextBlob.h"
 
+#include <string.h>
+
 // https://bugs.skia.org/5321
 // two strings should draw the same.  PDF did not.
 DEF_SIMPLE_GM(skbug_5321, canvas, 128, 128) {
diff --git a/gm/skbug_8664.cpp b/gm/skbug_8664.cpp
index 4b24b80..9913743 100644
--- a/gm/skbug_8664.cpp
+++ b/gm/skbug_8664.cpp
@@ -6,7 +6,13 @@
  */
 
 #include "gm/gm.h"
-
+#include "include/core/SkCanvas.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
 #include "tools/Resources.h"
 
 DEF_SIMPLE_GM(skbug_8664, canvas, 830, 550) {
diff --git a/gm/skbug_8955.cpp b/gm/skbug_8955.cpp
index a3c33f7..d85fe6c 100644
--- a/gm/skbug_8955.cpp
+++ b/gm/skbug_8955.cpp
@@ -6,7 +6,7 @@
  */
 
 #include "gm/gm.h"
-
+#include "include/core/SkCanvas.h"
 #include "include/core/SkFont.h"
 #include "include/core/SkPaint.h"
 #include "include/core/SkTextBlob.h"
diff --git a/gm/skinning.cpp b/gm/skinning.cpp
index 7b98653..a21c38c 100644
--- a/gm/skinning.cpp
+++ b/gm/skinning.cpp
@@ -6,12 +6,17 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPoint.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkVertices.h"
 
-#include <iostream>
-#include <vector>
+#include <stdint.h>
 
 using namespace skiagm;
 
diff --git a/gm/smallarc.cpp b/gm/smallarc.cpp
index c81120d..1fbacfe 100644
--- a/gm/smallarc.cpp
+++ b/gm/smallarc.cpp
@@ -6,6 +6,9 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
 
 // this draws a small arc scaled up
diff --git a/gm/smallpaths.cpp b/gm/smallpaths.cpp
index 430c1b2..beb4b6d 100644
--- a/gm/smallpaths.cpp
+++ b/gm/smallpaths.cpp
@@ -6,7 +6,14 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 
 typedef SkScalar (*MakePathProc)(SkPath*);
 
diff --git a/gm/spritebitmap.cpp b/gm/spritebitmap.cpp
index 5459943..1a137c0 100644
--- a/gm/spritebitmap.cpp
+++ b/gm/spritebitmap.cpp
@@ -6,11 +6,20 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
 #include "include/core/SkCanvas.h"
-#include "include/core/SkRSXform.h"
-#include "include/core/SkSurface.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/effects/SkBlurImageFilter.h"
 
+#include <utility>
+
 static void make_bm(SkBitmap* bm) {
     bm->allocN32Pixels(100, 100);
     bm->eraseColor(SK_ColorBLUE);
diff --git a/gm/srcmode.cpp b/gm/srcmode.cpp
index 2ba977f..9012981 100644
--- a/gm/srcmode.cpp
+++ b/gm/srcmode.cpp
@@ -6,9 +6,24 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 #include "tools/ToolUtils.h"
 
diff --git a/gm/srgb.cpp b/gm/srgb.cpp
index 358c138..62c48be 100644
--- a/gm/srgb.cpp
+++ b/gm/srgb.cpp
@@ -8,9 +8,9 @@
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
 #include "include/core/SkColorFilter.h"
-#include "include/core/SkImage.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRefCnt.h"
 #include "tools/Resources.h"
-#include "tools/ToolUtils.h"
 
 DEF_SIMPLE_GM(srgb_colorfilter, canvas, 512, 256*3) {
     auto img = GetResourceAsImage("images/mandrill_256.png");
diff --git a/gm/stlouisarch.cpp b/gm/stlouisarch.cpp
index 931af55..106c47b 100644
--- a/gm/stlouisarch.cpp
+++ b/gm/stlouisarch.cpp
@@ -7,7 +7,11 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/private/SkTArray.h"
 
 namespace skiagm {
diff --git a/gm/stringart.cpp b/gm/stringart.cpp
index 850298b..5b94375 100644
--- a/gm/stringart.cpp
+++ b/gm/stringart.cpp
@@ -7,7 +7,13 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "tools/ToolUtils.h"
 #include "tools/timer/AnimTimer.h"
 
diff --git a/gm/stroke_rect_shader.cpp b/gm/stroke_rect_shader.cpp
index a648c98..596d879 100644
--- a/gm/stroke_rect_shader.cpp
+++ b/gm/stroke_rect_shader.cpp
@@ -6,8 +6,20 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkTileMode.h"
 #include "include/effects/SkGradientShader.h"
 
+#include <initializer_list>
+#include <utility>
+
 namespace skiagm {
 
 // Draw stroked rects (both AA and nonAA) with all the types of joins:
diff --git a/gm/strokedlines.cpp b/gm/strokedlines.cpp
index 7d35138..cf1cbab 100644
--- a/gm/strokedlines.cpp
+++ b/gm/strokedlines.cpp
@@ -6,14 +6,30 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkBlurTypes.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkMaskFilter.h"
+#include "include/core/SkMatrix.h"
 #include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
-#include "include/core/SkPoint3.h"
+#include "include/core/SkPathEffect.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkDashPathEffect.h"
 #include "include/effects/SkGradientShader.h"
+#include "include/private/SkTArray.h"
 #include "tools/ToolUtils.h"
 
+#include <initializer_list>
+
 constexpr int kNumColumns = 6;
 constexpr int kNumRows = 8;
 constexpr int kRadius = 40;  // radius of the snowflake
diff --git a/gm/strokefill.cpp b/gm/strokefill.cpp
index abf0d8e..9b0bb04 100644
--- a/gm/strokefill.cpp
+++ b/gm/strokefill.cpp
@@ -7,7 +7,16 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontStyle.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPath.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkString.h"
 #include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "src/core/SkPathPriv.h"
 #include "src/core/SkTextFormatParams.h"
 #include "tools/ToolUtils.h"
diff --git a/gm/strokerect.cpp b/gm/strokerect.cpp
index 3511664..ce43d8d 100644
--- a/gm/strokerect.cpp
+++ b/gm/strokerect.cpp
@@ -7,7 +7,18 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
+#include "include/private/SkTemplates.h"
+
+#include <float.h>
 
 #define STROKE_WIDTH    SkIntToScalar(20)
 
diff --git a/gm/strokerects.cpp b/gm/strokerects.cpp
index 1415a1d..4a768e3 100644
--- a/gm/strokerects.cpp
+++ b/gm/strokerects.cpp
@@ -5,9 +5,13 @@
  * found in the LICENSE file.
  */
 
-
-
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/utils/SkRandom.h"
 
 namespace skiagm {
diff --git a/gm/strokes.cpp b/gm/strokes.cpp
index 2f5339d..19dba75 100644
--- a/gm/strokes.cpp
+++ b/gm/strokes.cpp
@@ -6,12 +6,25 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPathEffect.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkDashPathEffect.h"
+#include "include/private/SkFloatBits.h"
 #include "include/utils/SkParsePath.h"
 #include "include/utils/SkRandom.h"
 #include "tools/ToolUtils.h"
 
+#include <string.h>
+
 #define W   400
 #define H   400
 #define N   50
diff --git a/gm/stroketext.cpp b/gm/stroketext.cpp
index 15fb798..abcfe37 100644
--- a/gm/stroketext.cpp
+++ b/gm/stroketext.cpp
@@ -6,8 +6,19 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPathEffect.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkTextBlob.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkDashPathEffect.h"
 #include "tools/ToolUtils.h"
 
diff --git a/gm/subsetshader.cpp b/gm/subsetshader.cpp
index a54234e..ce21e75 100644
--- a/gm/subsetshader.cpp
+++ b/gm/subsetshader.cpp
@@ -7,7 +7,14 @@
 
 #include "gm/gm.h"
 #include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
 #include "include/core/SkShader.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
 #include "tools/Resources.h"
 
 DEF_SIMPLE_GM_CAN_FAIL(bitmap_subset_shader, canvas, errorMsg, 256, 256) {
diff --git a/gm/surface.cpp b/gm/surface.cpp
index f39e1a4..bc7d72e 100644
--- a/gm/surface.cpp
+++ b/gm/surface.cpp
@@ -6,12 +6,32 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorSpace.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
 #include "include/core/SkSurfaceProps.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 #include "include/utils/SkTextUtils.h"
 #include "tools/ToolUtils.h"
 
+class GrContext;
+
 #define W 200
 #define H 100
 
diff --git a/gm/tablecolorfilter.cpp b/gm/tablecolorfilter.cpp
index 1b47936..458bb57 100644
--- a/gm/tablecolorfilter.cpp
+++ b/gm/tablecolorfilter.cpp
@@ -6,11 +6,29 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkBlendMode.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorFilter.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkColorFilterImageFilter.h"
 #include "include/effects/SkGradientShader.h"
 #include "include/effects/SkTableColorFilter.h"
 
+#include <math.h>
+#include <utility>
+
 static sk_sp<SkShader> make_shader0(int w, int h) {
     SkPoint pts[] = { {0, 0}, {SkIntToScalar(w), SkIntToScalar(h)} };
     SkColor colors[] = {
diff --git a/gm/tallstretchedbitmaps.cpp b/gm/tallstretchedbitmaps.cpp
index 550efed..a874981 100644
--- a/gm/tallstretchedbitmaps.cpp
+++ b/gm/tallstretchedbitmaps.cpp
@@ -6,10 +6,15 @@
  */
 
 #include "gm/gm.h"
-
+#include "include/core/SkBitmap.h"
 #include "include/core/SkCanvas.h"
-#include "include/core/SkPath.h"
-#include "include/effects/SkGradientShader.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "include/private/SkTo.h"
 #include "include/utils/SkRandom.h"
 
diff --git a/gm/testgradient.cpp b/gm/testgradient.cpp
index 3d1c4d1..9fa3925 100644
--- a/gm/testgradient.cpp
+++ b/gm/testgradient.cpp
@@ -6,9 +6,16 @@
  */
 
 #include "gm/gm.h"
-
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
 #include "include/core/SkRRect.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
 #include "include/effects/SkGradientShader.h"
 
 class TestGradientGM : public skiagm::GM {
diff --git a/gm/text_scale_skew.cpp b/gm/text_scale_skew.cpp
index 36711fd..81e25af 100644
--- a/gm/text_scale_skew.cpp
+++ b/gm/text_scale_skew.cpp
@@ -6,8 +6,14 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkPaint.h"
 #include "include/utils/SkTextUtils.h"
 
+#include <initializer_list>
+
+class SkCanvas;
+
 // http://bug.skia.org/7315
 DEF_SIMPLE_GM(text_scale_skew, canvas, 256, 128) {
     SkPaint p;
diff --git a/gm/textblob.cpp b/gm/textblob.cpp
index 22cad6d..5356aa6 100644
--- a/gm/textblob.cpp
+++ b/gm/textblob.cpp
@@ -8,7 +8,9 @@
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
 #include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
 #include "include/core/SkFontStyle.h"
+#include "include/core/SkFontTypes.h"
 #include "include/core/SkPaint.h"
 #include "include/core/SkPoint.h"
 #include "include/core/SkRect.h"
diff --git a/gm/textblobblockreordering.cpp b/gm/textblobblockreordering.cpp
index e0a1778..692789a 100644
--- a/gm/textblobblockreordering.cpp
+++ b/gm/textblobblockreordering.cpp
@@ -6,10 +6,22 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTextBlob.h"
+#include "include/core/SkTypeface.h"
 #include "tools/ToolUtils.h"
 
-#include "include/core/SkCanvas.h"
-#include "include/core/SkTextBlob.h"
+#include <string.h>
 
 namespace skiagm {
 class TextBlobBlockReordering : public GM {
diff --git a/gm/textblobcolortrans.cpp b/gm/textblobcolortrans.cpp
index 6bd0903..4d0d269 100644
--- a/gm/textblobcolortrans.cpp
+++ b/gm/textblobcolortrans.cpp
@@ -6,14 +6,22 @@
  */
 
 #include "gm/gm.h"
-#include "tools/ToolUtils.h"
-
 #include "include/core/SkCanvas.h"
-#include "include/core/SkStream.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkTextBlob.h"
 #include "include/core/SkTypeface.h"
-#include "include/effects/SkGradientShader.h"
-#include "tools/Resources.h"
+#include "include/core/SkTypes.h"
+#include "tools/ToolUtils.h"
+
+#include <string.h>
 
 namespace skiagm {
 class TextBlobColorTrans : public GM {
diff --git a/gm/textblobgeometrychange.cpp b/gm/textblobgeometrychange.cpp
index 7d6c94e..fa8ce82 100644
--- a/gm/textblobgeometrychange.cpp
+++ b/gm/textblobgeometrychange.cpp
@@ -6,11 +6,20 @@
  */
 
 #include "gm/gm.h"
-#include "tools/ToolUtils.h"
-
 #include "include/core/SkCanvas.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkSurfaceProps.h"
 #include "include/core/SkTextBlob.h"
+#include "include/core/SkTypeface.h"
+#include "tools/ToolUtils.h"
 
 // This tests that we don't try to reuse textblobs from the GPU textblob cache across pixel geometry
 // changes when we have LCD.  crbug/486744
diff --git a/gm/textbloblooper.cpp b/gm/textbloblooper.cpp
index 9b082ba..b67cc21 100644
--- a/gm/textbloblooper.cpp
+++ b/gm/textbloblooper.cpp
@@ -6,18 +6,40 @@
  */
 
 #include "gm/gm.h"
-#include "tools/ToolUtils.h"
-
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkBlurTypes.h"
 #include "include/core/SkCanvas.h"
-#include "include/core/SkGraphics.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorFilter.h"
+#include "include/core/SkDrawLooper.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
 #include "include/core/SkMaskFilter.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPath.h"
+#include "include/core/SkPathEffect.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkTextBlob.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/Sk2DPathEffect.h"
 #include "include/effects/SkColorMatrixFilter.h"
 #include "include/effects/SkGradientShader.h"
 #include "include/effects/SkLayerDrawLooper.h"
-#include "include/utils/SkRandom.h"
+#include "include/private/SkTArray.h"
+#include "include/private/SkTDArray.h"
 #include "src/core/SkBlurMask.h"
+#include "tools/ToolUtils.h"
+
+#include <string.h>
 
 namespace skiagm {
 
diff --git a/gm/textblobmixedsizes.cpp b/gm/textblobmixedsizes.cpp
index 704b063..2986682 100644
--- a/gm/textblobmixedsizes.cpp
+++ b/gm/textblobmixedsizes.cpp
@@ -6,19 +6,33 @@
  */
 
 #include "gm/gm.h"
-#include "tools/ToolUtils.h"
-
+#include "include/core/SkBlurTypes.h"
 #include "include/core/SkCanvas.h"
-#include "include/core/SkImage.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorSpace.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkImageInfo.h"
 #include "include/core/SkMaskFilter.h"
-#include "include/core/SkStream.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkSurfaceProps.h"
 #include "include/core/SkTextBlob.h"
 #include "include/core/SkTypeface.h"
-#include "include/effects/SkGradientShader.h"
+#include "include/core/SkTypes.h"
 #include "include/utils/SkRandom.h"
 #include "src/core/SkBlurMask.h"
 #include "tools/Resources.h"
+#include "tools/ToolUtils.h"
+
+#include <string.h>
+
+class GrContext;
 
 namespace skiagm {
 class TextBlobMixedSizes : public GM {
diff --git a/gm/textblobrandomfont.cpp b/gm/textblobrandomfont.cpp
index 2963997..43ecae3 100644
--- a/gm/textblobrandomfont.cpp
+++ b/gm/textblobrandomfont.cpp
@@ -6,18 +6,31 @@
  */
 
 #include "gm/gm.h"
-#include "tools/ToolUtils.h"
-
 #include "include/core/SkCanvas.h"
-#include "include/core/SkStream.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorSpace.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontStyle.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkSurfaceProps.h"
 #include "include/core/SkTextBlob.h"
 #include "include/core/SkTypeface.h"
-#include "include/effects/SkGradientShader.h"
-#include "tools/Resources.h"
+#include "include/gpu/GrContext.h"
+#include "tools/ToolUtils.h"
 #include "tools/fonts/RandomScalerContext.h"
 
-#include "include/gpu/GrContext.h"
+#include <string.h>
+#include <utility>
+
+class GrRenderTargetContext;
 
 namespace skiagm {
 class TextBlobRandomFont : public GpuGM {
diff --git a/gm/textblobshader.cpp b/gm/textblobshader.cpp
index 49e98c3..933a92b 100644
--- a/gm/textblobshader.cpp
+++ b/gm/textblobshader.cpp
@@ -6,15 +6,27 @@
  */
 
 #include "gm/gm.h"
-#include "tools/ToolUtils.h"
-
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPoint.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkTextBlob.h"
+#include "include/core/SkTileMode.h"
 #include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 #include "include/private/SkTDArray.h"
+#include "tools/ToolUtils.h"
+
+#include <math.h>
+#include <string.h>
 
 // This GM exercises drawTextBlob offset vs. shader space behavior.
 class TextBlobShaderGM : public skiagm::GM {
diff --git a/gm/textblobtransforms.cpp b/gm/textblobtransforms.cpp
index 10e21c9..2c45819 100644
--- a/gm/textblobtransforms.cpp
+++ b/gm/textblobtransforms.cpp
@@ -6,14 +6,21 @@
  */
 
 #include "gm/gm.h"
-#include "tools/ToolUtils.h"
-
 #include "include/core/SkCanvas.h"
-#include "include/core/SkStream.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkTextBlob.h"
 #include "include/core/SkTypeface.h"
-#include "include/effects/SkGradientShader.h"
-#include "tools/Resources.h"
+#include "tools/ToolUtils.h"
+
+#include <string.h>
 
 namespace skiagm {
 class TextBlobTransforms : public GM {
diff --git a/gm/textblobuseaftergpufree.cpp b/gm/textblobuseaftergpufree.cpp
index fd3f36f..0cefcd1 100644
--- a/gm/textblobuseaftergpufree.cpp
+++ b/gm/textblobuseaftergpufree.cpp
@@ -6,12 +6,21 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTextBlob.h"
+#include "include/core/SkTypeface.h"
+#include "include/gpu/GrContext.h"
 #include "tools/ToolUtils.h"
 
-#include "include/core/SkCanvas.h"
-#include "include/core/SkSurface.h"
-#include "include/core/SkTextBlob.h"
-#include "include/gpu/GrContext.h"
+#include <string.h>
+
+class GrRenderTargetContext;
 
 // This tests that we correctly regenerate textblobs after freeing all gpu resources crbug/491350
 namespace skiagm {
diff --git a/gm/texteffects.cpp b/gm/texteffects.cpp
index 1570d0d..6c82c2d 100644
--- a/gm/texteffects.cpp
+++ b/gm/texteffects.cpp
@@ -6,16 +6,25 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontStyle.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPath.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkTextBlob.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
+#include "include/private/SkTDArray.h"
+#include "include/private/SkTemplates.h"
+#include "include/private/SkTo.h"
 #include "tools/ToolUtils.h"
 
-#include "include/core/SkTextBlob.h"
-#include "include/effects/SkBlurMaskFilter.h"
-#include "include/private/SkTo.h"
-#include "src/core/SkBlurMask.h"
-#include "src/core/SkReadBuffer.h"
-#include "src/core/SkWriteBuffer.h"
-
-#include "include/effects/Sk2DPathEffect.h"
+#include <string.h>
 
 static SkPath create_underline(const SkTDArray<SkScalar>& intersections,
         SkScalar last, SkScalar finalPos,
diff --git a/gm/texturedomaineffect.cpp b/gm/texturedomaineffect.cpp
index 86794eb..a963f68 100644
--- a/gm/texturedomaineffect.cpp
+++ b/gm/texturedomaineffect.cpp
@@ -8,18 +8,41 @@
 // This test only works with the GPU backend.
 
 #include "gm/gm.h"
-
 #include "include/core/SkBitmap.h"
-#include "include/core/SkSurface.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 #include "include/gpu/GrContext.h"
+#include "include/gpu/GrSamplerState.h"
+#include "include/gpu/GrTypes.h"
+#include "include/private/GrTextureProxy.h"
+#include "include/private/GrTypesPriv.h"
+#include "include/private/SkTArray.h"
+#include "src/gpu/GrCaps.h"
 #include "src/gpu/GrContextPriv.h"
+#include "src/gpu/GrFragmentProcessor.h"
+#include "src/gpu/GrPaint.h"
 #include "src/gpu/GrProxyProvider.h"
+#include "src/gpu/GrRenderTargetContext.h"
 #include "src/gpu/GrRenderTargetContextPriv.h"
+#include "src/gpu/effects/GrPorterDuffXferProcessor.h"
 #include "src/gpu/effects/GrTextureDomain.h"
 #include "src/gpu/ops/GrDrawOp.h"
 #include "src/gpu/ops/GrFillRectOp.h"
 
+#include <memory>
+#include <utility>
+
 namespace skiagm {
 /**
  * This GM directly exercises GrTextureDomainEffect.
diff --git a/gm/thinconcavepaths.cpp b/gm/thinconcavepaths.cpp
index 7494bb0..47b20d2 100644
--- a/gm/thinconcavepaths.cpp
+++ b/gm/thinconcavepaths.cpp
@@ -7,7 +7,9 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkScalar.h"
 
 namespace {
 // Test thin stroked rect (stroked "by hand", not by stroking).
diff --git a/gm/thinrects.cpp b/gm/thinrects.cpp
index e66b71f..ad0ba7d 100644
--- a/gm/thinrects.cpp
+++ b/gm/thinrects.cpp
@@ -6,6 +6,13 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 
 namespace skiagm {
 
diff --git a/gm/thinstrokedrects.cpp b/gm/thinstrokedrects.cpp
index 3d243d6..085ec51 100644
--- a/gm/thinstrokedrects.cpp
+++ b/gm/thinstrokedrects.cpp
@@ -6,6 +6,14 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 
 namespace skiagm {
 
diff --git a/gm/tiledscaledbitmap.cpp b/gm/tiledscaledbitmap.cpp
index 89430e0..0f28c1e 100644
--- a/gm/tiledscaledbitmap.cpp
+++ b/gm/tiledscaledbitmap.cpp
@@ -6,12 +6,16 @@
  */
 
 #include "gm/gm.h"
-
 #include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkMatrix.h"
 #include "include/core/SkPaint.h"
 #include "include/core/SkShader.h"
-#include "include/core/SkStream.h"
-#include "tools/Resources.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
 
  /***
   *
diff --git a/gm/tileimagefilter.cpp b/gm/tileimagefilter.cpp
index b2c5b19..6b82c04 100644
--- a/gm/tileimagefilter.cpp
+++ b/gm/tileimagefilter.cpp
@@ -6,13 +6,27 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorFilter.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/effects/SkColorFilterImageFilter.h"
-#include "include/effects/SkColorMatrixFilter.h"
 #include "include/effects/SkImageSource.h"
 #include "include/effects/SkTileImageFilter.h"
 #include "tools/ToolUtils.h"
 
+#include <stddef.h>
+#include <utility>
+
 #define WIDTH 400
 #define HEIGHT 200
 #define MARGIN 12
diff --git a/gm/tilemodes.cpp b/gm/tilemodes.cpp
index 79e9f20..6cdabef 100644
--- a/gm/tilemodes.cpp
+++ b/gm/tilemodes.cpp
@@ -4,20 +4,32 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
-#include "gm/gm.h"
-#include "include/core/SkColorFilter.h"
-#include "include/core/SkMaskFilter.h"
-#include "include/core/SkPath.h"
-#include "include/core/SkRegion.h"
-#include "include/core/SkShader.h"
-#include "include/utils/SkTextUtils.h"
-#include "src/utils/SkUTF.h"
-#include "tools/ToolUtils.h"
-// effects
-#include "include/effects/SkBlurDrawLooper.h"
-#include "include/effects/SkGradientShader.h"
 
+#include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
+#include "include/effects/SkGradientShader.h"
+#include "include/utils/SkTextUtils.h"
 #include "tools/Resources.h"
+#include "tools/ToolUtils.h"
+
+#include <functional>
 
 static void makebm(SkBitmap* bm, SkColorType ct, int w, int h) {
     bm->allocPixels(SkImageInfo::Make(w, h, ct, kPremul_SkAlphaType));
@@ -258,8 +270,6 @@
 
 ////////////////////
 
-#include "include/effects/SkGradientShader.h"
-
 DEF_SIMPLE_GM(tilemode_decal, canvas, 720, 1100) {
     auto img = GetResourceAsImage("images/mandrill_128.png");
     SkPaint bgpaint;
diff --git a/gm/tilemodes_alpha.cpp b/gm/tilemodes_alpha.cpp
index 5f73eef..e3b7b8d 100644
--- a/gm/tilemodes_alpha.cpp
+++ b/gm/tilemodes_alpha.cpp
@@ -1,7 +1,17 @@
 // Copyright 2019 Google LLC.
 // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
+
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkTileMode.h"
 #include "tools/Resources.h"
+
 // http://crbug.com/957275
 DEF_SIMPLE_GM(tilemodes_alpha, canvas, 512, 512) {
     sk_sp<SkImage> image = GetResourceAsImage("images/mandrill_64.png");
diff --git a/gm/tilemodes_scaled.cpp b/gm/tilemodes_scaled.cpp
index 720ba00..2b41a1d 100644
--- a/gm/tilemodes_scaled.cpp
+++ b/gm/tilemodes_scaled.cpp
@@ -4,19 +4,28 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
-#include "gm/gm.h"
-#include "include/core/SkColorFilter.h"
-#include "include/core/SkMaskFilter.h"
-#include "include/core/SkPath.h"
-#include "include/core/SkRegion.h"
-#include "include/core/SkShader.h"
-#include "include/utils/SkTextUtils.h"
-#include "src/utils/SkUTF.h"
-#include "tools/ToolUtils.h"
 
-// effects
-#include "include/effects/SkBlurDrawLooper.h"
+#include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
+#include "include/utils/SkTextUtils.h"
+#include "tools/ToolUtils.h"
 
 static void makebm(SkBitmap* bm, SkColorType ct, int w, int h) {
     bm->allocPixels(SkImageInfo::Make(w, h, ct, kPremul_SkAlphaType));
diff --git a/gm/tinybitmap.cpp b/gm/tinybitmap.cpp
index c8ee8b3..0f7a5b4 100644
--- a/gm/tinybitmap.cpp
+++ b/gm/tinybitmap.cpp
@@ -4,12 +4,16 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
 #include "include/core/SkCanvas.h"
 #include "include/core/SkColorPriv.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkShader.h"
-#include "src/utils/SkUTF.h"
-#include "tools/ToolUtils.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
 
 namespace skiagm {
 
diff --git a/gm/transparency.cpp b/gm/transparency.cpp
index a2f5f81..c0d2be7 100644
--- a/gm/transparency.cpp
+++ b/gm/transparency.cpp
@@ -6,7 +6,18 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
 
 static void make_transparency(SkCanvas* canvas, SkScalar width, SkScalar height) {
diff --git a/gm/trickycubicstrokes.cpp b/gm/trickycubicstrokes.cpp
index 781601f..813116d 100644
--- a/gm/trickycubicstrokes.cpp
+++ b/gm/trickycubicstrokes.cpp
@@ -7,9 +7,15 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkMatrix.h"
 #include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
-#include "include/core/SkStrokeRec.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "src/core/SkGeometry.h"
 
 static constexpr float kStrokeWidth = 40;
diff --git a/gm/typeface.cpp b/gm/typeface.cpp
index d9a702f..a34fbb2 100644
--- a/gm/typeface.cpp
+++ b/gm/typeface.cpp
@@ -8,15 +8,24 @@
 #include "gm/gm.h"
 #include "include/core/SkBlurTypes.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkFont.h"
 #include "include/core/SkFontStyle.h"
+#include "include/core/SkFontTypes.h"
 #include "include/core/SkMaskFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
 #include "include/core/SkString.h"
-#include "include/core/SkSurfaceProps.h"
 #include "include/core/SkTextBlob.h"
 #include "include/core/SkTypeface.h"
 #include "include/core/SkTypes.h"
+#include "include/private/SkTemplates.h"
 #include "tools/Resources.h"
-#include "tools/ToolUtils.h"
+
+#include <string.h>
+#include <utility>
 
 static void getGlyphPositions(const SkFont& font, const uint16_t glyphs[],
                              int count, SkScalar x, SkScalar y, SkPoint pos[]) {
diff --git a/gm/unpremul.cpp b/gm/unpremul.cpp
index 3d1bbaa..25ddae5 100644
--- a/gm/unpremul.cpp
+++ b/gm/unpremul.cpp
@@ -6,7 +6,15 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
 #include "include/core/SkColor.h"
+#include "include/core/SkColorSpace.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPaint.h"
+
+#include <string.h>
 
 DEF_SIMPLE_GM(unpremul, canvas, 200, 200) {
     const SkColor color = 0xbf400000;
diff --git a/gm/variedtext.cpp b/gm/variedtext.cpp
index 21ff63d..67388e0 100644
--- a/gm/variedtext.cpp
+++ b/gm/variedtext.cpp
@@ -7,8 +7,19 @@
 
 #include "gm/gm.h"
 #include "include/core/SkCanvas.h"
-#include "include/core/SkPath.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontStyle.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/utils/SkRandom.h"
 #include "tools/ToolUtils.h"
 
diff --git a/gm/vertices.cpp b/gm/vertices.cpp
index 796de47..866d046 100644
--- a/gm/vertices.cpp
+++ b/gm/vertices.cpp
@@ -6,13 +6,29 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkColorFilter.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypes.h"
 #include "include/core/SkVertices.h"
 #include "include/effects/SkGradientShader.h"
+#include "include/private/SkTDArray.h"
 #include "include/utils/SkRandom.h"
 #include "src/shaders/SkLocalMatrixShader.h"
 
+#include <initializer_list>
+#include <utility>
+
 static constexpr SkScalar kShaderSize = 40;
 static sk_sp<SkShader> make_shader1(SkScalar shaderScale) {
     const SkColor colors[] = {
diff --git a/gm/verylargebitmap.cpp b/gm/verylargebitmap.cpp
index 0673b4d..70cd745 100644
--- a/gm/verylargebitmap.cpp
+++ b/gm/verylargebitmap.cpp
@@ -6,10 +6,23 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBlendMode.h"
 #include "include/core/SkCanvas.h"
-#include "include/core/SkPath.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorSpace.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPicture.h"
 #include "include/core/SkPictureRecorder.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTileMode.h"
 #include "include/effects/SkGradientShader.h"
 
 static void draw(SkCanvas* canvas, int width, int height, SkColor colors[2]) {
diff --git a/gm/wacky_yuv_formats.cpp b/gm/wacky_yuv_formats.cpp
index 945b8a9..e5c679b 100644
--- a/gm/wacky_yuv_formats.cpp
+++ b/gm/wacky_yuv_formats.cpp
@@ -6,20 +6,54 @@
  */
 
 #include "gm/gm.h"
-#include "tools/ToolUtils.h"
-
+#include "include/core/SkBitmap.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkColorFilter.h"
 #include "include/core/SkColorPriv.h"
+#include "include/core/SkColorSpace.h"
+#include "include/core/SkFilterQuality.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkFontStyle.h"
+#include "include/core/SkFontTypes.h"
+#include "include/core/SkImage.h"
 #include "include/core/SkImageGenerator.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
 #include "include/core/SkPath.h"
+#include "include/core/SkPixmap.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/core/SkYUVAIndex.h"
-#include "include/utils/SkTextUtils.h"
-
-#if SK_SUPPORT_GPU
+#include "include/core/SkYUVASizeInfo.h"
 #include "include/gpu/GrBackendSurface.h"
+#include "include/gpu/GrConfig.h"
+#include "include/gpu/GrContext.h"
+#include "include/gpu/GrTypes.h"
+#include "include/private/GrTypesPriv.h"
+#include "include/private/SkTArray.h"
+#include "include/private/SkTDArray.h"
+#include "include/private/SkTemplates.h"
+#include "include/utils/SkTextUtils.h"
 #include "src/gpu/GrContextPriv.h"
 #include "src/gpu/GrGpu.h"
-#include "src/image/SkImage_GpuYUVA.h"
-#endif
+#include "tools/ToolUtils.h"
+
+#include <math.h>
+#include <string.h>
+#include <initializer_list>
+#include <memory>
+#include <utility>
+
+class GrRenderTargetContext;
 
 static const int kTileWidthHeight = 128;
 static const int kLabelWidth = 64;
diff --git a/gm/windowrectangles.cpp b/gm/windowrectangles.cpp
index 308d67b..b58f6f4 100644
--- a/gm/windowrectangles.cpp
+++ b/gm/windowrectangles.cpp
@@ -6,20 +6,45 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkClipOp.h"
+#include "include/core/SkColorSpace.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
 #include "include/core/SkRRect.h"
-#include "include/utils/SkTextUtils.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkRegion.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
+#include "include/gpu/GrBackendSurface.h"
+#include "include/gpu/GrContext.h"
+#include "include/private/GrTextureProxy.h"
+#include "include/private/GrTypesPriv.h"
+#include "include/private/SkColorData.h"
+#include "src/core/SkClipOpPriv.h"
 #include "src/core/SkClipStack.h"
-#include "tools/ToolUtils.h"
-
 #include "src/gpu/GrAppliedClip.h"
 #include "src/gpu/GrCaps.h"
+#include "src/gpu/GrClip.h"
 #include "src/gpu/GrContextPriv.h"
+#include "src/gpu/GrFixedClip.h"
+#include "src/gpu/GrFragmentProcessor.h"
+#include "src/gpu/GrPaint.h"
 #include "src/gpu/GrReducedClip.h"
 #include "src/gpu/GrRenderTargetContext.h"
 #include "src/gpu/GrRenderTargetContextPriv.h"
-#include "src/gpu/GrResourceProvider.h"
 #include "src/gpu/GrStencilClip.h"
+#include "src/gpu/GrUserStencilSettings.h"
 #include "src/gpu/effects/GrTextureDomain.h"
+#include "tools/ToolUtils.h"
+
+#include <utility>
+
+class GrRecordingContext;
 
 constexpr static SkIRect kDeviceRect = {0, 0, 600, 600};
 constexpr static SkIRect kCoverRect = {50, 50, 550, 550};
diff --git a/gm/xfermodeimagefilter.cpp b/gm/xfermodeimagefilter.cpp
index ac781e5..c2292d6 100644
--- a/gm/xfermodeimagefilter.cpp
+++ b/gm/xfermodeimagefilter.cpp
@@ -6,13 +6,27 @@
  */
 
 #include "gm/gm.h"
+#include "include/core/SkBitmap.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkImage.h"
+#include "include/core/SkImageFilter.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkArithmeticImageFilter.h"
 #include "include/effects/SkImageSource.h"
 #include "include/effects/SkOffsetImageFilter.h"
 #include "include/effects/SkXfermodeImageFilter.h"
 #include "tools/ToolUtils.h"
 
+#include <utility>
+
 #define WIDTH 600
 #define HEIGHT 700
 #define MARGIN 12
diff --git a/gm/xfermodes.cpp b/gm/xfermodes.cpp
index 72118b5..9b5fcc6 100644
--- a/gm/xfermodes.cpp
+++ b/gm/xfermodes.cpp
@@ -7,7 +7,21 @@
 
 #include "gm/gm.h"
 #include "include/core/SkBitmap.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/utils/SkTextUtils.h"
 #include "tools/ToolUtils.h"
 
diff --git a/gm/xfermodes2.cpp b/gm/xfermodes2.cpp
index 4df9e57..e5d3b1f 100644
--- a/gm/xfermodes2.cpp
+++ b/gm/xfermodes2.cpp
@@ -4,13 +4,28 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm/gm.h"
 #include "include/core/SkBitmap.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkColorPriv.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
 #include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypeface.h"
 #include "include/utils/SkTextUtils.h"
-#include "src/core/SkBlendModePriv.h"
 #include "tools/ToolUtils.h"
+#include <stdint.h>
+#include <string.h>
 
 namespace skiagm {
 
diff --git a/gm/xfermodes3.cpp b/gm/xfermodes3.cpp
index eb70e02..2977428 100644
--- a/gm/xfermodes3.cpp
+++ b/gm/xfermodes3.cpp
@@ -7,14 +7,31 @@
 
 #include "gm/gm.h"
 #include "include/core/SkBitmap.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColor.h"
 #include "include/core/SkColorPriv.h"
+#include "include/core/SkColorSpace.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkShader.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
+#include "include/core/SkTileMode.h"
+#include "include/core/SkTypeface.h"
+#include "include/core/SkTypes.h"
 #include "include/effects/SkGradientShader.h"
-#include "include/gpu/GrContext.h"
-#include "include/utils/SkTextUtils.h"
-#include "src/core/SkBlendModePriv.h"
 #include "tools/ToolUtils.h"
 
+#include <string.h>
+
 namespace skiagm {
 
 /**
diff --git a/gm/yuvtorgbeffect.cpp b/gm/yuvtorgbeffect.cpp
index badf4e2..f525092 100644
--- a/gm/yuvtorgbeffect.cpp
+++ b/gm/yuvtorgbeffect.cpp
@@ -8,20 +8,40 @@
 // This test only works with the GPU backend.
 
 #include "gm/gm.h"
-
 #include "include/core/SkBitmap.h"
-#include "include/effects/SkGradientShader.h"
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
+#include "include/core/SkYUVAIndex.h"
 #include "include/gpu/GrContext.h"
+#include "include/gpu/GrSamplerState.h"
 #include "include/private/GrTextureProxy.h"
+#include "include/private/GrTypesPriv.h"
 #include "src/gpu/GrClip.h"
 #include "src/gpu/GrContextPriv.h"
+#include "src/gpu/GrFragmentProcessor.h"
+#include "src/gpu/GrPaint.h"
 #include "src/gpu/GrProxyProvider.h"
+#include "src/gpu/GrRenderTargetContext.h"
 #include "src/gpu/GrRenderTargetContextPriv.h"
-#include "src/gpu/SkGr.h"
+#include "src/gpu/effects/GrPorterDuffXferProcessor.h"
 #include "src/gpu/effects/GrYUVtoRGBEffect.h"
 #include "src/gpu/ops/GrDrawOp.h"
 #include "src/gpu/ops/GrFillRectOp.h"
 
+#include <memory>
+#include <utility>
+
+class SkCanvas;
+
 #define YSIZE 8
 #define USIZE 4
 #define VSIZE 4