IWYU: 'core' target, files starting A-C.

TBR=reed@google.com
Verbal lgtm, does not change API.

Committed: https://skia.googlesource.com/skia/+/7403d87db8e43d4c2b5b25ac22a0ebc22bd09d69

Review URL: https://codereview.chromium.org/1265033002
diff --git a/bench/AlternatingColorPatternBench.cpp b/bench/AlternatingColorPatternBench.cpp
index 8484954..cbf5034 100644
--- a/bench/AlternatingColorPatternBench.cpp
+++ b/bench/AlternatingColorPatternBench.cpp
@@ -9,6 +9,7 @@
 #include "SkCanvas.h"
 #include "SkGradientShader.h"
 #include "SkPaint.h"
+#include "SkPath.h"
 #include "SkString.h"
 
 enum ColorPattern {
diff --git a/bench/BezierBench.cpp b/bench/BezierBench.cpp
index ec83d95..73c9cb5 100755
--- a/bench/BezierBench.cpp
+++ b/bench/BezierBench.cpp
@@ -8,6 +8,7 @@
 #include "Benchmark.h"
 #include "SkCanvas.h"
 #include "SkPaint.h"
+#include "SkPath.h"
 #include "SkString.h"
 
 struct BezierRec {
diff --git a/bench/ChartBench.cpp b/bench/ChartBench.cpp
index 0cc02b0..61f97a2 100644
--- a/bench/ChartBench.cpp
+++ b/bench/ChartBench.cpp
@@ -8,7 +8,9 @@
 #include "Benchmark.h"
 #include "SkCanvas.h"
 #include "SkPaint.h"
+#include "SkPath.h"
 #include "SkRandom.h"
+#include "SkTDArray.h"
 
 /**
  * This is a conversion of samplecode/SampleChart.cpp into a bench. It sure would be nice to be able
diff --git a/bench/HairlinePathBench.cpp b/bench/HairlinePathBench.cpp
index e421ce0..0e12d70 100644
--- a/bench/HairlinePathBench.cpp
+++ b/bench/HairlinePathBench.cpp
@@ -8,6 +8,7 @@
 #include "Benchmark.h"
 #include "SkCanvas.h"
 #include "SkPaint.h"
+#include "SkPath.h"
 #include "SkRandom.h"
 #include "SkShader.h"
 #include "SkString.h"
diff --git a/bench/PathBench.cpp b/bench/PathBench.cpp
index ffec90b..f2e84c2 100644
--- a/bench/PathBench.cpp
+++ b/bench/PathBench.cpp
@@ -1,15 +1,16 @@
-
 /*
  * Copyright 2011 Google Inc.
  *
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "Benchmark.h"
 #include "SkBitmap.h"
 #include "SkCanvas.h"
 #include "SkColorPriv.h"
 #include "SkPaint.h"
+#include "SkPath.h"
 #include "SkRandom.h"
 #include "SkShader.h"
 #include "SkString.h"
diff --git a/bench/PathIterBench.cpp b/bench/PathIterBench.cpp
index bbc3c03..2da2594 100644
--- a/bench/PathIterBench.cpp
+++ b/bench/PathIterBench.cpp
@@ -10,6 +10,7 @@
 #include "SkCanvas.h"
 #include "SkColorPriv.h"
 #include "SkPaint.h"
+#include "SkPath.h"
 #include "SkRandom.h"
 #include "SkShader.h"
 #include "SkString.h"
diff --git a/bench/RectoriBench.cpp b/bench/RectoriBench.cpp
index b777fbe..8752a34 100644
--- a/bench/RectoriBench.cpp
+++ b/bench/RectoriBench.cpp
@@ -10,6 +10,7 @@
 #include "SkCanvas.h"
 #include "SkLayerDrawLooper.h"
 #include "SkPaint.h"
+#include "SkPath.h"
 #include "SkRandom.h"
 
 // This bench replicates a problematic use case of a draw looper used
diff --git a/bench/SKPBench.h b/bench/SKPBench.h
index e1c66bf..05b5857 100644
--- a/bench/SKPBench.h
+++ b/bench/SKPBench.h
@@ -11,6 +11,9 @@
 #include "Benchmark.h"
 #include "SkCanvas.h"
 #include "SkPicture.h"
+#include "SkTDArray.h"
+
+class SkSurface;
 
 /**
  * Runs an SkPicture as a benchmark by repeatedly drawing it scaled inside a device clip.
diff --git a/gm/aarectmodes.cpp b/gm/aarectmodes.cpp
index 7cf5a83..e0df7d8 100644
--- a/gm/aarectmodes.cpp
+++ b/gm/aarectmodes.cpp
@@ -8,6 +8,7 @@
 #include "gm.h"
 #include "SkCanvas.h"
 #include "SkColorPriv.h"
+#include "SkPath.h"
 #include "SkShader.h"
 
 static void test4(SkCanvas* canvas) {
diff --git a/gm/aaxfermodes.cpp b/gm/aaxfermodes.cpp
index 8e66b43..d33423a 100644
--- a/gm/aaxfermodes.cpp
+++ b/gm/aaxfermodes.cpp
@@ -7,6 +7,7 @@
  */
 #include "gm.h"
 #include "SkArithmeticMode.h"
+#include "SkPath.h"
 #include "SkShader.h"
 #include "SkXfermode.h"
 
diff --git a/gm/beziers.cpp b/gm/beziers.cpp
index 3dd8fa7..68960ed 100755
--- a/gm/beziers.cpp
+++ b/gm/beziers.cpp
@@ -6,6 +6,7 @@
  */
 
 #include "gm.h"
+#include "SkPath.h"
 #include "SkRandom.h"
 
 #define W   400
diff --git a/gm/bigblurs.cpp b/gm/bigblurs.cpp
index a92c7fe..5500005 100644
--- a/gm/bigblurs.cpp
+++ b/gm/bigblurs.cpp
@@ -1,4 +1,3 @@
-
 /*
  * Copyright 2013 Google Inc.
  *
@@ -9,6 +8,7 @@
 #include "gm.h"
 #include "SkBlurMask.h"
 #include "SkBlurMaskFilter.h"
+#include "SkPath.h"
 
 namespace skiagm {
 
diff --git a/gm/bigmatrix.cpp b/gm/bigmatrix.cpp
index abe0f4e..c7c3b0d 100644
--- a/gm/bigmatrix.cpp
+++ b/gm/bigmatrix.cpp
@@ -1,13 +1,14 @@
-
 /*
  * Copyright 2012 Google Inc.
  *
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm.h"
 
 #include "SkColorPriv.h"
+#include "SkPath.h"
 #include "SkShader.h"
 
 namespace skiagm {
diff --git a/gm/bitmaprecttest.cpp b/gm/bitmaprecttest.cpp
index 6f2ccf2..630c90c 100644
--- a/gm/bitmaprecttest.cpp
+++ b/gm/bitmaprecttest.cpp
@@ -7,6 +7,7 @@
 
 #include "gm.h"
 #include "SkCanvas.h"
+#include "SkPath.h"
 
 static void make_bm(SkBitmap* bm) {
     bm->allocN32Pixels(60, 60);
diff --git a/gm/blurs.cpp b/gm/blurs.cpp
index b1af685..8f95f00 100644
--- a/gm/blurs.cpp
+++ b/gm/blurs.cpp
@@ -8,6 +8,7 @@
 #include "gm.h"
 #include "SkBlurMask.h"
 #include "SkBlurMaskFilter.h"
+#include "SkPath.h"
 
 class BlursGM : public skiagm::GM {
 public:
diff --git a/gm/complexclip2.cpp b/gm/complexclip2.cpp
index 9357884..4314619 100644
--- a/gm/complexclip2.cpp
+++ b/gm/complexclip2.cpp
@@ -10,6 +10,8 @@
 #include "SkCanvas.h"
 #include "SkPath.h"
 #include "SkRandom.h"
+#include "SkRect.h"
+#include "SkRRect.h"
 
 namespace skiagm {
 
diff --git a/gm/concavepaths.cpp b/gm/concavepaths.cpp
index 46b2ef4..37635f8 100644
--- a/gm/concavepaths.cpp
+++ b/gm/concavepaths.cpp
@@ -7,6 +7,7 @@
 
 #include "gm.h"
 #include "SkCanvas.h"
+#include "SkPath.h"
 
 #define WIDTH 400
 #define HEIGHT 600
diff --git a/gm/conicpaths.cpp b/gm/conicpaths.cpp
index 717dd8e..2bdd1f8 100644
--- a/gm/conicpaths.cpp
+++ b/gm/conicpaths.cpp
@@ -7,6 +7,7 @@
 
 #include "gm.h"
 #include "SkCanvas.h"
+#include "SkPath.h"
 #include "SkTArray.h"
 
 class ConicPathsGM : public skiagm::GM {
diff --git a/gm/convexpaths.cpp b/gm/convexpaths.cpp
index 889d65b..4180884 100644
--- a/gm/convexpaths.cpp
+++ b/gm/convexpaths.cpp
@@ -6,6 +6,7 @@
  * found in the LICENSE file.
  */
 #include "gm.h"
+#include "SkPath.h"
 #include "SkRandom.h"
 #include "SkTArray.h"
 
diff --git a/gm/convexpolyclip.cpp b/gm/convexpolyclip.cpp
index 0478b51..2ed17f2 100644
--- a/gm/convexpolyclip.cpp
+++ b/gm/convexpolyclip.cpp
@@ -10,6 +10,7 @@
 
 #include "SkBitmap.h"
 #include "SkGradientShader.h"
+#include "SkPath.h"
 #include "SkTLList.h"
 
 static SkBitmap make_bmp(int w, int h) {
diff --git a/gm/cubicpaths.cpp b/gm/cubicpaths.cpp
index b3fca5a..74fbe8d 100644
--- a/gm/cubicpaths.cpp
+++ b/gm/cubicpaths.cpp
@@ -4,9 +4,11 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm.h"
 #include "SkCanvas.h"
 #include "SkPaint.h"
+#include "SkPath.h"
 #include "SkRandom.h"
 
 // skbug.com/1316 shows that this cubic, when slightly clipped, creates big
diff --git a/gm/degeneratesegments.cpp b/gm/degeneratesegments.cpp
index df111ac..d516490 100644
--- a/gm/degeneratesegments.cpp
+++ b/gm/degeneratesegments.cpp
@@ -7,6 +7,7 @@
 #include "gm.h"
 #include "SkCanvas.h"
 #include "SkPaint.h"
+#include "SkPath.h"
 #include "SkRandom.h"
 
 namespace skiagm {
diff --git a/gm/drawable.cpp b/gm/drawable.cpp
index 3847ba5..c7bc761 100644
--- a/gm/drawable.cpp
+++ b/gm/drawable.cpp
@@ -8,6 +8,7 @@
 #include "gm.h"
 #include "SkCanvas.h"
 #include "SkDrawable.h"
+#include "SkPath.h"
 
 struct MyDrawable : public SkDrawable {
     SkRect onGetBounds() override { return SkRect::MakeWH(50, 100);  }
diff --git a/gm/dstreadshuffle.cpp b/gm/dstreadshuffle.cpp
index 8cdccbc..8ff40a8 100644
--- a/gm/dstreadshuffle.cpp
+++ b/gm/dstreadshuffle.cpp
@@ -7,6 +7,7 @@
  */
 #include "gm.h"
 #include "SkBitmap.h"
+#include "SkPath.h"
 #include "SkRandom.h"
 #include "SkShader.h"
 #include "SkXfermode.h"
diff --git a/gm/emptypath.cpp b/gm/emptypath.cpp
index ec60bfc..36edf4e 100644
--- a/gm/emptypath.cpp
+++ b/gm/emptypath.cpp
@@ -8,6 +8,7 @@
 #include "gm.h"
 #include "SkCanvas.h"
 #include "SkPaint.h"
+#include "SkPath.h"
 #include "SkRandom.h"
 
 namespace skiagm {
diff --git a/gm/filltypes.cpp b/gm/filltypes.cpp
index f01f9bd..b470c05 100644
--- a/gm/filltypes.cpp
+++ b/gm/filltypes.cpp
@@ -1,11 +1,12 @@
-
 /*
  * Copyright 2011 Google Inc.
  *
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm.h"
+#include "SkPath.h"
 
 namespace skiagm {
 
diff --git a/gm/filltypespersp.cpp b/gm/filltypespersp.cpp
index 92fce3a..cc09b95 100644
--- a/gm/filltypespersp.cpp
+++ b/gm/filltypespersp.cpp
@@ -1,12 +1,13 @@
-
 /*
  * Copyright 2011 Google Inc.
  *
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm.h"
 #include "SkGradientShader.h"
+#include "SkPath.h"
 
 namespace skiagm {
 
diff --git a/gm/getpostextpath.cpp b/gm/getpostextpath.cpp
index 2286602..faace24 100644
--- a/gm/getpostextpath.cpp
+++ b/gm/getpostextpath.cpp
@@ -8,6 +8,7 @@
 #include "gm.h"
 #include "SkCanvas.h"
 #include "SkPaint.h"
+#include "SkPath.h"
 #include "SkRandom.h"
 #include "SkTemplates.h"
 
diff --git a/gm/hairlines.cpp b/gm/hairlines.cpp
index 6056415..9d7e366 100644
--- a/gm/hairlines.cpp
+++ b/gm/hairlines.cpp
@@ -7,6 +7,7 @@
 
 #include "gm.h"
 #include "SkCanvas.h"
+#include "SkPath.h"
 #include "SkTArray.h"
 
 namespace skiagm {
diff --git a/gm/hittestpath.cpp b/gm/hittestpath.cpp
index f415ba3..b5f01cd 100644
--- a/gm/hittestpath.cpp
+++ b/gm/hittestpath.cpp
@@ -8,6 +8,7 @@
 #include "gm.h"
 #include "SkCanvas.h"
 #include "SkCullPoints.h"
+#include "SkPath.h"
 #include "SkRandom.h"
 
 static void test_hittest(SkCanvas* canvas, const SkPath& path) {
diff --git a/gm/linepaths.cpp b/gm/linepaths.cpp
index e8a4b0b..0c99fa7 100644
--- a/gm/linepaths.cpp
+++ b/gm/linepaths.cpp
@@ -4,8 +4,10 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm.h"
 #include "SkCanvas.h"
+#include "SkPath.h"
 #include "SkPaint.h"
 #include "SkRandom.h"
 
diff --git a/gm/nested.cpp b/gm/nested.cpp
index 9040ba6..d3b75b3 100644
--- a/gm/nested.cpp
+++ b/gm/nested.cpp
@@ -6,6 +6,7 @@
  */
 
 #include "gm.h"
+#include "SkPath.h"
 #include "SkRandom.h"
 #include "SkRRect.h"
 
diff --git a/gm/pathfill.cpp b/gm/pathfill.cpp
index 1260654..a2b1ee0 100644
--- a/gm/pathfill.cpp
+++ b/gm/pathfill.cpp
@@ -1,11 +1,12 @@
-
 /*
  * Copyright 2011 Google Inc.
  *
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm.h"
+#include "SkPath.h"
 
 typedef SkScalar (*MakePathProc)(SkPath*);
 
diff --git a/gm/pathinterior.cpp b/gm/pathinterior.cpp
index 88efb3a..f1cbfc4 100644
--- a/gm/pathinterior.cpp
+++ b/gm/pathinterior.cpp
@@ -6,11 +6,12 @@
  */
 
 #include "gm.h"
+#include "SkBlurMaskFilter.h"
 #include "SkCanvas.h"
 #include "SkGraphics.h"
-#include "SkRandom.h"
 #include "SkLayerDrawLooper.h"
-#include "SkBlurMaskFilter.h"
+#include "SkPath.h"
+#include "SkRandom.h"
 
 static SkRect inset(const SkRect& r) {
     SkRect rect = r;
diff --git a/gm/plus.cpp b/gm/plus.cpp
index ba2a1a0..6a5af61 100644
--- a/gm/plus.cpp
+++ b/gm/plus.cpp
@@ -6,6 +6,7 @@
  */
 
 #include "gm.h"
+#include "SkPath.h"
 
 DEF_SIMPLE_GM(PlusMergesAA, canvas, 256, 256) {
     SkPaint p;
diff --git a/gm/poly2poly.cpp b/gm/poly2poly.cpp
index c1d9b7e..ea77033 100644
--- a/gm/poly2poly.cpp
+++ b/gm/poly2poly.cpp
@@ -7,6 +7,7 @@
 
 #include "gm.h"
 #include "Resources.h"
+#include "SkPath.h"
 #include "SkTypeface.h"
 
 class SkJSCanvas {
diff --git a/gm/quadpaths.cpp b/gm/quadpaths.cpp
index 2fab37b..359f62d 100644
--- a/gm/quadpaths.cpp
+++ b/gm/quadpaths.cpp
@@ -4,9 +4,11 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm.h"
 #include "SkCanvas.h"
 #include "SkPaint.h"
+#include "SkPath.h"
 #include "SkRandom.h"
 
 namespace skiagm {
diff --git a/gm/samplerstress.cpp b/gm/samplerstress.cpp
index 7f85e17..eff6281 100644
--- a/gm/samplerstress.cpp
+++ b/gm/samplerstress.cpp
@@ -6,9 +6,10 @@
  */
 
 #include "gm.h"
-#include "SkCanvas.h"
-#include "SkShader.h"
 #include "SkBlurMaskFilter.h"
+#include "SkCanvas.h"
+#include "SkPath.h"
+#include "SkShader.h"
 
 namespace skiagm {
 
diff --git a/gm/shadertext.cpp b/gm/shadertext.cpp
index 2bb4e96..fd74e7c 100644
--- a/gm/shadertext.cpp
+++ b/gm/shadertext.cpp
@@ -8,6 +8,7 @@
 #include "gm.h"
 #include "SkCanvas.h"
 #include "SkGradientShader.h"
+#include "SkPath.h"
 
 namespace skiagm {
 
diff --git a/gm/shadertext2.cpp b/gm/shadertext2.cpp
index 4d697d9..f4af684 100644
--- a/gm/shadertext2.cpp
+++ b/gm/shadertext2.cpp
@@ -7,6 +7,7 @@
 #include "gm.h"
 #include "SkCanvas.h"
 #include "SkGradientShader.h"
+#include "SkPath.h"
 
 namespace skiagm {
 
diff --git a/gm/shadows.cpp b/gm/shadows.cpp
index 729104c..82b5fd9 100644
--- a/gm/shadows.cpp
+++ b/gm/shadows.cpp
@@ -1,13 +1,14 @@
-
 /*
  * Copyright 2011 Google Inc.
  *
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm.h"
-#include "SkBlurMask.h"
 #include "SkBlurDrawLooper.h"
+#include "SkBlurMask.h"
+#include "SkPath.h"
 
 namespace skiagm {
 
diff --git a/gm/simpleaaclip.cpp b/gm/simpleaaclip.cpp
index 8054a53..372cb1b 100644
--- a/gm/simpleaaclip.cpp
+++ b/gm/simpleaaclip.cpp
@@ -5,10 +5,10 @@
  * found in the LICENSE file.
  */
 
-
 #include "gm.h"
-#include "SkCanvas.h"
 #include "SkAAClip.h"
+#include "SkCanvas.h"
+#include "SkPath.h"
 
 namespace skiagm {
 
diff --git a/gm/skbug1719.cpp b/gm/skbug1719.cpp
index 6652629..0a75d35 100644
--- a/gm/skbug1719.cpp
+++ b/gm/skbug1719.cpp
@@ -6,8 +6,9 @@
  */
 
 #include "gm.h"
-#include "SkColorFilter.h"
 #include "SkBlurMaskFilter.h"
+#include "SkColorFilter.h"
+#include "SkPath.h"
 
 namespace skiagm {
 
diff --git a/gm/smallarc.cpp b/gm/smallarc.cpp
index 76611b7..2109b90 100755
--- a/gm/smallarc.cpp
+++ b/gm/smallarc.cpp
@@ -6,6 +6,7 @@
  */
 
 #include "gm.h"
+#include "SkPath.h"
 
 namespace skiagm {
 
diff --git a/gm/srcmode.cpp b/gm/srcmode.cpp
index ec2673f..7a7e89e 100644
--- a/gm/srcmode.cpp
+++ b/gm/srcmode.cpp
@@ -8,6 +8,7 @@
 #include "gm.h"
 #include "SkCanvas.h"
 #include "SkGradientShader.h"
+#include "SkPath.h"
 #include "SkSurface.h"
 
 #if SK_SUPPORT_GPU
diff --git a/gm/stlouisarch.cpp b/gm/stlouisarch.cpp
index 176fb4b..7b31e54 100644
--- a/gm/stlouisarch.cpp
+++ b/gm/stlouisarch.cpp
@@ -7,6 +7,7 @@
 
 #include "gm.h"
 #include "SkCanvas.h"
+#include "SkPath.h"
 #include "SkTArray.h"
 
 namespace skiagm {
diff --git a/gm/strokes.cpp b/gm/strokes.cpp
index 77638e4..7382390 100644
--- a/gm/strokes.cpp
+++ b/gm/strokes.cpp
@@ -1,4 +1,3 @@
-
 /*
  * Copyright 2011 Google Inc.
  *
@@ -6,9 +5,8 @@
  * found in the LICENSE file.
  */
 
-
-
 #include "gm.h"
+#include "SkPath.h"
 #include "SkRandom.h"
 
 #define W   400
diff --git a/include/core/SkAnnotation.h b/include/core/SkAnnotation.h
index d7b9b84..62c844a 100644
--- a/include/core/SkAnnotation.h
+++ b/include/core/SkAnnotation.h
@@ -10,12 +10,11 @@
 
 #include "SkRefCnt.h"
 #include "SkString.h"
+#include "SkTypes.h"
 
 class SkData;
 class SkReadBuffer;
 class SkWriteBuffer;
-class SkStream;
-class SkWStream;
 struct SkPoint;
 
 /**
diff --git a/include/core/SkBBHFactory.h b/include/core/SkBBHFactory.h
index f0c49f1..ca70404 100644
--- a/include/core/SkBBHFactory.h
+++ b/include/core/SkBBHFactory.h
@@ -8,9 +8,9 @@
 #ifndef SkBBHFactory_DEFINED
 #define SkBBHFactory_DEFINED
 
-#include "SkRect.h"
-
+#include "SkTypes.h"
 class SkBBoxHierarchy;
+struct SkRect;
 
 class SK_API SkBBHFactory {
 public:
diff --git a/include/core/SkBitmapDevice.h b/include/core/SkBitmapDevice.h
index ae637f9..d1cb9ad 100644
--- a/include/core/SkBitmapDevice.h
+++ b/include/core/SkBitmapDevice.h
@@ -9,7 +9,28 @@
 #ifndef SkBitmapDevice_DEFINED
 #define SkBitmapDevice_DEFINED
 
+#include "SkBitmap.h"
+#include "SkCanvas.h"
+#include "SkColor.h"
 #include "SkDevice.h"
+#include "SkImageFilter.h"
+#include "SkImageInfo.h"
+#include "SkRect.h"
+#include "SkScalar.h"
+#include "SkSize.h"
+#include "SkSurfaceProps.h"
+#include "SkTypes.h"
+
+class SkDraw;
+class SkMatrix;
+class SkPaint;
+class SkPath;
+class SkPixelRef;
+class SkPixmap;
+class SkRRect;
+class SkSurface;
+class SkXfermode;
+struct SkPoint;
 
 ///////////////////////////////////////////////////////////////////////////////
 class SK_API SkBitmapDevice : public SkBaseDevice {
diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h
index 45f5c9c..bc39ec2 100644
--- a/include/core/SkCanvas.h
+++ b/include/core/SkCanvas.h
@@ -11,31 +11,31 @@
 #include "SkTypes.h"
 #include "SkBitmap.h"
 #include "SkDeque.h"
-#include "SkClipStack.h"
 #include "SkPaint.h"
 #include "SkRefCnt.h"
-#include "SkPath.h"
 #include "SkRegion.h"
 #include "SkSurfaceProps.h"
 #include "SkXfermode.h"
 
+class GrContext;
+class GrRenderTarget;
 class SkBaseDevice;
 class SkCanvasClipVisitor;
+class SkClipStack;
 class SkDraw;
 class SkDrawable;
 class SkDrawFilter;
 class SkImage;
+class SkImageFilter;
 class SkMetaData;
+class SkPath;
 class SkPicture;
+class SkPixmap;
 class SkRRect;
 struct SkRSXform;
 class SkSurface;
 class SkSurface_Base;
 class SkTextBlob;
-class GrContext;
-class GrRenderTarget;
-
-class SkCanvasState;
 
 /** \class SkCanvas
 
diff --git a/include/core/SkColor.h b/include/core/SkColor.h
index 4c1f9ff..1ba1331 100644
--- a/include/core/SkColor.h
+++ b/include/core/SkColor.h
@@ -1,4 +1,3 @@
-
 /*
  * Copyright 2006 The Android Open Source Project
  *
@@ -6,11 +5,11 @@
  * found in the LICENSE file.
  */
 
-
 #ifndef SkColor_DEFINED
 #define SkColor_DEFINED
 
 #include "SkScalar.h"
+#include "SkTypes.h"
 
 /** \file SkColor.h
 
diff --git a/include/core/SkColorFilter.h b/include/core/SkColorFilter.h
index 729eb46..df006ed 100644
--- a/include/core/SkColorFilter.h
+++ b/include/core/SkColorFilter.h
@@ -13,10 +13,10 @@
 #include "SkTDArray.h"
 #include "SkXfermode.h"
 
-class SkBitmap;
-class GrProcessor;
 class GrContext;
+class GrFragmentProcessor;
 class GrProcessorDataManager;
+class SkBitmap;
 
 /**
  *  ColorFilters are optional objects in the drawing pipeline. When present in
diff --git a/include/core/SkDevice.h b/include/core/SkDevice.h
index 461f424..3715b1d 100644
--- a/include/core/SkDevice.h
+++ b/include/core/SkDevice.h
@@ -9,12 +9,12 @@
 #define SkDevice_DEFINED
 
 #include "SkRefCnt.h"
-#include "SkBitmap.h"
 #include "SkCanvas.h"
 #include "SkColor.h"
 #include "SkImageFilter.h"
 #include "SkSurfaceProps.h"
 
+class SkBitmap;
 class SkClipStack;
 class SkDraw;
 class SkDrawFilter;
diff --git a/include/core/SkPostConfig.h b/include/core/SkPostConfig.h
index 6f3e2d1..8ff1f06 100644
--- a/include/core/SkPostConfig.h
+++ b/include/core/SkPostConfig.h
@@ -5,6 +5,8 @@
  * found in the LICENSE file.
  */
 
+// IWYU pragma: private, include "SkTypes.h"
+
 #ifndef SkPostConfig_DEFINED
 #define SkPostConfig_DEFINED
 
diff --git a/include/core/SkPreConfig.h b/include/core/SkPreConfig.h
index b590825..0715fc9 100644
--- a/include/core/SkPreConfig.h
+++ b/include/core/SkPreConfig.h
@@ -5,6 +5,8 @@
  * found in the LICENSE file.
  */
 
+// IWYU pragma: private, include "SkTypes.h"
+
 #ifndef SkPreConfig_DEFINED
 #define SkPreConfig_DEFINED
 
diff --git a/include/core/SkTypes.h b/include/core/SkTypes.h
index 1a165a1..2e49511 100644
--- a/include/core/SkTypes.h
+++ b/include/core/SkTypes.h
@@ -145,6 +145,7 @@
     #define SK_TO_STRING_PUREVIRT()
     #define SK_TO_STRING_OVERRIDE()
 #else
+    class SkString;
     // the 'toString' helper functions convert Sk* objects to human-readable
     // form in developer mode
     #define SK_TO_STRING_NONVIRT() void toString(SkString* str) const;
diff --git a/include/private/SkRecords.h b/include/private/SkRecords.h
index eefb83d..1f28078 100644
--- a/include/private/SkRecords.h
+++ b/include/private/SkRecords.h
@@ -11,7 +11,10 @@
 #include "SkCanvas.h"
 #include "SkDrawable.h"
 #include "SkMatrix.h"
+#include "SkPath.h"
 #include "SkPicture.h"
+#include "SkRect.h"
+#include "SkRRect.h"
 #include "SkRSXform.h"
 #include "SkTextBlob.h"
 
diff --git a/include/utils/SkNWayCanvas.h b/include/utils/SkNWayCanvas.h
index 1fc993f..a60836b 100644
--- a/include/utils/SkNWayCanvas.h
+++ b/include/utils/SkNWayCanvas.h
@@ -10,6 +10,7 @@
 #define SkNWayCanvas_DEFINED
 
 #include "SkCanvas.h"
+#include "SkTDArray.h"
 
 class SK_API SkNWayCanvas : public SkCanvas {
 public:
diff --git a/samplecode/SampleAAClip.cpp b/samplecode/SampleAAClip.cpp
index a1ee67b..78baf3d 100644
--- a/samplecode/SampleAAClip.cpp
+++ b/samplecode/SampleAAClip.cpp
@@ -7,9 +7,10 @@
  */
 
 #include "SampleCode.h"
-#include "SkView.h"
-#include "SkCanvas.h"
 #include "SkAAClip.h"
+#include "SkCanvas.h"
+#include "SkPath.h"
+#include "SkView.h"
 
 static void testop(const SkIRect& r0, const SkIRect& r1, SkRegion::Op op,
                    const SkIRect& expectedR) {
diff --git a/samplecode/SampleChart.cpp b/samplecode/SampleChart.cpp
index 4c128a9..8d158f1 100644
--- a/samplecode/SampleChart.cpp
+++ b/samplecode/SampleChart.cpp
@@ -8,6 +8,7 @@
 #include "SampleCode.h"
 #include "SkCanvas.h"
 #include "SkPaint.h"
+#include "SkPath.h"
 #include "SkRandom.h"
 #include "SkView.h"
 
diff --git a/samplecode/SampleCircle.cpp b/samplecode/SampleCircle.cpp
index 9cc927e..938b575 100644
--- a/samplecode/SampleCircle.cpp
+++ b/samplecode/SampleCircle.cpp
@@ -1,15 +1,16 @@
-
 /*
  * Copyright 2011 Google Inc.
  *
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "SampleCode.h"
-#include "SkView.h"
 #include "SkCanvas.h"
 #include "SkDevice.h"
 #include "SkPaint.h"
+#include "SkPath.h"
+#include "SkView.h"
 
 // ensure that we don't accidentally screw up the bounds when the oval is
 // fractional, and the impl computes the center and radii, and uses them to
diff --git a/samplecode/SampleClip.cpp b/samplecode/SampleClip.cpp
index 3a38724..2014278 100644
--- a/samplecode/SampleClip.cpp
+++ b/samplecode/SampleClip.cpp
@@ -11,6 +11,7 @@
 #include "SkColorPriv.h"
 #include "SkDevice.h"
 #include "SkPaint.h"
+#include "SkPath.h"
 #include "SkRandom.h"
 
 #define W   150
diff --git a/samplecode/SampleClipDrawMatch.cpp b/samplecode/SampleClipDrawMatch.cpp
index 6a2a37b..c79c872 100644
--- a/samplecode/SampleClipDrawMatch.cpp
+++ b/samplecode/SampleClipDrawMatch.cpp
@@ -8,6 +8,8 @@
 #include "SampleCode.h"
 #include "SkCanvas.h"
 #include "SkInterpolator.h"
+#include "SkPath.h"
+#include "SkRRect.h"
 #include "SkTime.h"
 
 // This slide tests out the match up between BW clipping and rendering. It can
diff --git a/samplecode/SampleClock.cpp b/samplecode/SampleClock.cpp
index ec71f0f..9b1e3e0 100644
--- a/samplecode/SampleClock.cpp
+++ b/samplecode/SampleClock.cpp
@@ -7,6 +7,7 @@
 #include "SampleCode.h"
 
 #include "SkCanvas.h"
+#include "SkPath.h"
 #include "SkRandom.h"
 #include "SkRRect.h"
 #include "SkTime.h"
diff --git a/samplecode/SampleDitherBitmap.cpp b/samplecode/SampleDitherBitmap.cpp
index d825c71..9af5ce5 100644
--- a/samplecode/SampleDitherBitmap.cpp
+++ b/samplecode/SampleDitherBitmap.cpp
@@ -1,16 +1,17 @@
-
 /*
  * Copyright 2011 Google Inc.
  *
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "SampleCode.h"
+#include "SkCanvas.h"
 #include "SkColorPriv.h"
 #include "SkGradientShader.h"
-#include "SkView.h"
-#include "SkCanvas.h"
+#include "SkPath.h"
 #include "SkUtils.h"
+#include "SkView.h"
 
 static void draw_rect(SkCanvas* canvas, const SkRect& r, const SkPaint& p) {
     canvas->drawRect(r, p);
diff --git a/samplecode/SampleEmptyPath.cpp b/samplecode/SampleEmptyPath.cpp
index 53e2199..6071f42 100644
--- a/samplecode/SampleEmptyPath.cpp
+++ b/samplecode/SampleEmptyPath.cpp
@@ -1,14 +1,15 @@
-
 /*
  * Copyright 2011 Google Inc.
  *
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "SampleCode.h"
 #include "SkView.h"
 #include "SkCanvas.h"
 #include "SkPaint.h"
+#include "SkPath.h"
 #include "SkRandom.h"
 #include "SkString.h"
 
diff --git a/samplecode/SampleFilterQuality.cpp b/samplecode/SampleFilterQuality.cpp
index 64b7f55..12a04a6 100644
--- a/samplecode/SampleFilterQuality.cpp
+++ b/samplecode/SampleFilterQuality.cpp
@@ -12,6 +12,7 @@
 #include "SkAnimTimer.h"
 #include "SkCanvas.h"
 #include "SkInterpolator.h"
+#include "SkPath.h"
 #include "SkSurface.h"
 #include "SkRandom.h"
 #include "SkTime.h"
diff --git a/samplecode/SampleIdentityScale.cpp b/samplecode/SampleIdentityScale.cpp
index 4450d61..3302d27 100644
--- a/samplecode/SampleIdentityScale.cpp
+++ b/samplecode/SampleIdentityScale.cpp
@@ -13,6 +13,7 @@
 #include "SkCanvas.h"
 #include "SkColorPriv.h"
 #include "SkImageDecoder.h"
+#include "SkPath.h"
 #include "SkRandom.h"
 #include "SkStream.h"
 #include "SkTime.h"
diff --git a/samplecode/SampleLayerMask.cpp b/samplecode/SampleLayerMask.cpp
index 86a092c..f5b8822 100644
--- a/samplecode/SampleLayerMask.cpp
+++ b/samplecode/SampleLayerMask.cpp
@@ -1,13 +1,14 @@
-
 /*
  * Copyright 2011 Google Inc.
  *
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "SampleCode.h"
 #include "SkCanvas.h"
 #include "SkPaint.h"
+#include "SkPath.h"
 #include "SkView.h"
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/samplecode/SamplePathFuzz.cpp b/samplecode/SamplePathFuzz.cpp
index 0955ce9..70a052f 100644
--- a/samplecode/SamplePathFuzz.cpp
+++ b/samplecode/SamplePathFuzz.cpp
@@ -14,6 +14,7 @@
 #include "SkColor.h"
 #include "SkTDArray.h"
 #include "SkRandom.h"
+#include "SkRRect.h"
 
 enum RandomAddPath {
     kMoveToPath,
diff --git a/samplecode/SampleShaderText.cpp b/samplecode/SampleShaderText.cpp
index 9fdae84..cf7cf96 100644
--- a/samplecode/SampleShaderText.cpp
+++ b/samplecode/SampleShaderText.cpp
@@ -6,9 +6,10 @@
  */
 
 #include "SampleCode.h"
-#include "SkView.h"
 #include "SkCanvas.h"
 #include "SkGradientShader.h"
+#include "SkPath.h"
+#include "SkView.h"
 
 static void makebm(SkBitmap* bm, int w, int h) {
     bm->allocN32Pixels(w, h);
diff --git a/samplecode/SampleStringArt.cpp b/samplecode/SampleStringArt.cpp
index 0e711b0..5bc667b 100644
--- a/samplecode/SampleStringArt.cpp
+++ b/samplecode/SampleStringArt.cpp
@@ -4,8 +4,10 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "SampleCode.h"
 #include "SkCanvas.h"
+#include "SkPath.h"
 
 // Reproduces https://code.google.com/p/chromium/issues/detail?id=279014
 
diff --git a/src/core/SkAdvancedTypefaceMetrics.cpp b/src/core/SkAdvancedTypefaceMetrics.cpp
index f9b25dc..81e98f3 100644
--- a/src/core/SkAdvancedTypefaceMetrics.cpp
+++ b/src/core/SkAdvancedTypefaceMetrics.cpp
@@ -16,7 +16,7 @@
 
 #if defined(SK_BUILD_FOR_UNIX) || defined(SK_BUILD_FOR_ANDROID)
 // forward declare structs needed for getAdvanceData() template for freetype
-struct FT_FaceRec;
+struct FT_FaceRec_;
 typedef struct FT_FaceRec_* FT_Face;
 #endif
 
diff --git a/src/core/SkAnnotation.cpp b/src/core/SkAnnotation.cpp
index bddff64..aa7a02a 100644
--- a/src/core/SkAnnotation.cpp
+++ b/src/core/SkAnnotation.cpp
@@ -7,10 +7,10 @@
 
 #include "SkAnnotation.h"
 #include "SkData.h"
+#include "SkPaint.h"
+#include "SkPoint.h"
 #include "SkReadBuffer.h"
 #include "SkWriteBuffer.h"
-#include "SkPoint.h"
-#include "SkStream.h"
 
 SkAnnotation::SkAnnotation(const char key[], SkData* value) : fKey(key) {
     if (NULL == value) {
diff --git a/src/core/SkBBHFactory.cpp b/src/core/SkBBHFactory.cpp
index ce5026c..a4c7f4f 100644
--- a/src/core/SkBBHFactory.cpp
+++ b/src/core/SkBBHFactory.cpp
@@ -6,7 +6,9 @@
  */
 
 #include "SkBBHFactory.h"
+#include "SkRect.h"
 #include "SkRTree.h"
+#include "SkScalar.h"
 
 SkBBoxHierarchy* SkRTreeFactory::operator()(const SkRect& bounds) const {
     SkScalar aspectRatio = bounds.width() / bounds.height();
diff --git a/src/core/SkBitmap.cpp b/src/core/SkBitmap.cpp
index aa26bdc..97b0db6 100644
--- a/src/core/SkBitmap.cpp
+++ b/src/core/SkBitmap.cpp
@@ -1,4 +1,3 @@
-
 /*
  * Copyright 2008 The Android Open Source Project
  *
@@ -6,23 +5,22 @@
  * found in the LICENSE file.
  */
 
-
 #include "SkAtomics.h"
 #include "SkBitmap.h"
 #include "SkColorPriv.h"
-#include "SkDither.h"
-#include "SkFlattenable.h"
-#include "SkImagePriv.h"
+#include "SkData.h"
+#include "SkFilterQuality.h"
 #include "SkMallocPixelRef.h"
 #include "SkMask.h"
-#include "SkPackBits.h"
+#include "SkMath.h"
 #include "SkPixelRef.h"
 #include "SkReadBuffer.h"
+#include "SkRect.h"
+#include "SkScalar.h"
 #include "SkUnPreMultiply.h"
-#include "SkUtils.h"
-#include "SkValidationUtils.h"
 #include "SkWriteBuffer.h"
-#include <new>
+
+#include <string.h>
 
 static bool reset_return_false(SkBitmap* bm) {
     bm->reset();
@@ -749,9 +747,6 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-#include "SkCanvas.h"
-#include "SkPaint.h"
-
 bool SkBitmap::canCopyTo(SkColorType dstColorType) const {
     const SkColorType srcCT = this->colorType();
 
@@ -1221,6 +1216,7 @@
 #endif
 
 #ifndef SK_IGNORE_TO_STRING
+#include "SkString.h"
 void SkBitmap::toString(SkString* str) const {
 
     static const char* gColorTypeNames[kLastEnum_SkColorType + 1] = {
diff --git a/src/core/SkBitmapDevice.cpp b/src/core/SkBitmapDevice.cpp
index 9da43d8..dfe1756 100644
--- a/src/core/SkBitmapDevice.cpp
+++ b/src/core/SkBitmapDevice.cpp
@@ -8,10 +8,16 @@
 #include "SkBitmapDevice.h"
 #include "SkConfig8888.h"
 #include "SkDraw.h"
+#include "SkMatrix.h"
+#include "SkPaint.h"
+#include "SkPath.h"
 #include "SkPixelRef.h"
-#include "SkRasterClip.h"
+#include "SkPixmap.h"
 #include "SkShader.h"
 #include "SkSurface.h"
+#include "SkXfermode.h"
+
+class SkColorTable;
 
 #define CHECK_FOR_ANNOTATION(paint) \
     do { if (paint.getAnnotation()) { return; } } while (0)
diff --git a/src/core/SkBitmapFilter.cpp b/src/core/SkBitmapFilter.cpp
index 82494d9..8c44e9f 100644
--- a/src/core/SkBitmapFilter.cpp
+++ b/src/core/SkBitmapFilter.cpp
@@ -5,17 +5,11 @@
  * found in the LICENSE file.
  */
 
-#include "SkErrorInternals.h"
-#include "SkConvolver.h"
-#include "SkBitmapProcState.h"
-#include "SkBitmap.h"
-#include "SkColor.h"
-#include "SkColorPriv.h"
-#include "SkConvolver.h"
-#include "SkUnPreMultiply.h"
-#include "SkShader.h"
+#include "SkBitmapFilter.h"
 #include "SkRTConf.h"
-#include "SkMath.h"
+#include "SkTypes.h"
+
+#include <string.h>
 
 // These are the per-scanline callbacks that are used when we must resort to
 // resampling an image as it is blitted.  Typically these are used only when
diff --git a/src/core/SkBitmapFilter.h b/src/core/SkBitmapFilter.h
index 93b552e..eb327d7 100644
--- a/src/core/SkBitmapFilter.h
+++ b/src/core/SkBitmapFilter.h
@@ -1,4 +1,3 @@
-
 /*
  * Copyright 2013 Google Inc.
  *
@@ -6,11 +5,12 @@
  * found in the LICENSE file.
  */
 
-
 #ifndef SkBitmapFilter_DEFINED
 #define SkBitmapFilter_DEFINED
 
+#include "SkFixed.h"
 #include "SkMath.h"
+#include "SkScalar.h"
 
 // size of the precomputed bitmap filter tables for high quality filtering.
 // Used to precompute the shape of the filter kernel.
diff --git a/src/core/SkBitmapHeap.cpp b/src/core/SkBitmapHeap.cpp
index 07e65fb..e1d3cae 100644
--- a/src/core/SkBitmapHeap.cpp
+++ b/src/core/SkBitmapHeap.cpp
@@ -7,10 +7,7 @@
  */
 
 #include "SkBitmapHeap.h"
-
 #include "SkBitmap.h"
-#include "SkReadBuffer.h"
-#include "SkWriteBuffer.h"
 #include "SkTSearch.h"
 
 SkBitmapHeapEntry::SkBitmapHeapEntry()
diff --git a/src/core/SkBitmapHeap.h b/src/core/SkBitmapHeap.h
index 259d947..1e1979f 100644
--- a/src/core/SkBitmapHeap.h
+++ b/src/core/SkBitmapHeap.h
@@ -1,18 +1,19 @@
-
 /*
  * Copyright 2012 Google Inc.
  *
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #ifndef SkBitmapHeap_DEFINED
 #define SkBitmapHeap_DEFINED
 
+#include "SkAtomics.h"
 #include "SkBitmap.h"
-#include "SkFlattenable.h"
+#include "SkPoint.h"
 #include "SkRefCnt.h"
 #include "SkTDArray.h"
-#include "SkAtomics.h"
+#include "SkTypes.h"
 
 /**
  * SkBitmapHeapEntry provides users of SkBitmapHeap (using internal storage) with a means to...
diff --git a/src/core/SkBitmapScaler.cpp b/src/core/SkBitmapScaler.cpp
index 84b926e..6e25302 100644
--- a/src/core/SkBitmapScaler.cpp
+++ b/src/core/SkBitmapScaler.cpp
@@ -7,10 +7,12 @@
 
 #include "SkBitmapScaler.h"
 #include "SkBitmapFilter.h"
-#include "SkRect.h"
-#include "SkTArray.h"
-#include "SkErrorInternals.h"
 #include "SkConvolver.h"
+#include "SkImageInfo.h"
+#include "SkPixmap.h"
+#include "SkRect.h"
+#include "SkScalar.h"
+#include "SkTArray.h"
 
 // SkResizeFilter ----------------------------------------------------------------
 
diff --git a/src/core/SkBlitter.cpp b/src/core/SkBlitter.cpp
index 59078d6..a932ba9 100644
--- a/src/core/SkBlitter.cpp
+++ b/src/core/SkBlitter.cpp
@@ -9,7 +9,6 @@
 #include "SkAntiRun.h"
 #include "SkColor.h"
 #include "SkColorFilter.h"
-#include "SkCoreBlitters.h"
 #include "SkFilterShader.h"
 #include "SkReadBuffer.h"
 #include "SkWriteBuffer.h"
diff --git a/src/core/SkBlitter.h b/src/core/SkBlitter.h
index a2ab89d..baa9ccc 100644
--- a/src/core/SkBlitter.h
+++ b/src/core/SkBlitter.h
@@ -9,14 +9,16 @@
 #define SkBlitter_DEFINED
 
 #include "SkBitmapProcShader.h"
-#include "SkMask.h"
-#include "SkMatrix.h"
-#include "SkPaint.h"
-#include "SkPixmap.h"
-#include "SkRefCnt.h"
+#include "SkColor.h"
+#include "SkRect.h"
 #include "SkRegion.h"
 #include "SkShader.h"
-#include "SkSmallAllocator.h"
+#include "SkTypes.h"
+
+class SkMatrix;
+class SkPaint;
+class SkPixmap;
+struct SkMask;
 
 /** SkBlitter and its subclasses are responsible for actually writing pixels
     into memory. Besides efficiency, they handle clipping and antialiasing.
diff --git a/src/core/SkBuffer.cpp b/src/core/SkBuffer.cpp
index 590b05b..51c368a 100644
--- a/src/core/SkBuffer.cpp
+++ b/src/core/SkBuffer.cpp
@@ -1,4 +1,3 @@
-
 /*
  * Copyright 2006 The Android Open Source Project
  *
@@ -6,9 +5,10 @@
  * found in the LICENSE file.
  */
 
-
 #include "SkBuffer.h"
 
+#include <string.h>
+
 ////////////////////////////////////////////////////////////////////////////////////////
 
 void SkRBuffer::readNoSizeCheck(void* buffer, size_t size)
diff --git a/src/core/SkBuffer.h b/src/core/SkBuffer.h
index aaafb36..92ed705 100644
--- a/src/core/SkBuffer.h
+++ b/src/core/SkBuffer.h
@@ -11,6 +11,7 @@
 #define SkBuffer_DEFINED
 
 #include "SkScalar.h"
+#include "SkTypes.h"
 
 /** \class SkRBuffer
 
diff --git a/src/core/SkCachedData.cpp b/src/core/SkCachedData.cpp
index f1fb026..16c4eea 100644
--- a/src/core/SkCachedData.cpp
+++ b/src/core/SkCachedData.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "SkCachedData.h"
-#include "SkRefCnt.h"
 #include "SkDiscardableMemory.h"
 
 //#define TRACK_CACHEDDATA_LIFETIME
diff --git a/src/core/SkCachedData.h b/src/core/SkCachedData.h
index 6493a75..a861157 100644
--- a/src/core/SkCachedData.h
+++ b/src/core/SkCachedData.h
@@ -9,6 +9,7 @@
 #define SkCachedData_DEFINED
 
 #include "SkMutex.h"
+#include "SkTypes.h"
 
 class SkDiscardableMemory;
 
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 2308151..342f79f 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -5,10 +5,12 @@
  * found in the LICENSE file.
  */
 
+#include "SkBitmapDevice.h"
 #include "SkCanvas.h"
 #include "SkCanvasPriv.h"
-#include "SkBitmapDevice.h"
+#include "SkClipStack.h"
 #include "SkColorFilter.h"
+#include "SkDevice.h"
 #include "SkDraw.h"
 #include "SkDrawable.h"
 #include "SkDrawFilter.h"
@@ -18,7 +20,6 @@
 #include "SkMetaData.h"
 #include "SkNinePatchIter.h"
 #include "SkPaintPriv.h"
-#include "SkPathOps.h"
 #include "SkPatchUtils.h"
 #include "SkPicture.h"
 #include "SkRasterClip.h"
@@ -26,12 +27,12 @@
 #include "SkRRect.h"
 #include "SkSmallAllocator.h"
 #include "SkSurface_Base.h"
-#include "SkTemplates.h"
 #include "SkTextBlob.h"
 #include "SkTextFormatParams.h"
 #include "SkTLazy.h"
 #include "SkTraceEvent.h"
-#include "SkUtils.h"
+
+#include <new>
 
 #if SK_SUPPORT_GPU
 #include "GrRenderTarget.h"
diff --git a/src/core/SkColor.cpp b/src/core/SkColor.cpp
index 6fa239f..73e6ddd 100644
--- a/src/core/SkColor.cpp
+++ b/src/core/SkColor.cpp
@@ -1,4 +1,3 @@
-
 /*
  * Copyright 2006 The Android Open Source Project
  *
@@ -6,9 +5,9 @@
  * found in the LICENSE file.
  */
 
-
 #include "SkColor.h"
 #include "SkColorPriv.h"
+#include "SkFixed.h"
 
 SkPMColor SkPreMultiplyARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b) {
     return SkPremultiplyARGBInline(a, r, g, b);
diff --git a/src/core/SkColorFilter.cpp b/src/core/SkColorFilter.cpp
index 8e01090..9cbcc64 100644
--- a/src/core/SkColorFilter.cpp
+++ b/src/core/SkColorFilter.cpp
@@ -7,9 +7,14 @@
 
 #include "SkColorFilter.h"
 #include "SkReadBuffer.h"
+#include "SkRefCnt.h"
 #include "SkString.h"
+#include "SkTDArray.h"
+#include "SkUnPreMultiply.h"
 #include "SkWriteBuffer.h"
 
+class GrFragmentProcessor;
+
 bool SkColorFilter::asColorMode(SkColor* color, SkXfermode::Mode* mode) const {
     return false;
 }
diff --git a/src/core/SkMaskFilter.cpp b/src/core/SkMaskFilter.cpp
index bb700cd..5e7cee6 100644
--- a/src/core/SkMaskFilter.cpp
+++ b/src/core/SkMaskFilter.cpp
@@ -11,6 +11,7 @@
 #include "SkBlitter.h"
 #include "SkDraw.h"
 #include "SkCachedData.h"
+#include "SkPath.h"
 #include "SkRasterClip.h"
 #include "SkRRect.h"
 #include "SkTypes.h"
diff --git a/src/core/SkMiniRecorder.cpp b/src/core/SkMiniRecorder.cpp
index 916c477..df40fa4 100644
--- a/src/core/SkMiniRecorder.cpp
+++ b/src/core/SkMiniRecorder.cpp
@@ -6,6 +6,7 @@
  */
 
 #include "SkCanvas.h"
+#include "SkTLazy.h"
 #include "SkLazyPtr.h"
 #include "SkMiniRecorder.h"
 #include "SkPicture.h"
diff --git a/src/core/SkPictureImageGenerator.cpp b/src/core/SkPictureImageGenerator.cpp
index 0dea60d..6c3faef 100644
--- a/src/core/SkPictureImageGenerator.cpp
+++ b/src/core/SkPictureImageGenerator.cpp
@@ -11,6 +11,7 @@
 #include "SkMatrix.h"
 #include "SkPaint.h"
 #include "SkPicture.h"
+#include "SkTLazy.h"
 
 class SkPictureImageGenerator : SkImageGenerator {
 public:
diff --git a/src/pdf/SkPDFDevice.h b/src/pdf/SkPDFDevice.h
index 32ebebd..bed2947 100644
--- a/src/pdf/SkPDFDevice.h
+++ b/src/pdf/SkPDFDevice.h
@@ -1,4 +1,3 @@
-
 /*
  * Copyright 2011 Google Inc.
  *
@@ -6,13 +5,13 @@
  * found in the LICENSE file.
  */
 
-
 #ifndef SkPDFDevice_DEFINED
 #define SkPDFDevice_DEFINED
 
-#include "SkDevice.h"
 #include "SkBitmap.h"
 #include "SkCanvas.h"
+#include "SkClipStack.h"
+#include "SkDevice.h"
 #include "SkPaint.h"
 #include "SkPath.h"
 #include "SkPicture.h"
diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp
index 6f235ed..63f598f 100644
--- a/src/ports/SkFontHost_FreeType.cpp
+++ b/src/ports/SkFontHost_FreeType.cpp
@@ -19,6 +19,7 @@
 #include "SkMatrix22.h"
 #include "SkMutex.h"
 #include "SkOTUtils.h"
+#include "SkPath.h"
 #include "SkScalerContext.h"
 #include "SkStream.h"
 #include "SkString.h"
diff --git a/src/svg/SkSVGDevice.cpp b/src/svg/SkSVGDevice.cpp
index f348c1d..9fd7ce7 100644
--- a/src/svg/SkSVGDevice.cpp
+++ b/src/svg/SkSVGDevice.cpp
@@ -10,6 +10,7 @@
 #include "SkBase64.h"
 #include "SkBitmap.h"
 #include "SkChecksum.h"
+#include "SkClipStack.h"
 #include "SkData.h"
 #include "SkDraw.h"
 #include "SkImageEncoder.h"
diff --git a/src/utils/SkDeferredCanvas.cpp b/src/utils/SkDeferredCanvas.cpp
index 52926a0..8a4f817 100644
--- a/src/utils/SkDeferredCanvas.cpp
+++ b/src/utils/SkDeferredCanvas.cpp
@@ -9,6 +9,7 @@
 #include "SkDeferredCanvas.h"
 
 #include "SkChunkAlloc.h"
+#include "SkClipStack.h"
 #include "SkColorFilter.h"
 #include "SkDevice.h"
 #include "SkDrawFilter.h"
diff --git a/src/utils/android/SkAndroidSDKCanvas.cpp b/src/utils/android/SkAndroidSDKCanvas.cpp
index 41536b1..a6393d2 100644
--- a/src/utils/android/SkAndroidSDKCanvas.cpp
+++ b/src/utils/android/SkAndroidSDKCanvas.cpp
@@ -8,8 +8,10 @@
 #include "SkAndroidSDKCanvas.h"
 
 #include "SkColorFilter.h"
+#include "SkPaint.h"
 #include "SkPathEffect.h"
 #include "SkShader.h"
+#include "SkTLazy.h"
 
 namespace {
 
diff --git a/src/utils/debugger/SkDebugCanvas.cpp b/src/utils/debugger/SkDebugCanvas.cpp
index 1066d2b..6251c1b 100644
--- a/src/utils/debugger/SkDebugCanvas.cpp
+++ b/src/utils/debugger/SkDebugCanvas.cpp
@@ -1,4 +1,3 @@
-
 /*
  * Copyright 2012 Google Inc.
  *
@@ -6,7 +5,7 @@
  * found in the LICENSE file.
  */
 
-
+#include "SkClipStack.h"
 #include "SkColorPriv.h"
 #include "SkDebugCanvas.h"
 #include "SkDrawCommand.h"
diff --git a/src/utils/debugger/SkDebugCanvas.h b/src/utils/debugger/SkDebugCanvas.h
index e0aed62..612ee57 100644
--- a/src/utils/debugger/SkDebugCanvas.h
+++ b/src/utils/debugger/SkDebugCanvas.h
@@ -12,10 +12,11 @@
 
 #include "SkCanvas.h"
 #include "SkDrawCommand.h"
+#include "SkPath.h"
 #include "SkPathOps.h"
 #include "SkPicture.h"
-#include "SkTArray.h"
 #include "SkString.h"
+#include "SkTArray.h"
 
 class SkNWayCanvas;
 
diff --git a/src/utils/debugger/SkDrawCommand.h b/src/utils/debugger/SkDrawCommand.h
index 7ff5a86..b8eca79 100644
--- a/src/utils/debugger/SkDrawCommand.h
+++ b/src/utils/debugger/SkDrawCommand.h
@@ -10,7 +10,11 @@
 #define SKDRAWCOMMAND_H_
 
 #include "SkCanvas.h"
+#include "SkTLazy.h"
+#include "SkPath.h"
+#include "SkRRect.h"
 #include "SkString.h"
+#include "SkTDArray.h"
 
 class SK_API SkDrawCommand {
 public:
diff --git a/src/utils/debugger/SkObjectParser.cpp b/src/utils/debugger/SkObjectParser.cpp
index d4c8325..d8dbe83 100644
--- a/src/utils/debugger/SkObjectParser.cpp
+++ b/src/utils/debugger/SkObjectParser.cpp
@@ -9,6 +9,7 @@
 #include "SkObjectParser.h"
 #include "SkData.h"
 #include "SkFontDescriptor.h"
+#include "SkPath.h"
 #include "SkRRect.h"
 #include "SkShader.h"
 #include "SkStream.h"
diff --git a/tests/AAClipTest.cpp b/tests/AAClipTest.cpp
index 08dedb4..1c4f391 100644
--- a/tests/AAClipTest.cpp
+++ b/tests/AAClipTest.cpp
@@ -10,6 +10,7 @@
 #include "SkMask.h"
 #include "SkPath.h"
 #include "SkRandom.h"
+#include "SkRRect.h"
 #include "Test.h"
 
 static bool operator==(const SkMask& a, const SkMask& b) {
diff --git a/tests/BlurTest.cpp b/tests/BlurTest.cpp
index 4dad71d..645340a 100644
--- a/tests/BlurTest.cpp
+++ b/tests/BlurTest.cpp
@@ -8,11 +8,12 @@
 #include "SkBlurMask.h"
 #include "SkBlurMaskFilter.h"
 #include "SkBlurDrawLooper.h"
-#include "SkLayerDrawLooper.h"
-#include "SkEmbossMaskFilter.h"
 #include "SkCanvas.h"
+#include "SkEmbossMaskFilter.h"
+#include "SkLayerDrawLooper.h"
 #include "SkMath.h"
 #include "SkPaint.h"
+#include "SkPath.h"
 #include "Test.h"
 
 #if SK_SUPPORT_GPU
diff --git a/tests/CanvasStateTest.cpp b/tests/CanvasStateTest.cpp
index f4db1a5..8b6aa25 100644
--- a/tests/CanvasStateTest.cpp
+++ b/tests/CanvasStateTest.cpp
@@ -302,6 +302,7 @@
 }
 
 #ifdef SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG
+#include "SkClipStack.h"
 DEF_TEST(CanvasState_test_saveLayer_clip, reporter) {
     const int WIDTH = 100;
     const int HEIGHT = 100;
diff --git a/tests/ClipCubicTest.cpp b/tests/ClipCubicTest.cpp
index 31b38f2..0970b83 100644
--- a/tests/ClipCubicTest.cpp
+++ b/tests/ClipCubicTest.cpp
@@ -9,6 +9,7 @@
 #include "SkCubicClipper.h"
 #include "SkGeometry.h"
 #include "SkPaint.h"
+#include "SkPath.h"
 #include "Test.h"
 
 // Currently the supersampler blitter uses int16_t for its index into an array
diff --git a/tests/DeferredCanvasTest.cpp b/tests/DeferredCanvasTest.cpp
index eb2263e..600315e 100644
--- a/tests/DeferredCanvasTest.cpp
+++ b/tests/DeferredCanvasTest.cpp
@@ -11,6 +11,7 @@
 #include "SkBitmapProcShader.h"
 #include "SkDeferredCanvas.h"
 #include "SkGradientShader.h"
+#include "SkPath.h"
 #include "SkShader.h"
 #include "SkSurface.h"
 #include "Test.h"
diff --git a/tests/DrawBitmapRectTest.cpp b/tests/DrawBitmapRectTest.cpp
index 7d8798c..52c7433 100644
--- a/tests/DrawBitmapRectTest.cpp
+++ b/tests/DrawBitmapRectTest.cpp
@@ -12,6 +12,7 @@
 #include "SkImageGeneratorPriv.h"
 #include "SkMatrixUtils.h"
 #include "SkPaint.h"
+#include "SkPath.h"
 #include "SkRandom.h"
 #include "SkShader.h"
 #include "SkSurface.h"
diff --git a/tests/SurfaceTest.cpp b/tests/SurfaceTest.cpp
index 3d6e59e..192abd7 100644
--- a/tests/SurfaceTest.cpp
+++ b/tests/SurfaceTest.cpp
@@ -10,6 +10,7 @@
 #include "SkDevice.h"
 #include "SkImageEncoder.h"
 #include "SkImage_Base.h"
+#include "SkPath.h"
 #include "SkRRect.h"
 #include "SkSurface.h"
 #include "SkUtils.h"