[bazel] Update Clang (and IWYU) to 15.0.1 using CIPD

Suggested review order:
 - toolchain/download_linux_amd64_toolchain.bzl to see how we
   download the CIPD package that was uploaded to our GCS mirror
   instead of the GitHub or Debian packages used otherwise.
 - toolchain/linux_trampolines/clang_trampoline_linux.sh to
   see that IWYU now doesn't return an error code if all the
   compilation checks out, so we had to add --error to specify
   the return code we wanted on an IWYU violation (3, chosen
   arbitrarily).
 - Rest of toolchain/ to see changes necessary for new file
   names and locations.
 - All the rest of the .cpp and .h files which were what the
   new IWYU said they should be (e.g. changes to enum classes).
   We intentionally had SkSpan export <type_traits> because
   IWYU doesn't handle the std::remove_pointer_t in the template
   cleanly.

Change-Id: I5179bd78a9683d98e46d649284c154db4d3c7d13
Bug: skia:12541
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/594807
Owners-Override: Kevin Lubick <[email protected]>
Reviewed-by: Ben Wagner <[email protected]>
diff --git a/client_utils/android/BitmapRegionDecoder.cpp b/client_utils/android/BitmapRegionDecoder.cpp
index 8727a0b..c5262b8 100644
--- a/client_utils/android/BitmapRegionDecoder.cpp
+++ b/client_utils/android/BitmapRegionDecoder.cpp
@@ -8,6 +8,7 @@
 #include "client_utils/android/BitmapRegionDecoder.h"
 #include "client_utils/android/BitmapRegionDecoderPriv.h"
 #include "include/codec/SkAndroidCodec.h"
+#include "include/core/SkEncodedImageFormat.h"
 #include "src/codec/SkCodecPriv.h"
 
 namespace android {
diff --git a/include/codec/SkAndroidCodec.h b/include/codec/SkAndroidCodec.h
index 0262583..bb6f0a3 100644
--- a/include/codec/SkAndroidCodec.h
+++ b/include/codec/SkAndroidCodec.h
@@ -9,10 +9,7 @@
 #define SkAndroidCodec_DEFINED
 
 #include "include/codec/SkCodec.h"
-#include "include/core/SkAlphaType.h"
 #include "include/core/SkColorSpace.h"
-#include "include/core/SkColorType.h"
-#include "include/core/SkEncodedImageFormat.h"
 #include "include/core/SkImageInfo.h"
 #include "include/core/SkRefCnt.h"
 #include "include/core/SkSize.h"
@@ -21,6 +18,11 @@
 #include "include/private/SkNoncopyable.h"
 #include "modules/skcms/skcms.h"
 
+// TODO(kjlubick, bungeman) Replace these includes with forward declares
+#include "include/core/SkAlphaType.h" // IWYU pragma: keep
+#include "include/core/SkColorType.h" // IWYU pragma: keep
+#include "include/core/SkEncodedImageFormat.h" // IWYU pragma: keep
+
 #include <cstddef>
 #include <memory>
 
diff --git a/include/codec/SkCodec.h b/include/codec/SkCodec.h
index 5af847a..d3ccbfc 100644
--- a/include/codec/SkCodec.h
+++ b/include/codec/SkCodec.h
@@ -8,10 +8,7 @@
 #ifndef SkCodec_DEFINED
 #define SkCodec_DEFINED
 
-#include "include/codec/SkCodecAnimation.h"
 #include "include/codec/SkEncodedOrigin.h"
-#include "include/core/SkAlphaType.h"
-#include "include/core/SkEncodedImageFormat.h"
 #include "include/core/SkImageInfo.h"
 #include "include/core/SkPixmap.h"
 #include "include/core/SkRect.h"
@@ -28,6 +25,11 @@
 #include <tuple>
 #include <vector>
 
+// TODO(kjlubick, bungeman) replace these includes with forward declares.
+#include "include/codec/SkCodecAnimation.h" // IWYU pragma: keep
+#include "include/core/SkAlphaType.h" // IWYU pragma: keep
+#include "include/core/SkEncodedImageFormat.h" // IWYU pragma: keep
+
 class SkAndroidCodec;
 class SkData;
 class SkFrameHolder;
diff --git a/include/core/SkImageEncoder.h b/include/core/SkImageEncoder.h
index be0183c..a5a0944 100644
--- a/include/core/SkImageEncoder.h
+++ b/include/core/SkImageEncoder.h
@@ -8,10 +8,12 @@
 #ifndef SkImageEncoder_DEFINED
 #define SkImageEncoder_DEFINED
 
-#include "include/core/SkEncodedImageFormat.h"
 #include "include/core/SkRefCnt.h"
 #include "include/core/SkTypes.h"
 
+// TODO(kjlubick, bungeman) replace this include with a forward declare.
+#include "include/core/SkEncodedImageFormat.h" // IWYU pragma: keep
+
 class SkBitmap;
 class SkData;
 class SkPixmap;
diff --git a/include/core/SkSpan.h b/include/core/SkSpan.h
index b5367ee..4e4d02c 100644
--- a/include/core/SkSpan.h
+++ b/include/core/SkSpan.h
@@ -14,9 +14,12 @@
 #include <initializer_list>
 #include <iterator>
 #include <limits>
-#include <type_traits>
 #include <utility>
 
+// Having this be an export works around IWYU churn related to
+// https://github.com/include-what-you-use/include-what-you-use/issues/1121
+#include <type_traits> // IWYU pragma: export
+
 // Add macro to check the lifetime of initializer_list arguments. initializer_list has a very
 // short life span, and can only be used as a parameter, and not as a variable.
 #if defined(__clang__) && defined(__has_cpp_attribute) && __has_cpp_attribute(clang::lifetimebound)
diff --git a/include/effects/SkColorMatrix.h b/include/effects/SkColorMatrix.h
index ee470f9..40c1631 100644
--- a/include/effects/SkColorMatrix.h
+++ b/include/effects/SkColorMatrix.h
@@ -8,9 +8,11 @@
 #ifndef SkColorMatrix_DEFINED
 #define SkColorMatrix_DEFINED
 
-#include "include/core/SkImageInfo.h"
 #include "include/core/SkTypes.h"
 
+// TODO(kjlubick, bungeman) replace this include with a forward declare.
+#include "include/core/SkImageInfo.h" // IWYU pragma: keep
+
 #include <algorithm>
 #include <array>
 
diff --git a/include/private/SkSLModifiers.h b/include/private/SkSLModifiers.h
index 732810b..b30e224 100644
--- a/include/private/SkSLModifiers.h
+++ b/include/private/SkSLModifiers.h
@@ -10,9 +10,10 @@
 
 #include "include/private/SkSLLayout.h"
 
-#include <cstddef>
+#include <cstddef> // IWYU pragma: keep
 #include <memory>
 #include <string>
+// IWYU pragma: no_include <cwchar>
 
 namespace SkSL {
 
diff --git a/include/utils/SkNWayCanvas.h b/include/utils/SkNWayCanvas.h
index 5ef7a10..f675e83 100644
--- a/include/utils/SkNWayCanvas.h
+++ b/include/utils/SkNWayCanvas.h
@@ -9,10 +9,7 @@
 #ifndef SkNWayCanvas_DEFINED
 #define SkNWayCanvas_DEFINED
 
-#include "include/core/SkBlendMode.h"
-#include "include/core/SkCanvas.h"
 #include "include/core/SkCanvasVirtualEnforcer.h"
-#include "include/core/SkClipOp.h"
 #include "include/core/SkColor.h"
 #include "include/core/SkM44.h"
 #include "include/core/SkRefCnt.h"
@@ -22,6 +19,11 @@
 #include "include/private/SkTDArray.h"
 #include "include/utils/SkNoDrawCanvas.h"
 
+// TODO(kjlubick, bungeman) replace these includes with forward declares.
+#include "include/core/SkBlendMode.h" // IWYU pragma: keep
+#include "include/core/SkCanvas.h" // IWYU pragma: keep
+#include "include/core/SkClipOp.h" // IWYU pragma: keep
+
 #include <cstddef>
 
 namespace sktext {
diff --git a/include/utils/SkPaintFilterCanvas.h b/include/utils/SkPaintFilterCanvas.h
index 5ce3c26..0df8241 100644
--- a/include/utils/SkPaintFilterCanvas.h
+++ b/include/utils/SkPaintFilterCanvas.h
@@ -8,7 +8,6 @@
 #ifndef SkPaintFilterCanvas_DEFINED
 #define SkPaintFilterCanvas_DEFINED
 
-#include "include/core/SkBlendMode.h"
 #include "include/core/SkCanvas.h"
 #include "include/core/SkCanvasVirtualEnforcer.h"
 #include "include/core/SkColor.h"
@@ -21,6 +20,9 @@
 #include "include/private/SkTDArray.h"
 #include "include/utils/SkNWayCanvas.h"
 
+// TODO(kjlubick, bungeman) replace this include with a forward declare.
+#include "include/core/SkBlendMode.h" // IWYU pragma: keep
+
 #include <cstddef>
 
 namespace sktext {
diff --git a/modules/skunicode/include/SkUnicode.h b/modules/skunicode/include/SkUnicode.h
index 809dcc9..d09e802 100644
--- a/modules/skunicode/include/SkUnicode.h
+++ b/modules/skunicode/include/SkUnicode.h
@@ -17,7 +17,6 @@
 #include <cstdint>
 #include <memory>
 #include <string>
-#include <type_traits>
 #include <vector>
 
 #if !defined(SKUNICODE_IMPLEMENTATION)
diff --git a/src/android/SkAnimatedImage.cpp b/src/android/SkAnimatedImage.cpp
index 8c32eab..fefe06c 100644
--- a/src/android/SkAnimatedImage.cpp
+++ b/src/android/SkAnimatedImage.cpp
@@ -9,6 +9,7 @@
 #include "include/codec/SkAndroidCodec.h"
 #include "include/codec/SkCodec.h"
 #include "include/core/SkCanvas.h"
+#include "include/core/SkEncodedImageFormat.h"
 #include "include/core/SkPicture.h"
 #include "include/core/SkPictureRecorder.h"
 #include "include/core/SkPixelRef.h"
diff --git a/src/codec/SkAndroidCodec.cpp b/src/codec/SkAndroidCodec.cpp
index 494b173..8720f97 100644
--- a/src/codec/SkAndroidCodec.cpp
+++ b/src/codec/SkAndroidCodec.cpp
@@ -7,7 +7,10 @@
 
 #include "include/codec/SkAndroidCodec.h"
 #include "include/codec/SkCodec.h"
+#include "include/core/SkAlphaType.h"
+#include "include/core/SkColorType.h"
 #include "include/core/SkData.h"
+#include "include/core/SkEncodedImageFormat.h"
 #include "include/core/SkPoint.h"
 #include "include/core/SkRect.h"
 #include "include/core/SkScalar.h"
diff --git a/src/codec/SkAvifCodec.h b/src/codec/SkAvifCodec.h
index 50689c5..9e3e1f5 100644
--- a/src/codec/SkAvifCodec.h
+++ b/src/codec/SkAvifCodec.h
@@ -8,7 +8,6 @@
 #ifndef SkAvifCodec_DEFINED
 #define SkAvifCodec_DEFINED
 
-#include "include/codec/SkCodec.h"
 #include "include/codec/SkEncodedOrigin.h"
 #include "include/core/SkData.h"
 #include "include/core/SkEncodedImageFormat.h"
@@ -21,6 +20,7 @@
 #include <memory>
 #include <vector>
 
+class SkCodec;
 class SkStream;
 struct SkImageInfo;
 struct avifDecoder;
diff --git a/src/codec/SkBmpCodec.cpp b/src/codec/SkBmpCodec.cpp
index 8507653..9ae24e4 100644
--- a/src/codec/SkBmpCodec.cpp
+++ b/src/codec/SkBmpCodec.cpp
@@ -19,7 +19,6 @@
 
 #include <cstring>
 #include <memory>
-#include <type_traits>
 #include <utility>
 
 /*
diff --git a/src/codec/SkBmpMaskCodec.cpp b/src/codec/SkBmpMaskCodec.cpp
index 06eed6d..ed65ff5 100644
--- a/src/codec/SkBmpMaskCodec.cpp
+++ b/src/codec/SkBmpMaskCodec.cpp
@@ -13,7 +13,6 @@
 #include "include/core/SkStream.h"
 #include "include/private/SkEncodedInfo.h"
 #include "include/private/SkTemplates.h"
-#include "src/codec/SkBmpCodec.h"
 #include "src/codec/SkCodecPriv.h"
 
 #include <utility>
diff --git a/src/codec/SkBmpRLECodec.cpp b/src/codec/SkBmpRLECodec.cpp
index 1bd50fb..8c52f48 100644
--- a/src/codec/SkBmpRLECodec.cpp
+++ b/src/codec/SkBmpRLECodec.cpp
@@ -10,6 +10,7 @@
 #include "include/core/SkAlphaType.h"
 #include "include/core/SkColor.h"
 #include "include/core/SkColorPriv.h"
+#include "include/core/SkColorType.h"
 #include "include/core/SkImageInfo.h"
 #include "include/core/SkSize.h"
 #include "include/core/SkStream.h"
diff --git a/src/codec/SkBmpRLECodec.h b/src/codec/SkBmpRLECodec.h
index effc0a3..f7fd2eb 100644
--- a/src/codec/SkBmpRLECodec.h
+++ b/src/codec/SkBmpRLECodec.h
@@ -8,7 +8,6 @@
 #define SkBmpRLECodec_DEFINED
 
 #include "include/codec/SkCodec.h"
-#include "include/core/SkColorType.h"
 #include "include/core/SkRefCnt.h"
 #include "include/core/SkTypes.h"
 #include "src/codec/SkBmpCodec.h"
@@ -20,6 +19,7 @@
 #include <memory>
 
 class SkStream;
+enum SkColorType : int;
 struct SkEncodedInfo;
 struct SkImageInfo;
 
diff --git a/src/codec/SkBmpStandardCodec.cpp b/src/codec/SkBmpStandardCodec.cpp
index 849ec0f..29a6868 100644
--- a/src/codec/SkBmpStandardCodec.cpp
+++ b/src/codec/SkBmpStandardCodec.cpp
@@ -7,13 +7,14 @@
 
 #include "src/codec/SkBmpStandardCodec.h"
 
+#include "include/core/SkAlphaType.h"
 #include "include/core/SkColor.h"
 #include "include/core/SkColorPriv.h"
+#include "include/core/SkColorType.h"
 #include "include/core/SkImageInfo.h"
 #include "include/core/SkSize.h"
 #include "include/core/SkStream.h"
 #include "include/private/SkTemplates.h"
-#include "src/codec/SkBmpCodec.h"
 #include "src/codec/SkCodecPriv.h"
 #include "src/core/SkMathPriv.h"
 
diff --git a/src/codec/SkBmpStandardCodec.h b/src/codec/SkBmpStandardCodec.h
index de192af..09a0727 100644
--- a/src/codec/SkBmpStandardCodec.h
+++ b/src/codec/SkBmpStandardCodec.h
@@ -8,8 +8,6 @@
 #define SkBmpStandardCodec_DEFINED
 
 #include "include/codec/SkCodec.h"
-#include "include/core/SkAlphaType.h"
-#include "include/core/SkColorType.h"
 #include "include/core/SkRefCnt.h"
 #include "include/core/SkTypes.h"
 #include "include/private/SkEncodedInfo.h"
@@ -23,6 +21,8 @@
 
 class SkSampler;
 class SkStream;
+enum SkAlphaType : int;
+enum SkColorType : int;
 struct SkImageInfo;
 
 /*
diff --git a/src/codec/SkCodec.cpp b/src/codec/SkCodec.cpp
index b64200a..eb055c2 100644
--- a/src/codec/SkCodec.cpp
+++ b/src/codec/SkCodec.cpp
@@ -7,6 +7,8 @@
 
 #include "include/codec/SkCodec.h"
 
+#include "include/codec/SkCodecAnimation.h"
+#include "include/core/SkAlphaType.h"
 #include "include/core/SkBitmap.h"
 #include "include/core/SkColorPriv.h"
 #include "include/core/SkColorSpace.h"
diff --git a/src/codec/SkCodecImageGenerator.cpp b/src/codec/SkCodecImageGenerator.cpp
index 6f4371b..8d7ae92 100644
--- a/src/codec/SkCodecImageGenerator.cpp
+++ b/src/codec/SkCodecImageGenerator.cpp
@@ -8,6 +8,7 @@
 #include "src/codec/SkCodecImageGenerator.h"
 
 #include "include/codec/SkEncodedOrigin.h"
+#include "include/core/SkAlphaType.h"
 #include "include/core/SkImageInfo.h"
 #include "include/core/SkPixmap.h"
 #include "include/core/SkTypes.h"
diff --git a/src/codec/SkCodecImageGenerator.h b/src/codec/SkCodecImageGenerator.h
index f35bae7..5823ebd 100644
--- a/src/codec/SkCodecImageGenerator.h
+++ b/src/codec/SkCodecImageGenerator.h
@@ -8,7 +8,6 @@
 #define SkCodecImageGenerator_DEFINED
 
 #include "include/codec/SkCodec.h"
-#include "include/core/SkAlphaType.h"
 #include "include/core/SkData.h"
 #include "include/core/SkImageGenerator.h"
 #include "include/core/SkRefCnt.h"
@@ -19,6 +18,7 @@
 #include <memory>
 #include <optional>
 
+enum SkAlphaType : int;
 struct SkImageInfo;
 
 class SkCodecImageGenerator : public SkImageGenerator {
diff --git a/src/codec/SkHeifCodec.cpp b/src/codec/SkHeifCodec.cpp
index 63bd9bd..074f433 100644
--- a/src/codec/SkHeifCodec.cpp
+++ b/src/codec/SkHeifCodec.cpp
@@ -9,6 +9,7 @@
 
 #ifdef SK_HAS_HEIF_LIBRARY
 #include "include/codec/SkCodec.h"
+#include "include/core/SkEncodedImageFormat.h"
 #include "include/core/SkStream.h"
 #include "include/private/SkColorData.h"
 #include "include/private/SkTemplates.h"
diff --git a/src/codec/SkJpegxlCodec.cpp b/src/codec/SkJpegxlCodec.cpp
index 57505d0..1b99771 100644
--- a/src/codec/SkJpegxlCodec.cpp
+++ b/src/codec/SkJpegxlCodec.cpp
@@ -7,6 +7,7 @@
 
 #include "src/codec/SkJpegxlCodec.h"
 
+#include "include/codec/SkCodec.h"
 #include "include/core/SkColorType.h"
 #include "include/core/SkData.h"
 #include "include/core/SkImageInfo.h"
diff --git a/src/codec/SkJpegxlCodec.h b/src/codec/SkJpegxlCodec.h
index 9fd4f60..d81d992 100644
--- a/src/codec/SkJpegxlCodec.h
+++ b/src/codec/SkJpegxlCodec.h
@@ -8,7 +8,6 @@
 #ifndef SkJpegxlCodec_DEFINED
 #define SkJpegxlCodec_DEFINED
 
-#include "include/codec/SkCodec.h"
 #include "include/core/SkData.h"
 #include "include/core/SkEncodedImageFormat.h"
 #include "include/core/SkRefCnt.h"
@@ -17,6 +16,7 @@
 #include <cstddef>
 #include <memory>
 
+class SkCodec;
 class SkFrameHolder;
 class SkJpegxlCodecPriv;
 class SkStream;
diff --git a/src/codec/SkWbmpCodec.cpp b/src/codec/SkWbmpCodec.cpp
index 079ff9c..70b4fd6 100644
--- a/src/codec/SkWbmpCodec.cpp
+++ b/src/codec/SkWbmpCodec.cpp
@@ -9,6 +9,7 @@
 
 #include "include/codec/SkCodec.h"
 #include "include/core/SkColorType.h"
+#include "include/core/SkEncodedImageFormat.h"
 #include "include/core/SkImageInfo.h"
 #include "include/core/SkSize.h"
 #include "include/core/SkStream.h"
diff --git a/src/codec/SkWbmpCodec.h b/src/codec/SkWbmpCodec.h
index 7a97a2e..68134a4 100644
--- a/src/codec/SkWbmpCodec.h
+++ b/src/codec/SkWbmpCodec.h
@@ -9,7 +9,6 @@
 #define SkCodec_wbmp_DEFINED
 
 #include "include/codec/SkCodec.h"
-#include "include/core/SkEncodedImageFormat.h"
 #include "include/core/SkTypes.h"
 #include "include/private/SkTemplates.h"
 #include "src/codec/SkSwizzler.h"
@@ -20,6 +19,7 @@
 
 class SkSampler;
 class SkStream;
+enum class SkEncodedImageFormat;
 struct SkEncodedInfo;
 struct SkImageInfo;
 
diff --git a/src/codec/SkWebpCodec.cpp b/src/codec/SkWebpCodec.cpp
index 80ff40d..0389a68 100644
--- a/src/codec/SkWebpCodec.cpp
+++ b/src/codec/SkWebpCodec.cpp
@@ -7,6 +7,7 @@
 
 #include "src/codec/SkWebpCodec.h"
 
+#include "include/codec/SkCodec.h"
 #include "include/codec/SkCodecAnimation.h"
 #include "include/core/SkAlphaType.h"
 #include "include/core/SkBitmap.h"
diff --git a/src/codec/SkWebpCodec.h b/src/codec/SkWebpCodec.h
index f6d0de3..e011529 100644
--- a/src/codec/SkWebpCodec.h
+++ b/src/codec/SkWebpCodec.h
@@ -8,7 +8,6 @@
 #ifndef SkWebpCodec_DEFINED
 #define SkWebpCodec_DEFINED
 
-#include "include/codec/SkCodec.h"
 #include "include/codec/SkEncodedOrigin.h"
 #include "include/core/SkData.h"
 #include "include/core/SkEncodedImageFormat.h"
@@ -24,6 +23,7 @@
 #include <vector>
 
 class SkStream;
+class SkCodec;
 struct SkIRect;
 struct SkImageInfo;
 
diff --git a/src/effects/SkDashPathEffect.cpp b/src/effects/SkDashPathEffect.cpp
index ce676e0..23f57eb 100644
--- a/src/effects/SkDashPathEffect.cpp
+++ b/src/effects/SkDashPathEffect.cpp
@@ -18,7 +18,6 @@
 #include "include/private/SkMalloc.h"
 #include "include/private/SkTemplates.h"
 #include "include/private/SkTo.h"
-#include "src/core/SkPathEffectBase.h"
 #include "src/core/SkReadBuffer.h"
 #include "src/core/SkWriteBuffer.h"
 #include "src/effects/SkDashImpl.h"
diff --git a/src/effects/SkOverdrawColorFilter.cpp b/src/effects/SkOverdrawColorFilter.cpp
index 6b3c3be..5968ebb 100644
--- a/src/effects/SkOverdrawColorFilter.cpp
+++ b/src/effects/SkOverdrawColorFilter.cpp
@@ -10,6 +10,7 @@
 #include "include/core/SkColorFilter.h"
 
 #ifdef SK_ENABLE_SKSL
+#include "include/core/SkAlphaType.h"
 #include "include/core/SkData.h"
 #include "include/effects/SkRuntimeEffect.h"
 #include "include/private/SkColorData.h"
diff --git a/src/effects/SkTableColorFilter.cpp b/src/effects/SkTableColorFilter.cpp
index 6e002a7..1c535cf 100644
--- a/src/effects/SkTableColorFilter.cpp
+++ b/src/effects/SkTableColorFilter.cpp
@@ -34,7 +34,6 @@
 #include "include/gpu/GrTypes.h"
 #include "src/gpu/ganesh/GrColorInfo.h"
 #include "src/gpu/ganesh/GrFragmentProcessor.h"
-#include "src/gpu/ganesh/GrProcessor.h"
 #include "src/gpu/ganesh/GrProcessorUnitTest.h"
 #include "src/gpu/ganesh/GrSurfaceProxyView.h"
 #include "src/gpu/ganesh/SkGr.h"
diff --git a/src/effects/imagefilters/SkAlphaThresholdImageFilter.cpp b/src/effects/imagefilters/SkAlphaThresholdImageFilter.cpp
index 420bf0d..3bbfad3 100644
--- a/src/effects/imagefilters/SkAlphaThresholdImageFilter.cpp
+++ b/src/effects/imagefilters/SkAlphaThresholdImageFilter.cpp
@@ -36,7 +36,6 @@
 #include <utility>
 
 #if SK_SUPPORT_GPU
-#include "include/gpu/GrTypes.h"
 #include "include/private/gpu/ganesh/GrTypesPriv.h"
 #include "src/gpu/ganesh/GrColorSpaceXform.h"
 #include "src/gpu/ganesh/GrFragmentProcessor.h"
@@ -52,6 +51,8 @@
 
 class GrRecordingContext;
 class SkSurfaceProps;
+enum GrSurfaceOrigin : int;
+enum class GrProtected : bool;
 
 #endif // SK_SUPPORT_GPU
 
diff --git a/src/effects/imagefilters/SkDisplacementMapImageFilter.cpp b/src/effects/imagefilters/SkDisplacementMapImageFilter.cpp
index c676453..890d4ed 100644
--- a/src/effects/imagefilters/SkDisplacementMapImageFilter.cpp
+++ b/src/effects/imagefilters/SkDisplacementMapImageFilter.cpp
@@ -16,6 +16,7 @@
 #include "include/core/SkPoint.h"
 #include "include/core/SkRect.h"
 #include "include/core/SkRefCnt.h"
+#include "include/core/SkSamplingOptions.h"
 #include "include/core/SkScalar.h"
 #include "include/core/SkSize.h"
 #include "include/core/SkString.h"
@@ -43,7 +44,6 @@
 #include "src/gpu/ganesh/GrColorSpaceXform.h"
 #include "src/gpu/ganesh/GrFragmentProcessor.h"
 #include "src/gpu/ganesh/GrImageInfo.h"
-#include "src/gpu/ganesh/GrProcessor.h"
 #include "src/gpu/ganesh/GrProcessorUnitTest.h"
 #include "src/gpu/ganesh/GrRecordingContextPriv.h"
 #include "src/gpu/ganesh/GrSamplerState.h"
@@ -60,8 +60,6 @@
 
 #if GR_TEST_UTILS
 #include "include/utils/SkRandom.h"
-
-#include <tuple>
 #endif
 
 namespace {
diff --git a/src/effects/imagefilters/SkLightingImageFilter.cpp b/src/effects/imagefilters/SkLightingImageFilter.cpp
index bddcec4..801190a 100644
--- a/src/effects/imagefilters/SkLightingImageFilter.cpp
+++ b/src/effects/imagefilters/SkLightingImageFilter.cpp
@@ -18,6 +18,7 @@
 #include "include/core/SkPoint3.h"
 #include "include/core/SkRect.h"
 #include "include/core/SkRefCnt.h"
+#include "include/core/SkSamplingOptions.h"
 #include "include/core/SkScalar.h"
 #include "include/core/SkString.h"
 #include "include/core/SkTypes.h"
@@ -44,7 +45,6 @@
 #include "src/gpu/ganesh/GrCaps.h"
 #include "src/gpu/ganesh/GrFragmentProcessor.h"
 #include "src/gpu/ganesh/GrImageInfo.h"
-#include "src/gpu/ganesh/GrProcessor.h"
 #include "src/gpu/ganesh/GrProcessorUnitTest.h"
 #include "src/gpu/ganesh/GrRecordingContextPriv.h"
 #include "src/gpu/ganesh/GrSamplerState.h"
@@ -65,8 +65,6 @@
 
 #if GR_TEST_UTILS
 #include "include/utils/SkRandom.h"
-
-#include <tuple>
 #endif
 
 const SkScalar gOneThird = SkIntToScalar(1) / 3;
diff --git a/src/effects/imagefilters/SkMorphologyImageFilter.cpp b/src/effects/imagefilters/SkMorphologyImageFilter.cpp
index 929f040..7ab27bc 100644
--- a/src/effects/imagefilters/SkMorphologyImageFilter.cpp
+++ b/src/effects/imagefilters/SkMorphologyImageFilter.cpp
@@ -42,7 +42,6 @@
 #include "src/gpu/ganesh/GrColorInfo.h"
 #include "src/gpu/ganesh/GrFragmentProcessor.h"
 #include "src/gpu/ganesh/GrImageInfo.h"
-#include "src/gpu/ganesh/GrProcessor.h"
 #include "src/gpu/ganesh/GrProcessorUnitTest.h"
 #include "src/gpu/ganesh/GrRecordingContextPriv.h"
 #include "src/gpu/ganesh/GrSurfaceProxy.h"
diff --git a/src/gpu/ganesh/text/GrAtlasManager.cpp b/src/gpu/ganesh/text/GrAtlasManager.cpp
index afe7ba7..d51b4ef 100644
--- a/src/gpu/ganesh/text/GrAtlasManager.cpp
+++ b/src/gpu/ganesh/text/GrAtlasManager.cpp
@@ -8,6 +8,7 @@
 #include "src/gpu/ganesh/text/GrAtlasManager.h"
 
 #include "include/core/SkColorSpace.h"
+#include "include/core/SkEncodedImageFormat.h"
 #include "src/codec/SkMasks.h"
 #include "src/core/SkAutoMalloc.h"
 #include "src/core/SkDistanceFieldGen.h"
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp
index 79f6093..d78f3f7 100644
--- a/src/image/SkImage.cpp
+++ b/src/image/SkImage.cpp
@@ -7,6 +7,7 @@
 
 #include "include/core/SkBitmap.h"
 #include "include/core/SkData.h"
+#include "include/core/SkEncodedImageFormat.h"
 #include "include/core/SkImageEncoder.h"
 #include "include/core/SkImageFilter.h"
 #include "include/core/SkImageGenerator.h"
diff --git a/src/pathops/SkOpContour.h b/src/pathops/SkOpContour.h
index 8b49a76..c97f7e9 100644
--- a/src/pathops/SkOpContour.h
+++ b/src/pathops/SkOpContour.h
@@ -21,6 +21,7 @@
 class SkOpAngle;
 class SkOpCoincidence;
 class SkPathWriter;
+enum class SkOpRayDir;
 struct SkOpRayHit;
 
 class SkOpContour {
diff --git a/src/pathops/SkPathOpsDebug.h b/src/pathops/SkPathOpsDebug.h
index f326546..8580604 100644
--- a/src/pathops/SkPathOpsDebug.h
+++ b/src/pathops/SkPathOpsDebug.h
@@ -28,8 +28,6 @@
 struct SkDPoint;
 struct SkDQuad;
 
-enum class SkOpPhase : char;
-
 // define this when running fuzz
 // #define SK_BUILD_FOR_FUZZER
 
@@ -156,6 +154,8 @@
 #endif
 
 #if DEBUG_COIN
+enum class SkOpPhase : char;
+
     #define DEBUG_COIN_DECLARE_ONLY_PARAMS() \
             int lineNo, SkOpPhase phase, int iteration
     #define DEBUG_COIN_DECLARE_PARAMS() \
diff --git a/src/sksl/SkSLAnalysis.cpp b/src/sksl/SkSLAnalysis.cpp
index ba9481a..eacd70e 100644
--- a/src/sksl/SkSLAnalysis.cpp
+++ b/src/sksl/SkSLAnalysis.cpp
@@ -10,6 +10,7 @@
 #include "include/core/SkSpan.h"
 #include "include/core/SkTypes.h"
 #include "include/private/SkSLDefines.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLLayout.h"
 #include "include/private/SkSLModifiers.h"
 #include "include/private/SkSLProgramElement.h"
@@ -58,7 +59,6 @@
 #include <optional>
 #include <string>
 #include <string_view>
-#include <type_traits>
 
 namespace SkSL {
 
diff --git a/src/sksl/SkSLCompiler.cpp b/src/sksl/SkSLCompiler.cpp
index 89f8bc2..e538eee 100644
--- a/src/sksl/SkSLCompiler.cpp
+++ b/src/sksl/SkSLCompiler.cpp
@@ -8,6 +8,8 @@
 #include "src/sksl/SkSLCompiler.h"
 
 #include "include/private/SkSLDefines.h"
+#include "include/private/SkSLIRNode.h"
+#include "include/private/SkSLProgramKind.h"
 #include "include/private/SkSLSymbol.h"
 #include "include/sksl/DSLCore.h"
 #include "include/sksl/DSLModifiers.h"
diff --git a/src/sksl/SkSLCompiler.h b/src/sksl/SkSLCompiler.h
index 0b695fe..1cde862 100644
--- a/src/sksl/SkSLCompiler.h
+++ b/src/sksl/SkSLCompiler.h
@@ -11,12 +11,12 @@
 #include "include/core/SkSize.h"
 #include "include/core/SkTypes.h"
 #include "include/private/SkSLProgramElement.h"
-#include "include/private/SkSLProgramKind.h"
 #include "include/sksl/SkSLErrorReporter.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/SkSLContext.h"  // IWYU pragma: keep
 
 #include <array>
+#include <cstdint>
 #include <memory>
 #include <string>
 #include <string_view>
@@ -47,11 +47,12 @@
 class Inliner;
 class ModifiersPool;
 class OutputStream;
+class ProgramUsage;
+class SymbolTable;
+enum class ProgramKind : int8_t;
 struct Program;
 struct ProgramSettings;
-class ProgramUsage;
 struct ShaderCaps;
-class SymbolTable;
 
 struct Module {
     const Module*                                fParent = nullptr;
diff --git a/src/sksl/SkSLInliner.cpp b/src/sksl/SkSLInliner.cpp
index 64df5bb..5404f50 100644
--- a/src/sksl/SkSLInliner.cpp
+++ b/src/sksl/SkSLInliner.cpp
@@ -12,6 +12,7 @@
 #include "include/core/SkSpan.h"
 #include "include/core/SkTypes.h"
 #include "include/private/SkSLDefines.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLModifiers.h"
 #include "include/private/SkSLProgramElement.h"
 #include "include/private/SkSLStatement.h"
diff --git a/src/sksl/SkSLModuleLoader.cpp b/src/sksl/SkSLModuleLoader.cpp
index 729939b..6d7cee7 100644
--- a/src/sksl/SkSLModuleLoader.cpp
+++ b/src/sksl/SkSLModuleLoader.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 "src/sksl/SkSLModuleLoader.h"
 
 #include "include/core/SkTypes.h"
 #include "include/private/SkMutex.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLModifiers.h"
 #include "include/private/SkSLProgramElement.h"
 #include "include/private/SkSLProgramKind.h"
@@ -14,7 +16,6 @@
 #include "src/sksl/SkSLBuiltinTypes.h"
 #include "src/sksl/SkSLCompiler.h"
 #include "src/sksl/SkSLModifiersPool.h"
-#include "src/sksl/SkSLModuleLoader.h"
 #include "src/sksl/ir/SkSLSymbolTable.h"
 #include "src/sksl/ir/SkSLType.h"
 #include "src/sksl/ir/SkSLVariable.h"
diff --git a/src/sksl/SkSLParser.cpp b/src/sksl/SkSLParser.cpp
index 4bf94d6..585c8cc 100644
--- a/src/sksl/SkSLParser.cpp
+++ b/src/sksl/SkSLParser.cpp
@@ -32,7 +32,6 @@
 #include <climits>
 #include <initializer_list>
 #include <memory>
-#include <type_traits>
 #include <utility>
 #include <vector>
 
diff --git a/src/sksl/SkSLParser.h b/src/sksl/SkSLParser.h
index 3a23fe9..ddda68e 100644
--- a/src/sksl/SkSLParser.h
+++ b/src/sksl/SkSLParser.h
@@ -10,7 +10,6 @@
 
 #include "include/core/SkTypes.h"
 #include "include/private/SkSLDefines.h"
-#include "include/private/SkSLProgramKind.h"
 #include "include/private/SkTArray.h"
 #include "include/sksl/DSLCore.h"
 #include "include/sksl/DSLExpression.h"
@@ -25,6 +24,7 @@
 #include "src/sksl/SkSLProgramSettings.h"
 
 #include <cstddef>
+#include <cstdint>
 #include <memory>
 #include <optional>
 #include <string>
@@ -33,9 +33,10 @@
 namespace SkSL {
 
 class Compiler;
+class SymbolTable;
+enum class ProgramKind : int8_t;
 struct Module;
 struct Program;
-class SymbolTable;
 
 namespace dsl {
 class DSLBlock;
diff --git a/src/sksl/SkSLThreadContext.h b/src/sksl/SkSLThreadContext.h
index f808d8f..0a63747 100644
--- a/src/sksl/SkSLThreadContext.h
+++ b/src/sksl/SkSLThreadContext.h
@@ -9,12 +9,12 @@
 #define SKSL_THREADCONTEXT
 
 #include "include/core/SkTypes.h"
-#include "include/private/SkSLProgramKind.h"
 #include "include/sksl/SkSLErrorReporter.h"
 #include "src/sksl/SkSLContext.h"
 #include "src/sksl/SkSLProgramSettings.h"
 #include "src/sksl/ir/SkSLProgram.h"
 
+#include <cstdint>
 #include <memory>
 #include <string_view>
 #include <vector>
@@ -23,13 +23,14 @@
 
 class Compiler;
 class ModifiersPool;
-struct Module;
 class Pool;
 class Position;
 class ProgramElement;
 class SymbolTable;
 class Variable;
+enum class ProgramKind : int8_t;
 struct Modifiers;
+struct Module;
 
 namespace dsl {
 
diff --git a/src/sksl/SkSLUtil.cpp b/src/sksl/SkSLUtil.cpp
index c9cf88d..3c13fe0 100644
--- a/src/sksl/SkSLUtil.cpp
+++ b/src/sksl/SkSLUtil.cpp
@@ -7,6 +7,7 @@
 
 #include "src/sksl/SkSLUtil.h"
 
+#include "src/core/SkSLTypeShared.h"
 #include "src/sksl/SkSLBuiltinTypes.h"
 #include "src/sksl/SkSLContext.h"
 #include "src/sksl/SkSLOutputStream.h"
diff --git a/src/sksl/SkSLUtil.h b/src/sksl/SkSLUtil.h
index 1018036..a40387a 100644
--- a/src/sksl/SkSLUtil.h
+++ b/src/sksl/SkSLUtil.h
@@ -8,15 +8,13 @@
 #ifndef SKSL_UTIL
 #define SKSL_UTIL
 
+#include "include/core/SkTypes.h"
 #include "include/sksl/SkSLVersion.h"
-#include "src/core/SkSLTypeShared.h"
 #include "src/sksl/SkSLGLSL.h"
 
 #include <memory>
 
-#ifndef SKSL_STANDALONE
-#include "include/core/SkTypes.h"
-#endif // SKSL_STANDALONE
+enum class SkSLType : char;
 
 namespace SkSL {
 
diff --git a/src/sksl/analysis/SkSLCanExitWithoutReturningValue.cpp b/src/sksl/analysis/SkSLCanExitWithoutReturningValue.cpp
index 22153786..015f233 100644
--- a/src/sksl/analysis/SkSLCanExitWithoutReturningValue.cpp
+++ b/src/sksl/analysis/SkSLCanExitWithoutReturningValue.cpp
@@ -6,8 +6,8 @@
  */
 
 #include "include/private/SkSLDefines.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLStatement.h"
-#include "include/private/SkTArray.h"
 #include "src/sksl/SkSLAnalysis.h"
 #include "src/sksl/analysis/SkSLProgramVisitor.h"
 #include "src/sksl/ir/SkSLDoStatement.h"
diff --git a/src/sksl/analysis/SkSLCheckProgramStructure.cpp b/src/sksl/analysis/SkSLCheckProgramStructure.cpp
index 8eac06b..c70f714 100644
--- a/src/sksl/analysis/SkSLCheckProgramStructure.cpp
+++ b/src/sksl/analysis/SkSLCheckProgramStructure.cpp
@@ -5,7 +5,8 @@
  * found in the LICENSE file.
  */
 
-#include "include/core/SkTypes.h" // IWYU pragma: keep
+#include "include/core/SkTypes.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLProgramElement.h"
 #include "include/private/SkSLStatement.h"
 #include "include/private/SkTHash.h"
@@ -25,7 +26,6 @@
 #include <cstddef>
 #include <memory>
 #include <string>
-#include <type_traits>
 #include <utility>
 #include <vector>
 
diff --git a/src/sksl/analysis/SkSLFinalizationChecks.cpp b/src/sksl/analysis/SkSLFinalizationChecks.cpp
index e37afa7..1fe4d4c 100644
--- a/src/sksl/analysis/SkSLFinalizationChecks.cpp
+++ b/src/sksl/analysis/SkSLFinalizationChecks.cpp
@@ -7,6 +7,7 @@
 
 #include "include/core/SkTypes.h"
 #include "include/private/SkSLDefines.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLLayout.h"
 #include "include/private/SkSLModifiers.h"
 #include "include/private/SkSLProgramElement.h"
diff --git a/src/sksl/analysis/SkSLGetLoopUnrollInfo.cpp b/src/sksl/analysis/SkSLGetLoopUnrollInfo.cpp
index 1efad38..99a720f 100644
--- a/src/sksl/analysis/SkSLGetLoopUnrollInfo.cpp
+++ b/src/sksl/analysis/SkSLGetLoopUnrollInfo.cpp
@@ -7,6 +7,7 @@
 
 #include "include/core/SkTypes.h"
 #include "include/private/SkFloatingPoint.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLStatement.h"
 #include "include/sksl/SkSLErrorReporter.h"
 #include "include/sksl/SkSLOperator.h"
diff --git a/src/sksl/analysis/SkSLHasSideEffects.cpp b/src/sksl/analysis/SkSLHasSideEffects.cpp
index 0c63fa9..dbb2b14 100644
--- a/src/sksl/analysis/SkSLHasSideEffects.cpp
+++ b/src/sksl/analysis/SkSLHasSideEffects.cpp
@@ -6,6 +6,7 @@
  */
 
 #include "include/core/SkTypes.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLModifiers.h"
 #include "include/sksl/SkSLOperator.h"
 #include "src/sksl/SkSLAnalysis.h"
diff --git a/src/sksl/analysis/SkSLIsConstantExpression.cpp b/src/sksl/analysis/SkSLIsConstantExpression.cpp
index f61e586..c22fb01 100644
--- a/src/sksl/analysis/SkSLIsConstantExpression.cpp
+++ b/src/sksl/analysis/SkSLIsConstantExpression.cpp
@@ -6,6 +6,7 @@
  */
 
 #include "include/core/SkTypes.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLModifiers.h"
 #include "include/sksl/SkSLOperator.h"
 #include "src/sksl/SkSLAnalysis.h"
diff --git a/src/sksl/analysis/SkSLIsSameExpressionTree.cpp b/src/sksl/analysis/SkSLIsSameExpressionTree.cpp
index 9826283..3e64b10 100644
--- a/src/sksl/analysis/SkSLIsSameExpressionTree.cpp
+++ b/src/sksl/analysis/SkSLIsSameExpressionTree.cpp
@@ -8,6 +8,7 @@
 #include "include/core/SkSpan.h"
 #include "include/core/SkTypes.h"
 #include "include/private/SkSLDefines.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkTArray.h"
 #include "include/sksl/SkSLOperator.h"
 #include "src/sksl/SkSLAnalysis.h"
diff --git a/src/sksl/analysis/SkSLIsTrivialExpression.cpp b/src/sksl/analysis/SkSLIsTrivialExpression.cpp
index 4ae8e53..4479d12 100644
--- a/src/sksl/analysis/SkSLIsTrivialExpression.cpp
+++ b/src/sksl/analysis/SkSLIsTrivialExpression.cpp
@@ -7,6 +7,7 @@
 
 #include "include/core/SkSpan.h"
 #include "include/core/SkTypes.h"
+#include "include/private/SkSLIRNode.h"
 #include "src/sksl/SkSLAnalysis.h"
 #include "src/sksl/ir/SkSLConstructor.h"
 #include "src/sksl/ir/SkSLExpression.h"
diff --git a/src/sksl/analysis/SkSLSwitchCaseContainsExit.cpp b/src/sksl/analysis/SkSLSwitchCaseContainsExit.cpp
index ffab385..5f24726 100644
--- a/src/sksl/analysis/SkSLSwitchCaseContainsExit.cpp
+++ b/src/sksl/analysis/SkSLSwitchCaseContainsExit.cpp
@@ -7,6 +7,7 @@
 
 #include "src/sksl/SkSLAnalysis.h"
 
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLStatement.h"
 #include "src/sksl/analysis/SkSLProgramVisitor.h"
 
diff --git a/src/sksl/analysis/SkSLSymbolTableStackBuilder.cpp b/src/sksl/analysis/SkSLSymbolTableStackBuilder.cpp
index e7eb717..8bfc0cb 100644
--- a/src/sksl/analysis/SkSLSymbolTableStackBuilder.cpp
+++ b/src/sksl/analysis/SkSLSymbolTableStackBuilder.cpp
@@ -5,6 +5,7 @@
  * found in the LICENSE file.
  */
 
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLStatement.h"
 #include "src/sksl/SkSLAnalysis.h"
 #include "src/sksl/ir/SkSLBlock.h"
diff --git a/src/sksl/codegen/SkSLGLSLCodeGenerator.cpp b/src/sksl/codegen/SkSLGLSLCodeGenerator.cpp
index 552d8ca..63e0a76 100644
--- a/src/sksl/codegen/SkSLGLSLCodeGenerator.cpp
+++ b/src/sksl/codegen/SkSLGLSLCodeGenerator.cpp
@@ -10,6 +10,7 @@
 #include "include/core/SkSpan.h"
 #include "include/core/SkTypes.h"
 #include "include/private/SkSLDefines.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLLayout.h"
 #include "include/private/SkSLModifiers.h"
 #include "include/private/SkSLProgramElement.h"
@@ -18,6 +19,7 @@
 #include "include/private/SkStringView.h"
 #include "include/private/SkTArray.h"
 #include "include/sksl/SkSLErrorReporter.h"
+#include "include/sksl/SkSLOperator.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/SkSLAnalysis.h"
 #include "src/sksl/SkSLBuiltinTypes.h"
diff --git a/src/sksl/codegen/SkSLGLSLCodeGenerator.h b/src/sksl/codegen/SkSLGLSLCodeGenerator.h
index b9207f7..abfc716 100644
--- a/src/sksl/codegen/SkSLGLSLCodeGenerator.h
+++ b/src/sksl/codegen/SkSLGLSLCodeGenerator.h
@@ -8,11 +8,11 @@
 #ifndef SKSL_GLSLCODEGENERATOR
 #define SKSL_GLSLCODEGENERATOR
 
-#include "include/sksl/SkSLOperator.h"
 #include "src/sksl/SkSLContext.h"
 #include "src/sksl/SkSLStringStream.h"
 #include "src/sksl/codegen/SkSLCodeGenerator.h"
 
+#include <cstdint>
 #include <string>
 #include <string_view>
 
@@ -48,6 +48,7 @@
 class VarDeclaration;
 class Variable;
 class VariableReference;
+enum class OperatorPrecedence : uint8_t;
 struct IndexExpression;
 struct Layout;
 struct Modifiers;
diff --git a/src/sksl/codegen/SkSLMetalCodeGenerator.cpp b/src/sksl/codegen/SkSLMetalCodeGenerator.cpp
index b81e0a6..a38dfd6 100644
--- a/src/sksl/codegen/SkSLMetalCodeGenerator.cpp
+++ b/src/sksl/codegen/SkSLMetalCodeGenerator.cpp
@@ -9,12 +9,14 @@
 
 #include "include/core/SkSpan.h"
 #include "include/core/SkTypes.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLLayout.h"
 #include "include/private/SkSLModifiers.h"
 #include "include/private/SkSLProgramElement.h"
 #include "include/private/SkSLStatement.h"
 #include "include/private/SkSLString.h"
 #include "include/sksl/SkSLErrorReporter.h"
+#include "include/sksl/SkSLOperator.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/core/SkScopeExit.h"
 #include "src/sksl/SkSLAnalysis.h"
@@ -69,7 +71,6 @@
 #include <functional>
 #include <limits>
 #include <memory>
-#include <type_traits>
 
 namespace SkSL {
 
diff --git a/src/sksl/codegen/SkSLMetalCodeGenerator.h b/src/sksl/codegen/SkSLMetalCodeGenerator.h
index a5828a6..04f936a 100644
--- a/src/sksl/codegen/SkSLMetalCodeGenerator.h
+++ b/src/sksl/codegen/SkSLMetalCodeGenerator.h
@@ -11,7 +11,6 @@
 #include "include/private/SkSLDefines.h"
 #include "include/private/SkTArray.h"
 #include "include/private/SkTHash.h"
-#include "include/sksl/SkSLOperator.h"
 #include "src/sksl/SkSLStringStream.h"
 #include "src/sksl/codegen/SkSLCodeGenerator.h"
 #include "src/sksl/ir/SkSLType.h"
@@ -57,6 +56,7 @@
 class VarDeclaration;
 class Variable;
 class VariableReference;
+enum class OperatorPrecedence : uint8_t;
 enum IntrinsicKind : int8_t;
 struct IndexExpression;
 struct Layout;
diff --git a/src/sksl/codegen/SkSLPipelineStageCodeGenerator.cpp b/src/sksl/codegen/SkSLPipelineStageCodeGenerator.cpp
index c20e457..725b136 100644
--- a/src/sksl/codegen/SkSLPipelineStageCodeGenerator.cpp
+++ b/src/sksl/codegen/SkSLPipelineStageCodeGenerator.cpp
@@ -12,6 +12,7 @@
 #include "include/core/SkSpan.h"
 #include "include/core/SkTypes.h"
 #include "include/private/SkSLDefines.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLLayout.h"
 #include "include/private/SkSLModifiers.h"
 #include "include/private/SkSLProgramElement.h"
@@ -56,7 +57,6 @@
 
 #include <memory>
 #include <string_view>
-#include <type_traits>
 #include <utility>
 #include <vector>
 
diff --git a/src/sksl/codegen/SkSLSPIRVCodeGenerator.cpp b/src/sksl/codegen/SkSLSPIRVCodeGenerator.cpp
index ef585df..727524e 100644
--- a/src/sksl/codegen/SkSLSPIRVCodeGenerator.cpp
+++ b/src/sksl/codegen/SkSLSPIRVCodeGenerator.cpp
@@ -10,6 +10,7 @@
 #include "include/core/SkSpan.h"
 #include "include/core/SkTypes.h"
 #include "include/private/SkOpts_spi.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLProgramElement.h"
 #include "include/private/SkSLStatement.h"
 #include "include/private/SkSLSymbol.h"
@@ -73,7 +74,6 @@
 #include <cmath>
 #include <set>
 #include <string>
-#include <type_traits>
 #include <utility>
 
 #define kLast_Capability SpvCapabilityMultiViewport
diff --git a/src/sksl/codegen/SkSLSPIRVCodeGenerator.h b/src/sksl/codegen/SkSLSPIRVCodeGenerator.h
index 19be695..633d226 100644
--- a/src/sksl/codegen/SkSLSPIRVCodeGenerator.h
+++ b/src/sksl/codegen/SkSLSPIRVCodeGenerator.h
@@ -11,7 +11,6 @@
 #include "include/private/SkSLDefines.h"
 #include "include/private/SkSLLayout.h"
 #include "include/private/SkSLModifiers.h"
-#include "include/private/SkSLProgramKind.h"
 #include "include/private/SkTArray.h"
 #include "include/private/SkTHash.h"
 #include "src/sksl/SkSLMemoryLayout.h"
@@ -64,6 +63,7 @@
 class TernaryExpression;
 class VarDeclaration;
 class VariableReference;
+enum class ProgramKind : int8_t;
 enum IntrinsicKind : int8_t;
 struct IndexExpression;
 struct Program;
diff --git a/src/sksl/codegen/SkSLVMCodeGenerator.cpp b/src/sksl/codegen/SkSLVMCodeGenerator.cpp
index 4f18efe..ce71d60 100644
--- a/src/sksl/codegen/SkSLVMCodeGenerator.cpp
+++ b/src/sksl/codegen/SkSLVMCodeGenerator.cpp
@@ -15,6 +15,7 @@
 #include "include/core/SkTypes.h"
 #include "include/private/SkFloatingPoint.h"
 #include "include/private/SkSLDefines.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLLayout.h"
 #include "include/private/SkSLModifiers.h"
 #include "include/private/SkSLProgramElement.h"
@@ -68,7 +69,6 @@
 #include <functional>
 #include <iterator>
 #include <string_view>
-#include <type_traits>
 #include <utility>
 
 namespace {
@@ -114,7 +114,6 @@
 }  // namespace
 
 namespace SkSL {
-class IRNode;
 
 namespace {
 
diff --git a/src/sksl/codegen/SkSLWGSLCodeGenerator.cpp b/src/sksl/codegen/SkSLWGSLCodeGenerator.cpp
index e6c1e4e..6e7f436 100644
--- a/src/sksl/codegen/SkSLWGSLCodeGenerator.cpp
+++ b/src/sksl/codegen/SkSLWGSLCodeGenerator.cpp
@@ -15,14 +15,14 @@
 #include "include/core/SkSpan.h"
 #include "include/core/SkTypes.h"
 #include "include/private/SkBitmaskEnum.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLLayout.h"
 #include "include/private/SkSLModifiers.h"
 #include "include/private/SkSLProgramElement.h"
-#include "include/private/SkSLProgramKind.h"
 #include "include/private/SkSLStatement.h"
 #include "include/private/SkSLSymbol.h"
-#include "include/private/SkTArray.h"
 #include "include/sksl/SkSLErrorReporter.h"
+#include "include/sksl/SkSLOperator.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/SkSLAnalysis.h"
 #include "src/sksl/SkSLBuiltinTypes.h"
@@ -60,6 +60,7 @@
 namespace SkSL {
 
 class SymbolTable;
+enum class ProgramKind : int8_t;
 
 namespace {
 
diff --git a/src/sksl/codegen/SkSLWGSLCodeGenerator.h b/src/sksl/codegen/SkSLWGSLCodeGenerator.h
index 005ff45..d1a4a05 100644
--- a/src/sksl/codegen/SkSLWGSLCodeGenerator.h
+++ b/src/sksl/codegen/SkSLWGSLCodeGenerator.h
@@ -10,7 +10,6 @@
 
 #include "include/private/SkSLDefines.h"
 #include "include/private/SkTHash.h"
-#include "include/sksl/SkSLOperator.h"
 #include "src/sksl/codegen/SkSLCodeGenerator.h"
 
 #include <cstdint>
@@ -42,6 +41,7 @@
 class Type;
 class VarDeclaration;
 class VariableReference;
+enum class OperatorPrecedence : uint8_t;
 struct Modifiers;
 struct Program;
 struct Swizzle;
diff --git a/src/sksl/dsl/DSLCore.cpp b/src/sksl/dsl/DSLCore.cpp
index 139f8bb..f00bb63 100644
--- a/src/sksl/dsl/DSLCore.cpp
+++ b/src/sksl/dsl/DSLCore.cpp
@@ -39,7 +39,6 @@
 #include "src/sksl/ir/SkSLTernaryExpression.h"
 #include "src/sksl/ir/SkSLVarDeclarations.h"
 
-#include <type_traits>
 #include <vector>
 
 namespace SkSL {
diff --git a/src/sksl/dsl/DSLType.cpp b/src/sksl/dsl/DSLType.cpp
index 399bcb8..8e6191a 100644
--- a/src/sksl/dsl/DSLType.cpp
+++ b/src/sksl/dsl/DSLType.cpp
@@ -19,11 +19,11 @@
 #include "src/sksl/SkSLThreadContext.h"
 #include "src/sksl/ir/SkSLConstructor.h"
 #include "src/sksl/ir/SkSLStructDefinition.h"
+#include "src/sksl/ir/SkSLSymbolTable.h"
 #include "src/sksl/ir/SkSLType.h"
 
 #include <memory>
 #include <string>
-#include <type_traits>
 #include <vector>
 
 namespace SkSL {
diff --git a/src/sksl/ir/SkSLBinaryExpression.h b/src/sksl/ir/SkSLBinaryExpression.h
index 0504c87..094af55 100644
--- a/src/sksl/ir/SkSLBinaryExpression.h
+++ b/src/sksl/ir/SkSLBinaryExpression.h
@@ -9,6 +9,7 @@
 #define SKSL_BINARYEXPRESSION
 
 #include "include/core/SkTypes.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/sksl/SkSLOperator.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/ir/SkSLExpression.h"
diff --git a/src/sksl/ir/SkSLBlock.h b/src/sksl/ir/SkSLBlock.h
index cf89e96..7bdfdf8 100644
--- a/src/sksl/ir/SkSLBlock.h
+++ b/src/sksl/ir/SkSLBlock.h
@@ -9,8 +9,8 @@
 #define SKSL_BLOCK
 
 #include "include/private/SkSLDefines.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLStatement.h"
-#include "include/private/SkTArray.h"
 #include "include/sksl/SkSLPosition.h"
 
 #include <memory>
diff --git a/src/sksl/ir/SkSLChildCall.h b/src/sksl/ir/SkSLChildCall.h
index ff0ec23..7d48a84 100644
--- a/src/sksl/ir/SkSLChildCall.h
+++ b/src/sksl/ir/SkSLChildCall.h
@@ -9,6 +9,7 @@
 #define SKSL_CHILDCALL
 
 #include "include/private/SkSLDefines.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/ir/SkSLExpression.h"
 
diff --git a/src/sksl/ir/SkSLConstructorArray.h b/src/sksl/ir/SkSLConstructorArray.h
index 9a3c2d5..8dfdb34 100644
--- a/src/sksl/ir/SkSLConstructorArray.h
+++ b/src/sksl/ir/SkSLConstructorArray.h
@@ -9,6 +9,7 @@
 #define SKSL_CONSTRUCTOR_ARRAY
 
 #include "include/private/SkSLDefines.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/ir/SkSLConstructor.h"
 #include "src/sksl/ir/SkSLExpression.h"
diff --git a/src/sksl/ir/SkSLConstructorArrayCast.h b/src/sksl/ir/SkSLConstructorArrayCast.h
index cac775f..7db8251 100644
--- a/src/sksl/ir/SkSLConstructorArrayCast.h
+++ b/src/sksl/ir/SkSLConstructorArrayCast.h
@@ -8,6 +8,7 @@
 #ifndef SKSL_CONSTRUCTOR_ARRAY_CAST
 #define SKSL_CONSTRUCTOR_ARRAY_CAST
 
+#include "include/private/SkSLIRNode.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/ir/SkSLConstructor.h"
 #include "src/sksl/ir/SkSLExpression.h"
diff --git a/src/sksl/ir/SkSLConstructorCompound.h b/src/sksl/ir/SkSLConstructorCompound.h
index 812cb57..5dfd93f 100644
--- a/src/sksl/ir/SkSLConstructorCompound.h
+++ b/src/sksl/ir/SkSLConstructorCompound.h
@@ -9,6 +9,7 @@
 #define SKSL_CONSTRUCTOR_COMPOUND
 
 #include "include/private/SkSLDefines.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/ir/SkSLConstructor.h"
 #include "src/sksl/ir/SkSLExpression.h"
diff --git a/src/sksl/ir/SkSLConstructorCompoundCast.h b/src/sksl/ir/SkSLConstructorCompoundCast.h
index 711f2ed..9dc0827 100644
--- a/src/sksl/ir/SkSLConstructorCompoundCast.h
+++ b/src/sksl/ir/SkSLConstructorCompoundCast.h
@@ -8,6 +8,7 @@
 #ifndef SKSL_CONSTRUCTOR_COMPOUND_CAST
 #define SKSL_CONSTRUCTOR_COMPOUND_CAST
 
+#include "include/private/SkSLIRNode.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/ir/SkSLConstructor.h"
 #include "src/sksl/ir/SkSLExpression.h"
diff --git a/src/sksl/ir/SkSLConstructorDiagonalMatrix.h b/src/sksl/ir/SkSLConstructorDiagonalMatrix.h
index 39a5cc9..65342d7 100644
--- a/src/sksl/ir/SkSLConstructorDiagonalMatrix.h
+++ b/src/sksl/ir/SkSLConstructorDiagonalMatrix.h
@@ -8,6 +8,7 @@
 #ifndef SKSL_CONSTRUCTOR_DIAGONAL_MATRIX
 #define SKSL_CONSTRUCTOR_DIAGONAL_MATRIX
 
+#include "include/private/SkSLIRNode.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/ir/SkSLConstructor.h"
 #include "src/sksl/ir/SkSLExpression.h"
diff --git a/src/sksl/ir/SkSLConstructorMatrixResize.h b/src/sksl/ir/SkSLConstructorMatrixResize.h
index e272e8d..bf1d3f5 100644
--- a/src/sksl/ir/SkSLConstructorMatrixResize.h
+++ b/src/sksl/ir/SkSLConstructorMatrixResize.h
@@ -8,6 +8,7 @@
 #ifndef SKSL_CONSTRUCTOR_MATRIX_RESIZE
 #define SKSL_CONSTRUCTOR_MATRIX_RESIZE
 
+#include "include/private/SkSLIRNode.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/ir/SkSLConstructor.h"
 #include "src/sksl/ir/SkSLExpression.h"
diff --git a/src/sksl/ir/SkSLConstructorScalarCast.h b/src/sksl/ir/SkSLConstructorScalarCast.h
index fd085ee..295d19d 100644
--- a/src/sksl/ir/SkSLConstructorScalarCast.h
+++ b/src/sksl/ir/SkSLConstructorScalarCast.h
@@ -8,6 +8,7 @@
 #ifndef SKSL_CONSTRUCTOR_SCALAR_CAST
 #define SKSL_CONSTRUCTOR_SCALAR_CAST
 
+#include "include/private/SkSLIRNode.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/ir/SkSLConstructor.h"
 #include "src/sksl/ir/SkSLExpression.h"
diff --git a/src/sksl/ir/SkSLConstructorSplat.h b/src/sksl/ir/SkSLConstructorSplat.h
index 4add9fe..4b342d8 100644
--- a/src/sksl/ir/SkSLConstructorSplat.h
+++ b/src/sksl/ir/SkSLConstructorSplat.h
@@ -9,6 +9,7 @@
 #define SKSL_CONSTRUCTOR_SPLAT
 
 #include "include/core/SkTypes.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/ir/SkSLConstructor.h"
 #include "src/sksl/ir/SkSLExpression.h"
diff --git a/src/sksl/ir/SkSLConstructorStruct.h b/src/sksl/ir/SkSLConstructorStruct.h
index 0987c7d..dab7c6c 100644
--- a/src/sksl/ir/SkSLConstructorStruct.h
+++ b/src/sksl/ir/SkSLConstructorStruct.h
@@ -9,6 +9,7 @@
 #define SKSL_CONSTRUCTOR_STRUCT
 
 #include "include/private/SkSLDefines.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/ir/SkSLConstructor.h"
 #include "src/sksl/ir/SkSLExpression.h"
diff --git a/src/sksl/ir/SkSLDiscardStatement.h b/src/sksl/ir/SkSLDiscardStatement.h
index 19944f0..1e947d7 100644
--- a/src/sksl/ir/SkSLDiscardStatement.h
+++ b/src/sksl/ir/SkSLDiscardStatement.h
@@ -8,6 +8,7 @@
 #ifndef SKSL_DISCARDSTATEMENT
 #define SKSL_DISCARDSTATEMENT
 
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLStatement.h"
 #include "include/sksl/SkSLPosition.h"
 
diff --git a/src/sksl/ir/SkSLDoStatement.h b/src/sksl/ir/SkSLDoStatement.h
index c0acf75..461252b 100644
--- a/src/sksl/ir/SkSLDoStatement.h
+++ b/src/sksl/ir/SkSLDoStatement.h
@@ -8,6 +8,7 @@
 #ifndef SKSL_DOSTATEMENT
 #define SKSL_DOSTATEMENT
 
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLStatement.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/ir/SkSLExpression.h"
diff --git a/src/sksl/ir/SkSLExpressionStatement.h b/src/sksl/ir/SkSLExpressionStatement.h
index 47166a2..d213ad2 100644
--- a/src/sksl/ir/SkSLExpressionStatement.h
+++ b/src/sksl/ir/SkSLExpressionStatement.h
@@ -8,6 +8,7 @@
 #ifndef SKSL_EXPRESSIONSTATEMENT
 #define SKSL_EXPRESSIONSTATEMENT
 
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLStatement.h"
 #include "src/sksl/ir/SkSLExpression.h"
 
diff --git a/src/sksl/ir/SkSLFieldAccess.h b/src/sksl/ir/SkSLFieldAccess.h
index 92652cf..51725b6 100644
--- a/src/sksl/ir/SkSLFieldAccess.h
+++ b/src/sksl/ir/SkSLFieldAccess.h
@@ -8,6 +8,7 @@
 #ifndef SKSL_FIELDACCESS
 #define SKSL_FIELDACCESS
 
+#include "include/private/SkSLIRNode.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/ir/SkSLExpression.h"
 #include "src/sksl/ir/SkSLType.h"
diff --git a/src/sksl/ir/SkSLForStatement.cpp b/src/sksl/ir/SkSLForStatement.cpp
index 307cccd..8777f66 100644
--- a/src/sksl/ir/SkSLForStatement.cpp
+++ b/src/sksl/ir/SkSLForStatement.cpp
@@ -9,7 +9,6 @@
 
 #include "include/core/SkTypes.h"
 #include "include/private/SkSLDefines.h"
-#include "include/private/SkTArray.h"
 #include "include/sksl/SkSLErrorReporter.h"
 #include "src/sksl/SkSLAnalysis.h"
 #include "src/sksl/SkSLBuiltinTypes.h"
diff --git a/src/sksl/ir/SkSLForStatement.h b/src/sksl/ir/SkSLForStatement.h
index 60e1831..468df41 100644
--- a/src/sksl/ir/SkSLForStatement.h
+++ b/src/sksl/ir/SkSLForStatement.h
@@ -8,6 +8,7 @@
 #ifndef SKSL_FORSTATEMENT
 #define SKSL_FORSTATEMENT
 
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLStatement.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/ir/SkSLExpression.h"
diff --git a/src/sksl/ir/SkSLFunctionCall.h b/src/sksl/ir/SkSLFunctionCall.h
index 445186a..9f31a52 100644
--- a/src/sksl/ir/SkSLFunctionCall.h
+++ b/src/sksl/ir/SkSLFunctionCall.h
@@ -9,6 +9,7 @@
 #define SKSL_FUNCTIONCALL
 
 #include "include/private/SkSLDefines.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/ir/SkSLExpression.h"
 
diff --git a/src/sksl/ir/SkSLFunctionDeclaration.h b/src/sksl/ir/SkSLFunctionDeclaration.h
index 89afaee..8d8659f 100644
--- a/src/sksl/ir/SkSLFunctionDeclaration.h
+++ b/src/sksl/ir/SkSLFunctionDeclaration.h
@@ -9,6 +9,7 @@
 #define SKSL_FUNCTIONDECLARATION
 
 #include "include/core/SkTypes.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLSymbol.h"
 #include "include/private/SkTArray.h"
 #include "src/sksl/SkSLIntrinsicList.h"
diff --git a/src/sksl/ir/SkSLFunctionDefinition.h b/src/sksl/ir/SkSLFunctionDefinition.h
index 291c797..7b77b68 100644
--- a/src/sksl/ir/SkSLFunctionDefinition.h
+++ b/src/sksl/ir/SkSLFunctionDefinition.h
@@ -8,6 +8,7 @@
 #ifndef SKSL_FUNCTIONDEFINITION
 #define SKSL_FUNCTIONDEFINITION
 
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLProgramElement.h"
 #include "include/private/SkSLStatement.h"
 #include "include/sksl/SkSLPosition.h"
diff --git a/src/sksl/ir/SkSLIfStatement.h b/src/sksl/ir/SkSLIfStatement.h
index 0b6993c..3ece6bc 100644
--- a/src/sksl/ir/SkSLIfStatement.h
+++ b/src/sksl/ir/SkSLIfStatement.h
@@ -8,6 +8,7 @@
 #ifndef SKSL_IFSTATEMENT
 #define SKSL_IFSTATEMENT
 
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLStatement.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/ir/SkSLExpression.h"
diff --git a/src/sksl/ir/SkSLIndexExpression.h b/src/sksl/ir/SkSLIndexExpression.h
index 3740681..155885f 100644
--- a/src/sksl/ir/SkSLIndexExpression.h
+++ b/src/sksl/ir/SkSLIndexExpression.h
@@ -8,6 +8,7 @@
 #ifndef SKSL_INDEX
 #define SKSL_INDEX
 
+#include "include/private/SkSLIRNode.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/ir/SkSLExpression.h"
 
diff --git a/src/sksl/ir/SkSLInterfaceBlock.cpp b/src/sksl/ir/SkSLInterfaceBlock.cpp
index 3b67e88..f093624 100644
--- a/src/sksl/ir/SkSLInterfaceBlock.cpp
+++ b/src/sksl/ir/SkSLInterfaceBlock.cpp
@@ -7,7 +7,6 @@
 
 #include "include/core/SkSpan.h"
 #include "include/private/SkSLModifiers.h"
-#include "include/private/SkSLProgramKind.h"
 #include "include/private/SkSLString.h"
 #include "include/sksl/SkSLErrorReporter.h"
 #include "src/sksl/SkSLBuiltinTypes.h"
@@ -20,11 +19,13 @@
 #include "src/sksl/ir/SkSLSymbolTable.h"
 
 #include <cstddef>
-#include <type_traits>
+#include <cstdint>
 #include <vector>
 
 namespace SkSL {
 
+enum class ProgramKind : int8_t;
+
 InterfaceBlock::~InterfaceBlock() {
     // Unhook this InterfaceBlock from its associated Variable, since we're being deleted.
     if (fVariable) {
diff --git a/src/sksl/ir/SkSLInterfaceBlock.h b/src/sksl/ir/SkSLInterfaceBlock.h
index a8681a6..a9447dd 100644
--- a/src/sksl/ir/SkSLInterfaceBlock.h
+++ b/src/sksl/ir/SkSLInterfaceBlock.h
@@ -9,6 +9,7 @@
 #define SKSL_INTERFACEBLOCK
 
 #include "include/core/SkTypes.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLProgramElement.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/ir/SkSLType.h"
diff --git a/src/sksl/ir/SkSLLiteral.h b/src/sksl/ir/SkSLLiteral.h
index 0848ff4..d4b0bd1 100644
--- a/src/sksl/ir/SkSLLiteral.h
+++ b/src/sksl/ir/SkSLLiteral.h
@@ -10,12 +10,14 @@
 
 #include "include/core/SkTypes.h"
 #include "include/private/SkSLDefines.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/SkSLBuiltinTypes.h"
 #include "src/sksl/SkSLContext.h"
 #include "src/sksl/ir/SkSLExpression.h"
 #include "src/sksl/ir/SkSLType.h"
 
+#include <cstdint>
 #include <cinttypes>
 #include <memory>
 #include <optional>
@@ -23,6 +25,8 @@
 
 namespace SkSL {
 
+enum class OperatorPrecedence : uint8_t;
+
 /**
  * A literal value. These can contain ints, floats, or booleans.
  */
diff --git a/src/sksl/ir/SkSLPostfixExpression.h b/src/sksl/ir/SkSLPostfixExpression.h
index 47da649..a8d457a 100644
--- a/src/sksl/ir/SkSLPostfixExpression.h
+++ b/src/sksl/ir/SkSLPostfixExpression.h
@@ -8,6 +8,7 @@
 #ifndef SKSL_POSTFIXEXPRESSION
 #define SKSL_POSTFIXEXPRESSION
 
+#include "include/private/SkSLIRNode.h"
 #include "include/sksl/SkSLOperator.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/ir/SkSLExpression.h"
diff --git a/src/sksl/ir/SkSLPrefixExpression.h b/src/sksl/ir/SkSLPrefixExpression.h
index 9b73bf2..58c41d4 100644
--- a/src/sksl/ir/SkSLPrefixExpression.h
+++ b/src/sksl/ir/SkSLPrefixExpression.h
@@ -8,6 +8,7 @@
 #ifndef SKSL_PREFIXEXPRESSION
 #define SKSL_PREFIXEXPRESSION
 
+#include "include/private/SkSLIRNode.h"
 #include "include/sksl/SkSLOperator.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/ir/SkSLExpression.h"
diff --git a/src/sksl/ir/SkSLSetting.h b/src/sksl/ir/SkSLSetting.h
index acef34d..6085744 100644
--- a/src/sksl/ir/SkSLSetting.h
+++ b/src/sksl/ir/SkSLSetting.h
@@ -8,18 +8,22 @@
 #ifndef SKSL_SETTING
 #define SKSL_SETTING
 
+#include "include/private/SkSLIRNode.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/SkSLUtil.h"
 #include "src/sksl/ir/SkSLExpression.h"
 
+#include <cstdint>
 #include <memory>
 #include <string>
 #include <string_view>
 
+
 namespace SkSL {
 
 class Context;
 class Type;
+enum class OperatorPrecedence : uint8_t;
 
 /**
  * Represents a compile-time constant setting, such as sk_Caps.integerSupport. These IRNodes are
diff --git a/src/sksl/ir/SkSLSwitchStatement.h b/src/sksl/ir/SkSLSwitchStatement.h
index 921736a..3eaa2b8 100644
--- a/src/sksl/ir/SkSLSwitchStatement.h
+++ b/src/sksl/ir/SkSLSwitchStatement.h
@@ -9,6 +9,7 @@
 #define SKSL_SWITCHSTATEMENT
 
 #include "include/private/SkSLDefines.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLStatement.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/ir/SkSLExpression.h"
diff --git a/src/sksl/ir/SkSLSwizzle.h b/src/sksl/ir/SkSLSwizzle.h
index 8edc44a..d5c88a2 100644
--- a/src/sksl/ir/SkSLSwizzle.h
+++ b/src/sksl/ir/SkSLSwizzle.h
@@ -10,6 +10,7 @@
 
 #include "include/core/SkTypes.h"
 #include "include/private/SkSLDefines.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/ir/SkSLExpression.h"
 #include "src/sksl/ir/SkSLType.h"
diff --git a/src/sksl/ir/SkSLTernaryExpression.h b/src/sksl/ir/SkSLTernaryExpression.h
index 7487df5..41f864e 100644
--- a/src/sksl/ir/SkSLTernaryExpression.h
+++ b/src/sksl/ir/SkSLTernaryExpression.h
@@ -9,6 +9,7 @@
 #define SKSL_TERNARYEXPRESSION
 
 #include "include/core/SkTypes.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/ir/SkSLExpression.h"
 #include "src/sksl/ir/SkSLType.h"
diff --git a/src/sksl/ir/SkSLType.h b/src/sksl/ir/SkSLType.h
index bdbeb4c..b5b9e00 100644
--- a/src/sksl/ir/SkSLType.h
+++ b/src/sksl/ir/SkSLType.h
@@ -11,6 +11,7 @@
 #include "include/core/SkSpan.h"
 #include "include/core/SkTypes.h"
 #include "include/private/SkSLDefines.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLModifiers.h"
 #include "include/private/SkSLSymbol.h"
 #include "include/sksl/SkSLPosition.h"
diff --git a/src/sksl/ir/SkSLTypeReference.h b/src/sksl/ir/SkSLTypeReference.h
index 32f4021..aaca8a8 100644
--- a/src/sksl/ir/SkSLTypeReference.h
+++ b/src/sksl/ir/SkSLTypeReference.h
@@ -8,17 +8,21 @@
 #ifndef SKSL_TYPEREFERENCE
 #define SKSL_TYPEREFERENCE
 
+#include "include/private/SkSLIRNode.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/SkSLBuiltinTypes.h"
 #include "src/sksl/SkSLContext.h"
 #include "src/sksl/ir/SkSLExpression.h"
 #include "src/sksl/ir/SkSLType.h"
 
+#include <cstdint>
 #include <memory>
 #include <string>
 
 namespace SkSL {
 
+enum class OperatorPrecedence : uint8_t;
+
 /**
  * Represents an identifier referring to a type. This is an intermediate value: TypeReferences are
  * always eventually replaced by Constructors in valid programs.
diff --git a/src/sksl/ir/SkSLVarDeclarations.h b/src/sksl/ir/SkSLVarDeclarations.h
index 62f0835..b905287 100644
--- a/src/sksl/ir/SkSLVarDeclarations.h
+++ b/src/sksl/ir/SkSLVarDeclarations.h
@@ -9,6 +9,7 @@
 #define SKSL_VARDECLARATIONS
 
 #include "include/core/SkTypes.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLProgramElement.h"
 #include "include/private/SkSLStatement.h"
 #include "src/sksl/ir/SkSLExpression.h"
diff --git a/src/sksl/ir/SkSLVariable.h b/src/sksl/ir/SkSLVariable.h
index 8341265..a942928 100644
--- a/src/sksl/ir/SkSLVariable.h
+++ b/src/sksl/ir/SkSLVariable.h
@@ -9,6 +9,7 @@
 #define SKSL_VARIABLE
 
 #include "include/core/SkTypes.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLModifiers.h"
 #include "include/private/SkSLStatement.h"
 #include "include/private/SkSLSymbol.h"
@@ -26,7 +27,6 @@
 class Expression;
 class GlobalVarDeclaration;
 class InterfaceBlock;
-class IRNode;
 class Mangler;
 class SymbolTable;
 class VarDeclaration;
diff --git a/src/sksl/ir/SkSLVariableReference.h b/src/sksl/ir/SkSLVariableReference.h
index f0899c2..d33c569 100644
--- a/src/sksl/ir/SkSLVariableReference.h
+++ b/src/sksl/ir/SkSLVariableReference.h
@@ -9,6 +9,7 @@
 #define SKSL_VARIABLEREFERENCE
 
 #include "include/core/SkTypes.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/sksl/SkSLPosition.h"
 #include "src/sksl/ir/SkSLExpression.h"
 
@@ -19,6 +20,7 @@
 namespace SkSL {
 
 class Variable;
+enum class OperatorPrecedence : uint8_t;
 
 enum class VariableRefKind : int8_t {
     kRead,
diff --git a/src/sksl/tracing/SkVMDebugTracePlayer.cpp b/src/sksl/tracing/SkVMDebugTracePlayer.cpp
index 09fcf38..fe98602 100644
--- a/src/sksl/tracing/SkVMDebugTracePlayer.cpp
+++ b/src/sksl/tracing/SkVMDebugTracePlayer.cpp
@@ -9,7 +9,6 @@
 
 #include <limits.h>
 #include <algorithm>
-#include <type_traits>
 #include <utility>
 
 namespace SkSL {
diff --git a/src/sksl/transform/SkSLEliminateDeadLocalVariables.cpp b/src/sksl/transform/SkSLEliminateDeadLocalVariables.cpp
index 3d4bf24..347c675 100644
--- a/src/sksl/transform/SkSLEliminateDeadLocalVariables.cpp
+++ b/src/sksl/transform/SkSLEliminateDeadLocalVariables.cpp
@@ -28,6 +28,7 @@
 
 #include <memory>
 #include <utility>
+#include <vector>
 
 namespace SkSL {
 
diff --git a/src/sksl/transform/SkSLEliminateEmptyStatements.cpp b/src/sksl/transform/SkSLEliminateEmptyStatements.cpp
index ac8d472..e36867b 100644
--- a/src/sksl/transform/SkSLEliminateEmptyStatements.cpp
+++ b/src/sksl/transform/SkSLEliminateEmptyStatements.cpp
@@ -5,8 +5,6 @@
  * found in the LICENSE file.
  */
 
-#include "src/sksl/transform/SkSLTransform.h"
-
 #include "include/core/SkSpan.h"
 #include "include/private/SkSLDefines.h"
 #include "include/private/SkSLProgramElement.h"
@@ -15,10 +13,12 @@
 #include "src/sksl/ir/SkSLBlock.h"
 #include "src/sksl/ir/SkSLFunctionDefinition.h"
 #include "src/sksl/transform/SkSLProgramWriter.h"
+#include "src/sksl/transform/SkSLTransform.h"
 
 #include <algorithm>
 #include <iterator>
 #include <memory>
+#include <vector>
 
 namespace SkSL {
 
diff --git a/src/sksl/transform/SkSLEliminateUnreachableCode.cpp b/src/sksl/transform/SkSLEliminateUnreachableCode.cpp
index 34bdb17..a010df6 100644
--- a/src/sksl/transform/SkSLEliminateUnreachableCode.cpp
+++ b/src/sksl/transform/SkSLEliminateUnreachableCode.cpp
@@ -8,6 +8,7 @@
 #include "include/core/SkSpan.h"
 #include "include/core/SkTypes.h"
 #include "include/private/SkSLDefines.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLProgramElement.h"
 #include "include/private/SkSLStatement.h"
 #include "include/private/SkTArray.h"
@@ -23,6 +24,7 @@
 #include "src/sksl/transform/SkSLTransform.h"
 
 #include <memory>
+#include <vector>
 
 namespace SkSL {
 
diff --git a/src/sksl/transform/SkSLFindAndDeclareBuiltinVariables.cpp b/src/sksl/transform/SkSLFindAndDeclareBuiltinVariables.cpp
index 3dc0685..fee2314 100644
--- a/src/sksl/transform/SkSLFindAndDeclareBuiltinVariables.cpp
+++ b/src/sksl/transform/SkSLFindAndDeclareBuiltinVariables.cpp
@@ -7,6 +7,7 @@
 
 #include "include/core/SkSpan.h"
 #include "include/core/SkTypes.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLLayout.h"
 #include "include/private/SkSLModifiers.h"
 #include "include/private/SkSLProgramElement.h"
diff --git a/src/sksl/transform/SkSLRenamePrivateSymbols.cpp b/src/sksl/transform/SkSLRenamePrivateSymbols.cpp
index 4a872a9..99c1cba 100644
--- a/src/sksl/transform/SkSLRenamePrivateSymbols.cpp
+++ b/src/sksl/transform/SkSLRenamePrivateSymbols.cpp
@@ -6,6 +6,7 @@
  */
 
 #include "include/core/SkTypes.h"
+#include "include/private/SkSLIRNode.h"
 #include "include/private/SkSLModifiers.h"
 #include "include/private/SkSLProgramElement.h"
 #include "include/private/SkSLStatement.h"
diff --git a/src/sksl/transform/SkSLReplaceConstVarsWithLiterals.cpp b/src/sksl/transform/SkSLReplaceConstVarsWithLiterals.cpp
index 36c2766..8c74d95 100644
--- a/src/sksl/transform/SkSLReplaceConstVarsWithLiterals.cpp
+++ b/src/sksl/transform/SkSLReplaceConstVarsWithLiterals.cpp
@@ -23,7 +23,6 @@
 #include <memory>
 #include <string>
 #include <string_view>
-#include <type_traits>
 #include <vector>
 
 namespace SkSL {
diff --git a/src/utils/SkCanvasStack.h b/src/utils/SkCanvasStack.h
index 236db83..3b0bbfd 100644
--- a/src/utils/SkCanvasStack.h
+++ b/src/utils/SkCanvasStack.h
@@ -9,7 +9,6 @@
 #define SkCanvasStack_DEFINED
 
 #include "include/core/SkCanvas.h"
-#include "include/core/SkClipOp.h"
 #include "include/core/SkM44.h"
 #include "include/core/SkPoint.h"
 #include "include/core/SkRefCnt.h"
@@ -25,6 +24,7 @@
 class SkPath;
 class SkRRect;
 class SkShader;
+enum class SkClipOp;
 struct SkRect;
 
 /**
diff --git a/src/utils/SkClipStackUtils.cpp b/src/utils/SkClipStackUtils.cpp
index d966b81..0080f7f 100644
--- a/src/utils/SkClipStackUtils.cpp
+++ b/src/utils/SkClipStackUtils.cpp
@@ -7,12 +7,13 @@
 
 #include "src/utils/SkClipStackUtils.h"
 
-#include "include/core/SkClipOp.h"
 #include "include/core/SkPath.h"
 #include "include/core/SkPathTypes.h"
 #include "include/pathops/SkPathOps.h"
 #include "src/core/SkClipStack.h"
 
+enum class SkClipOp;
+
 void SkClipStack_AsPath(const SkClipStack& cs, SkPath* path) {
     path->reset();
     path->setFillType(SkPathFillType::kInverseEvenOdd);
diff --git a/src/utils/SkJSON.cpp b/src/utils/SkJSON.cpp
index 09c1b96..1f4b88e 100644
--- a/src/utils/SkJSON.cpp
+++ b/src/utils/SkJSON.cpp
@@ -17,7 +17,6 @@
 #include "src/utils/SkUTF.h"
 
 #include <cmath>
-#include <cstddef>
 #include <cstdint>
 #include <cstdlib>
 #include <limits>
diff --git a/src/utils/SkNWayCanvas.cpp b/src/utils/SkNWayCanvas.cpp
index c595881..22b01ef 100644
--- a/src/utils/SkNWayCanvas.cpp
+++ b/src/utils/SkNWayCanvas.cpp
@@ -7,16 +7,12 @@
 
 #include "include/utils/SkNWayCanvas.h"
 
-#include "include/core/SkBlendMode.h"
 #include "include/core/SkCanvas.h"
-#include "include/core/SkClipOp.h"
 #include "include/core/SkColor.h"
-#include "include/core/SkM44.h"
 #include "include/core/SkMatrix.h"
 #include "include/core/SkPoint.h"
 #include "include/core/SkRect.h"
 #include "include/core/SkRefCnt.h"
-#include "include/core/SkSamplingOptions.h"
 #include "include/core/SkScalar.h"
 #include "include/core/SkShader.h"
 #include "include/core/SkTypes.h"
diff --git a/src/utils/SkPaintFilterCanvas.cpp b/src/utils/SkPaintFilterCanvas.cpp
index ba1a8f7..e1abe33 100644
--- a/src/utils/SkPaintFilterCanvas.cpp
+++ b/src/utils/SkPaintFilterCanvas.cpp
@@ -7,6 +7,7 @@
 
 #include "include/utils/SkPaintFilterCanvas.h"
 
+#include "include/core/SkBlendMode.h"
 #include "include/core/SkMatrix.h"
 #include "include/core/SkPaint.h"
 #include "include/core/SkPixmap.h"
diff --git a/src/utils/SkParsePath.cpp b/src/utils/SkParsePath.cpp
index 75155fa..5462b14 100644
--- a/src/utils/SkParsePath.cpp
+++ b/src/utils/SkParsePath.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "include/core/SkPath.h"
-#include "include/core/SkPathTypes.h"
 #include "include/core/SkPoint.h"
 #include "include/core/SkScalar.h"
 #include "include/core/SkStream.h"
@@ -18,6 +17,8 @@
 
 #include <cstdio>
 
+enum class SkPathDirection;
+
 static inline bool is_between(int c, int min, int max) {
     return (unsigned)(c - min) <= (unsigned)(max - min);
 }
diff --git a/src/utils/SkShaderUtils.h b/src/utils/SkShaderUtils.h
index 1944de1..d18408d 100644
--- a/src/utils/SkShaderUtils.h
+++ b/src/utils/SkShaderUtils.h
@@ -9,11 +9,13 @@
 #define SkShaderUtils_DEFINED
 
 #include "include/core/SkTypes.h"
-#include "include/private/SkSLProgramKind.h"
 
+#include <cstdint>
 #include <functional>
 #include <string>
 
+namespace SkSL { enum class ProgramKind : int8_t; }
+
 namespace SkShaderUtils {
 
 std::string PrettyPrint(const std::string& string);
diff --git a/src/utils/SkTextUtils.cpp b/src/utils/SkTextUtils.cpp
index 36f1b45..bb907c6 100644
--- a/src/utils/SkTextUtils.cpp
+++ b/src/utils/SkTextUtils.cpp
@@ -9,7 +9,6 @@
 
 #include "include/core/SkCanvas.h"
 #include "include/core/SkFont.h"
-#include "include/core/SkFontTypes.h"
 #include "include/core/SkMatrix.h"
 #include "include/core/SkPath.h"
 #include "include/core/SkPoint.h"
diff --git a/src/xps/SkXPSDevice.cpp b/src/xps/SkXPSDevice.cpp
index 938ec01..2b6fa1c 100644
--- a/src/xps/SkXPSDevice.cpp
+++ b/src/xps/SkXPSDevice.cpp
@@ -24,6 +24,7 @@
 
 #include "include/core/SkColor.h"
 #include "include/core/SkData.h"
+#include "include/core/SkEncodedImageFormat.h"
 #include "include/core/SkImage.h"
 #include "include/core/SkImageEncoder.h"
 #include "include/core/SkPaint.h"
diff --git a/tests/AAClipTest.cpp b/tests/AAClipTest.cpp
index ae6e79d..11b45e1 100644
--- a/tests/AAClipTest.cpp
+++ b/tests/AAClipTest.cpp
@@ -20,6 +20,7 @@
 #include "include/core/SkScalar.h"
 #include "include/core/SkTypes.h"
 #include "include/private/SkMalloc.h"
+#include "include/private/SkTemplates.h"
 #include "include/utils/SkRandom.h"
 #include "src/core/SkAAClip.h"
 #include "src/core/SkMask.h"
diff --git a/tests/BackendAllocationTest.cpp b/tests/BackendAllocationTest.cpp
index fbbcc4a..f9e8fde 100644
--- a/tests/BackendAllocationTest.cpp
+++ b/tests/BackendAllocationTest.cpp
@@ -15,6 +15,7 @@
 #include "include/core/SkPixmap.h"
 #include "include/core/SkRect.h"
 #include "include/core/SkRefCnt.h"
+#include "include/core/SkSamplingOptions.h"
 #include "include/core/SkString.h"
 #include "include/core/SkSurface.h"
 #include "include/core/SkTypes.h"
diff --git a/tests/BazelTestRunner.cpp b/tests/BazelTestRunner.cpp
index 9552712..b56edfc 100644
--- a/tests/BazelTestRunner.cpp
+++ b/tests/BazelTestRunner.cpp
@@ -12,7 +12,6 @@
 #include "include/core/SkString.h"
 #include "include/core/SkTypes.h"
 #include "tests/Test.h"
-#include "tools/Registry.h"
 
 #include "tests/TestHarness.h"
 
diff --git a/tests/BulkRectTest.cpp b/tests/BulkRectTest.cpp
index c50634c..73927ac5 100644
--- a/tests/BulkRectTest.cpp
+++ b/tests/BulkRectTest.cpp
@@ -12,6 +12,7 @@
 #include "include/core/SkMatrix.h"
 #include "include/core/SkRect.h"
 #include "include/core/SkRefCnt.h"
+#include "include/core/SkSamplingOptions.h"
 #include "include/core/SkSize.h"
 #include "include/core/SkSurfaceProps.h"
 #include "include/core/SkTypes.h"
diff --git a/tests/CanvasStateHelpers.cpp b/tests/CanvasStateHelpers.cpp
index bfafc6e..a5f1fea 100644
--- a/tests/CanvasStateHelpers.cpp
+++ b/tests/CanvasStateHelpers.cpp
@@ -12,7 +12,6 @@
 #include "tests/CanvasStateHelpers.h"
 
 #include "include/core/SkCanvas.h"
-#include "include/core/SkClipOp.h"
 #include "include/core/SkColor.h"
 #include "include/core/SkPaint.h"
 #include "include/core/SkRect.h"
@@ -22,6 +21,8 @@
 
 #include <memory>
 
+enum class SkClipOp;
+
 void complex_layers_draw(SkCanvas* canvas, float left, float top,
                          float right, float bottom, int32_t spacer) {
     SkPaint bluePaint;
diff --git a/tests/ColorFilterTest.cpp b/tests/ColorFilterTest.cpp
index e250ef3..09af922 100644
--- a/tests/ColorFilterTest.cpp
+++ b/tests/ColorFilterTest.cpp
@@ -11,7 +11,6 @@
 #include "include/core/SkColor.h"
 #include "include/core/SkColorFilter.h"
 #include "include/core/SkColorSpace.h"
-#include "include/core/SkFlattenable.h"
 #include "include/core/SkImageInfo.h"
 #include "include/core/SkPaint.h"
 #include "include/core/SkPoint.h"
@@ -36,6 +35,7 @@
 #include <utility>
 
 class SkArenaAlloc;
+class SkFlattenable;
 struct GrContextOptions;
 struct SkStageRec;
 
diff --git a/tests/DescriptorTest.cpp b/tests/DescriptorTest.cpp
index bed0c92..57bf9c8 100644
--- a/tests/DescriptorTest.cpp
+++ b/tests/DescriptorTest.cpp
@@ -18,7 +18,6 @@
 #include <cstdint>
 #include <memory>
 #include <optional>
-#include <type_traits>
 
 class SkDescriptorTestHelper {
 public:
diff --git a/tests/FontMgrAndroidParserTest.cpp b/tests/FontMgrAndroidParserTest.cpp
index d9c8dd9..974d9b9 100644
--- a/tests/FontMgrAndroidParserTest.cpp
+++ b/tests/FontMgrAndroidParserTest.cpp
@@ -38,7 +38,6 @@
 #include <cstdio>
 #include <memory>
 #include <string>
-#include <tuple>
 
 DECLARE_bool(verboseFontMgr);
 
diff --git a/tests/GrClipStackTest.cpp b/tests/GrClipStackTest.cpp
index e678799..8f46c06 100644
--- a/tests/GrClipStackTest.cpp
+++ b/tests/GrClipStackTest.cpp
@@ -30,7 +30,6 @@
 #include "src/gpu/ResourceKey.h"
 #include "src/gpu/ganesh/ClipStack.h"
 #include "src/gpu/ganesh/GrAppliedClip.h"
-#include "src/gpu/ganesh/GrCaps.h"
 #include "src/gpu/ganesh/GrClip.h"
 #include "src/gpu/ganesh/GrDirectContextPriv.h"
 #include "src/gpu/ganesh/GrPaint.h"
@@ -39,7 +38,6 @@
 #include "src/gpu/ganesh/GrResourceCache.h"
 #include "src/gpu/ganesh/GrScissorState.h"
 #include "src/gpu/ganesh/GrWindowRectsState.h"
-#include "src/gpu/ganesh/GrXferProcessor.h"
 #include "src/gpu/ganesh/SurfaceDrawContext.h"
 #include "src/gpu/ganesh/geometry/GrShape.h"
 #include "src/gpu/ganesh/ops/GrDrawOp.h"
@@ -54,10 +52,12 @@
 #include <utility>
 #include <vector>
 
+class GrCaps;
 class GrDstProxyView;
 class GrOpFlushState;
 class GrRecordingContext;
 class GrSurfaceProxyView;
+enum class GrXferBarrierFlags;
 
 namespace {
 
diff --git a/tests/GrGlyphVectorTest.cpp b/tests/GrGlyphVectorTest.cpp
index a724036..7409456 100644
--- a/tests/GrGlyphVectorTest.cpp
+++ b/tests/GrGlyphVectorTest.cpp
@@ -26,7 +26,6 @@
 #include <initializer_list>
 #include <limits.h>
 #include <optional>
-#include <tuple>
 #include <utility>
 
 using GlyphVector = sktext::gpu::GlyphVector;
diff --git a/tests/GrGpuBufferTest.cpp b/tests/GrGpuBufferTest.cpp
index 6215f9a..44cb6c4 100644
--- a/tests/GrGpuBufferTest.cpp
+++ b/tests/GrGpuBufferTest.cpp
@@ -31,18 +31,15 @@
 #include "src/gpu/ganesh/GrOpFlushState.h"
 #include "src/gpu/ganesh/GrPipeline.h"
 #include "src/gpu/ganesh/GrPixmap.h"
-#include "src/gpu/ganesh/GrProcessor.h"
 #include "src/gpu/ganesh/GrProcessorAnalysis.h"
 #include "src/gpu/ganesh/GrProcessorSet.h"
 #include "src/gpu/ganesh/GrProgramInfo.h"
 #include "src/gpu/ganesh/GrResourceProvider.h"
 #include "src/gpu/ganesh/GrSimpleMesh.h"
 #include "src/gpu/ganesh/GrUserStencilSettings.h"
-#include "src/gpu/ganesh/GrXferProcessor.h"
 #include "src/gpu/ganesh/SurfaceDrawContext.h"
 #include "src/gpu/ganesh/glsl/GrGLSLFragmentShaderBuilder.h"
 #include "src/gpu/ganesh/glsl/GrGLSLVarying.h"
-#include "src/gpu/ganesh/ops/GrDrawOp.h"
 #include "src/gpu/ganesh/ops/GrMeshDrawOp.h"
 #include "src/gpu/ganesh/ops/GrOp.h"
 #include "src/gpu/ganesh/ops/GrSimpleMeshDrawOpHelper.h"
@@ -61,6 +58,7 @@
 class GrRecordingContext;
 class GrSurfaceProxyView;
 class SkArenaAlloc;
+enum class GrXferBarrierFlags;
 namespace skgpu { class KeyBuilder; }
 struct GrContextOptions;
 struct GrShaderCaps;
diff --git a/tests/GrMeshTest.cpp b/tests/GrMeshTest.cpp
index 118e84d..b9df153 100644
--- a/tests/GrMeshTest.cpp
+++ b/tests/GrMeshTest.cpp
@@ -35,7 +35,6 @@
 #include "src/gpu/ganesh/GrOpsRenderPass.h"
 #include "src/gpu/ganesh/GrPipeline.h"
 #include "src/gpu/ganesh/GrPixmap.h"
-#include "src/gpu/ganesh/GrProcessor.h"
 #include "src/gpu/ganesh/GrProcessorAnalysis.h"
 #include "src/gpu/ganesh/GrProcessorSet.h"
 #include "src/gpu/ganesh/GrProgramInfo.h"
@@ -43,7 +42,6 @@
 #include "src/gpu/ganesh/GrShaderCaps.h"
 #include "src/gpu/ganesh/GrShaderVar.h"
 #include "src/gpu/ganesh/GrUserStencilSettings.h"
-#include "src/gpu/ganesh/GrXferProcessor.h"
 #include "src/gpu/ganesh/SurfaceDrawContext.h"
 #include "src/gpu/ganesh/glsl/GrGLSLFragmentShaderBuilder.h"
 #include "src/gpu/ganesh/glsl/GrGLSLVarying.h"
@@ -69,6 +67,7 @@
 class GrGLSLProgramDataManager;
 class GrRecordingContext;
 class GrSurfaceProxyView;
+enum class GrXferBarrierFlags;
 struct GrContextOptions;
 
 #if 0
diff --git a/tests/GrPipelineDynamicStateTest.cpp b/tests/GrPipelineDynamicStateTest.cpp
index 3cf83ec..9a627f6 100644
--- a/tests/GrPipelineDynamicStateTest.cpp
+++ b/tests/GrPipelineDynamicStateTest.cpp
@@ -21,7 +21,6 @@
 #include "src/core/SkArenaAlloc.h"
 #include "src/core/SkSLTypeShared.h"
 #include "src/gpu/ganesh/GrBuffer.h"
-#include "src/gpu/ganesh/GrCaps.h"
 #include "src/gpu/ganesh/GrColor.h"
 #include "src/gpu/ganesh/GrDirectContextPriv.h"
 #include "src/gpu/ganesh/GrGeometryProcessor.h"
@@ -29,7 +28,6 @@
 #include "src/gpu/ganesh/GrOpFlushState.h"
 #include "src/gpu/ganesh/GrPipeline.h"
 #include "src/gpu/ganesh/GrPixmap.h"
-#include "src/gpu/ganesh/GrProcessor.h"
 #include "src/gpu/ganesh/GrProcessorSet.h"
 #include "src/gpu/ganesh/GrProgramInfo.h"
 #include "src/gpu/ganesh/GrResourceProvider.h"
@@ -37,7 +35,6 @@
 #include "src/gpu/ganesh/GrSimpleMesh.h"
 #include "src/gpu/ganesh/GrSurfaceProxyView.h"
 #include "src/gpu/ganesh/GrUserStencilSettings.h"
-#include "src/gpu/ganesh/GrXferProcessor.h"
 #include "src/gpu/ganesh/SurfaceDrawContext.h"
 #include "src/gpu/ganesh/glsl/GrGLSLFragmentShaderBuilder.h"
 #include "src/gpu/ganesh/glsl/GrGLSLVarying.h"
@@ -57,6 +54,8 @@
 class GrDstProxyView;
 class GrGLSLProgramDataManager;
 class GrRecordingContext;
+class GrCaps;
+enum class GrXferBarrierFlags;
 namespace skgpu { class KeyBuilder; }
 struct GrContextOptions;
 struct GrShaderCaps;
diff --git a/tests/GrStyledShapeTest.cpp b/tests/GrStyledShapeTest.cpp
index b7322b4..29f4b17 100644
--- a/tests/GrStyledShapeTest.cpp
+++ b/tests/GrStyledShapeTest.cpp
@@ -8,7 +8,6 @@
 #include "include/core/SkCanvas.h"
 #include "include/core/SkClipOp.h"
 #include "include/core/SkColor.h"
-#include "include/core/SkFlattenable.h"
 #include "include/core/SkImageInfo.h"
 #include "include/core/SkMatrix.h"
 #include "include/core/SkPaint.h"
diff --git a/tests/GrSurfaceTest.cpp b/tests/GrSurfaceTest.cpp
index b6524d9..700e65e 100644
--- a/tests/GrSurfaceTest.cpp
+++ b/tests/GrSurfaceTest.cpp
@@ -16,6 +16,7 @@
 #include "include/core/SkPixmap.h"
 #include "include/core/SkRect.h"
 #include "include/core/SkRefCnt.h"
+#include "include/core/SkSamplingOptions.h"
 #include "include/core/SkSize.h"
 #include "include/core/SkString.h"
 #include "include/core/SkTypes.h"
diff --git a/tests/GrThreadSafeCacheTest.cpp b/tests/GrThreadSafeCacheTest.cpp
index 17790d9..d6bfbd9 100644
--- a/tests/GrThreadSafeCacheTest.cpp
+++ b/tests/GrThreadSafeCacheTest.cpp
@@ -21,6 +21,7 @@
 #include "include/core/SkPoint.h"
 #include "include/core/SkRect.h"
 #include "include/core/SkRefCnt.h"
+#include "include/core/SkSamplingOptions.h"
 #include "include/core/SkSurface.h"
 #include "include/core/SkSurfaceCharacterization.h"
 #include "include/core/SkSurfaceProps.h"
@@ -60,7 +61,6 @@
 #include "src/gpu/ganesh/GrSurfaceProxyView.h"
 #include "src/gpu/ganesh/GrTextureProxy.h"
 #include "src/gpu/ganesh/GrThreadSafeCache.h"
-#include "src/gpu/ganesh/GrXferProcessor.h"
 #include "src/gpu/ganesh/SurfaceDrawContext.h"
 #include "src/gpu/ganesh/ops/GrDrawOp.h"
 #include "src/gpu/ganesh/ops/GrOp.h"
@@ -75,13 +75,13 @@
 #include <functional>
 #include <memory>
 #include <thread>
-#include <tuple>
 #include <utility>
 
 class GrDstProxyView;
 class GrProgramInfo;
 class GrThreadSafeVertexTestOp;
 class SkArenaAlloc;
+enum class GrXferBarrierFlags;
 struct GrContextOptions;
 
 static constexpr int kImageWH = 32;
diff --git a/tests/ImageFilterTest.cpp b/tests/ImageFilterTest.cpp
index 050de12..e22ba96 100644
--- a/tests/ImageFilterTest.cpp
+++ b/tests/ImageFilterTest.cpp
@@ -58,7 +58,6 @@
 #include <algorithm>
 #include <cstdint>
 #include <string>
-#include <tuple>
 #include <utility>
 
 class SkReadBuffer;
diff --git a/tests/ImageTest.cpp b/tests/ImageTest.cpp
index 25f2511..eb52bb3 100644
--- a/tests/ImageTest.cpp
+++ b/tests/ImageTest.cpp
@@ -53,7 +53,6 @@
 #include "src/gpu/ganesh/GrGpu.h"
 #include "src/gpu/ganesh/GrImageContextPriv.h"
 #include "src/gpu/ganesh/GrRecordingContextPriv.h"
-#include "src/gpu/ganesh/GrSurfaceProxy.h"
 #include "src/gpu/ganesh/GrSurfaceProxyView.h"
 #include "src/gpu/ganesh/GrTextureProxy.h"
 #include "src/image/SkImage_Base.h"
diff --git a/tests/LazyProxyTest.cpp b/tests/LazyProxyTest.cpp
index 3b524d5..d43cf11 100644
--- a/tests/LazyProxyTest.cpp
+++ b/tests/LazyProxyTest.cpp
@@ -29,7 +29,6 @@
 #include "src/gpu/ganesh/GrDirectContextPriv.h"
 #include "src/gpu/ganesh/GrFragmentProcessor.h"
 #include "src/gpu/ganesh/GrOnFlushResourceProvider.h"
-#include "src/gpu/ganesh/GrProcessor.h"
 #include "src/gpu/ganesh/GrProcessorSet.h"
 #include "src/gpu/ganesh/GrProxyProvider.h"
 #include "src/gpu/ganesh/GrRecordingContextPriv.h"
@@ -39,7 +38,6 @@
 #include "src/gpu/ganesh/GrSurfaceProxyPriv.h"
 #include "src/gpu/ganesh/GrTexture.h"
 #include "src/gpu/ganesh/GrTextureProxy.h"
-#include "src/gpu/ganesh/GrXferProcessor.h"
 #include "src/gpu/ganesh/SurfaceDrawContext.h"
 #include "src/gpu/ganesh/effects/GrTextureEffect.h"
 #include "src/gpu/ganesh/ops/GrDrawOp.h"
@@ -55,6 +53,7 @@
 class GrDstProxyView;
 class GrOpFlushState;
 class GrSurfaceProxyView;
+enum class GrXferBarrierFlags;
 namespace skgpu { class KeyBuilder; }
 struct GrShaderCaps;
 
diff --git a/tests/MeshTest.cpp b/tests/MeshTest.cpp
index 19427b8..8a1fead 100644
--- a/tests/MeshTest.cpp
+++ b/tests/MeshTest.cpp
@@ -10,7 +10,6 @@
 #include "include/core/SkSpan.h"
 #include "include/core/SkString.h"
 #include "include/core/SkTypes.h"
-#include "include/effects/SkRuntimeEffect.h"
 #include "src/core/SkMeshPriv.h"
 #include "src/core/SkZip.h"
 #include "tests/Test.h"
diff --git a/tests/OpChainTest.cpp b/tests/OpChainTest.cpp
index 06a68ac..de26f03 100644
--- a/tests/OpChainTest.cpp
+++ b/tests/OpChainTest.cpp
@@ -27,7 +27,6 @@
 #include "src/gpu/ganesh/GrSurfaceProxyView.h"
 #include "src/gpu/ganesh/GrTextureProxy.h"
 #include "src/gpu/ganesh/GrTextureResolveManager.h"
-#include "src/gpu/ganesh/GrXferProcessor.h"
 #include "src/gpu/ganesh/ops/GrOp.h"
 #include "src/gpu/ganesh/ops/OpsTask.h"
 #include "tests/CtsEnforcement.h"
@@ -39,7 +38,6 @@
 #include <cstddef>
 #include <cstdint>
 #include <iterator>
-#include <memory>
 #include <utility>
 #include <vector>
 
@@ -48,6 +46,7 @@
 class GrDstProxyView;
 class GrRecordingContext;
 class SkArenaAlloc;
+enum class GrXferBarrierFlags;
 struct GrContextOptions;
 
 // We create Ops that write a value into a range of a buffer. We create ranges from
diff --git a/tests/PDFDocumentTest.cpp b/tests/PDFDocumentTest.cpp
index af9d8cc..cffd5bb 100644
--- a/tests/PDFDocumentTest.cpp
+++ b/tests/PDFDocumentTest.cpp
@@ -16,7 +16,6 @@
 #include "include/core/SkRefCnt.h"
 #include "include/core/SkStream.h"
 #include "include/core/SkString.h"
-#include "include/core/SkTime.h"
 #include "include/docs/SkPDFDocument.h"
 #include "src/utils/SkOSPath.h"
 #include "tests/Test.h"
diff --git a/tests/PathBuilderTest.cpp b/tests/PathBuilderTest.cpp
index 441ebac..56e4cd6 100644
--- a/tests/PathBuilderTest.cpp
+++ b/tests/PathBuilderTest.cpp
@@ -11,7 +11,6 @@
 #include "include/core/SkPoint.h"
 #include "include/core/SkRRect.h"
 #include "include/core/SkRect.h"
-#include "include/private/SkPathRef.h"
 #include "include/utils/SkRandom.h"
 #include "src/core/SkPathPriv.h"
 #include "tests/Test.h"
@@ -21,6 +20,8 @@
 #include <initializer_list>
 #include <vector>
 
+enum class SkPathConvexity;
+
 static void is_empty(skiatest::Reporter* reporter, const SkPath& p) {
     REPORTER_ASSERT(reporter, p.getBounds().isEmpty());
     REPORTER_ASSERT(reporter, p.countPoints() == 0);
diff --git a/tests/PathOpsBattles.cpp b/tests/PathOpsBattles.cpp
index cb54d4e..9231b84 100644
--- a/tests/PathOpsBattles.cpp
+++ b/tests/PathOpsBattles.cpp
@@ -5,7 +5,6 @@
  * found in the LICENSE file.
  */
 #include "include/core/SkPath.h"
-#include "include/core/SkPathTypes.h"
 #include "include/pathops/SkPathOps.h"
 #include "include/private/SkFloatBits.h"
 #include "tests/PathOpsExtendedTest.h"
@@ -14,6 +13,8 @@
 #include <cstddef>
 #include <iterator>
 
+enum class SkPathFillType;
+
 #define TEST(name) { name, #name }
 
 static void issue414409(skiatest::Reporter* reporter, const char* filename) {
diff --git a/tests/PathOpsBuildUseTest.cpp b/tests/PathOpsBuildUseTest.cpp
index 47a376f..055ce38 100644
--- a/tests/PathOpsBuildUseTest.cpp
+++ b/tests/PathOpsBuildUseTest.cpp
@@ -5,7 +5,6 @@
  * found in the LICENSE file.
  */
 #include "include/core/SkPath.h"
-#include "include/core/SkPathTypes.h"
 #include "include/pathops/SkPathOps.h"
 #include "include/private/SkFloatBits.h"
 #include "tests/PathOpsExtendedTest.h"
@@ -14,6 +13,8 @@
 #include <cstddef>
 #include <iterator>
 
+enum class SkPathFillType;
+
 #define TEST(name) { name, #name }
 
 static void build1_1(skiatest::Reporter* reporter, const char* filename) {
diff --git a/tests/PathOpsFuzz763Test.cpp b/tests/PathOpsFuzz763Test.cpp
index 38cf3c3..3527a9b 100644
--- a/tests/PathOpsFuzz763Test.cpp
+++ b/tests/PathOpsFuzz763Test.cpp
@@ -5,7 +5,6 @@
  * found in the LICENSE file.
  */
 #include "include/core/SkPath.h"
-#include "include/core/SkPathTypes.h"
 #include "include/pathops/SkPathOps.h"
 #include "include/private/SkFloatBits.h"
 #include "src/pathops/SkPathOpsTypes.h"
@@ -15,6 +14,7 @@
 #include <cstddef>
 #include <iterator>
 
+enum class SkPathFillType;
 
 #define TEST(name) { name, #name }
 
diff --git a/tests/PathOpsThreadedCommon.h b/tests/PathOpsThreadedCommon.h
index 9990634..7bf946a 100644
--- a/tests/PathOpsThreadedCommon.h
+++ b/tests/PathOpsThreadedCommon.h
@@ -8,7 +8,6 @@
 #define PathOpsThreadedCommon_DEFINED
 
 #include "include/core/SkBitmap.h"
-#include "include/core/SkPathTypes.h"
 #include "include/core/SkTypes.h"
 #include "include/pathops/SkPathOps.h"
 #include "include/private/SkTDArray.h"
@@ -18,6 +17,7 @@
 #define PATH_STR_SIZE 512
 
 class PathOpsThreadedRunnable;
+enum class SkPathFillType;
 
 namespace skiatest {
 class Reporter;
diff --git a/tests/PrimitiveProcessorTest.cpp b/tests/PrimitiveProcessorTest.cpp
index 11df7ff..15756a2 100644
--- a/tests/PrimitiveProcessorTest.cpp
+++ b/tests/PrimitiveProcessorTest.cpp
@@ -27,14 +27,11 @@
 #include "src/gpu/ganesh/GrOpFlushState.h"
 #include "src/gpu/ganesh/GrPaint.h"
 #include "src/gpu/ganesh/GrPipeline.h"
-#include "src/gpu/ganesh/GrProcessor.h"
 #include "src/gpu/ganesh/GrProcessorSet.h"
 #include "src/gpu/ganesh/GrProgramInfo.h"
-#include "src/gpu/ganesh/GrXferProcessor.h"
 #include "src/gpu/ganesh/SurfaceDrawContext.h"
 #include "src/gpu/ganesh/glsl/GrGLSLFragmentShaderBuilder.h"
 #include "src/gpu/ganesh/glsl/GrGLSLVarying.h"
-#include "src/gpu/ganesh/ops/GrDrawOp.h"
 #include "src/gpu/ganesh/ops/GrMeshDrawOp.h"
 #include "src/gpu/ganesh/ops/GrOp.h"
 #include "src/gpu/ganesh/ops/GrSimpleMeshDrawOpHelper.h"
@@ -50,6 +47,7 @@
 class GrMeshDrawTarget;
 class GrRecordingContext;
 class GrSurfaceProxyView;
+enum class GrXferBarrierFlags;
 struct GrContextOptions;
 struct GrShaderCaps;
 struct GrSimpleMesh;
diff --git a/tests/ProcessorTest.cpp b/tests/ProcessorTest.cpp
index 2b78d64..89cf9b8 100644
--- a/tests/ProcessorTest.cpp
+++ b/tests/ProcessorTest.cpp
@@ -34,7 +34,6 @@
 #include "src/gpu/ganesh/GrFragmentProcessor.h"
 #include "src/gpu/ganesh/GrImageInfo.h"
 #include "src/gpu/ganesh/GrPixmap.h"
-#include "src/gpu/ganesh/GrProcessor.h"
 #include "src/gpu/ganesh/GrProcessorAnalysis.h"
 #include "src/gpu/ganesh/GrProcessorSet.h"
 #include "src/gpu/ganesh/GrProcessorUnitTest.h"
@@ -43,13 +42,11 @@
 #include "src/gpu/ganesh/GrSurfaceProxyView.h"
 #include "src/gpu/ganesh/GrTextureProxy.h"
 #include "src/gpu/ganesh/GrUserStencilSettings.h"
-#include "src/gpu/ganesh/GrXferProcessor.h"
 #include "src/gpu/ganesh/SkGr.h"
 #include "src/gpu/ganesh/SurfaceContext.h"
 #include "src/gpu/ganesh/SurfaceDrawContext.h"
 #include "src/gpu/ganesh/effects/GrTextureEffect.h"
 #include "src/gpu/ganesh/glsl/GrGLSLFragmentShaderBuilder.h"
-#include "src/gpu/ganesh/ops/GrDrawOp.h"
 #include "src/gpu/ganesh/ops/GrMeshDrawOp.h"
 #include "src/gpu/ganesh/ops/GrOp.h"
 #include "tests/CtsEnforcement.h"
@@ -77,6 +74,7 @@
 class GrRecordingContext;
 class GrResourceProvider;
 class SkArenaAlloc;
+enum class GrXferBarrierFlags;
 struct GrContextOptions;
 struct GrShaderCaps;
 
diff --git a/tests/ProgramsTest.cpp b/tests/ProgramsTest.cpp
index d0dc151..fb676f8 100644
--- a/tests/ProgramsTest.cpp
+++ b/tests/ProgramsTest.cpp
@@ -30,7 +30,6 @@
 #include "src/gpu/ganesh/GrDrawingManager.h"
 #include "src/gpu/ganesh/GrFragmentProcessor.h"
 #include "src/gpu/ganesh/GrPaint.h"
-#include "src/gpu/ganesh/GrProcessor.h"
 #include "src/gpu/ganesh/GrProcessorUnitTest.h"
 #include "src/gpu/ganesh/GrProxyProvider.h"
 #include "src/gpu/ganesh/GrSurfaceProxy.h"
diff --git a/tests/ProxyTest.cpp b/tests/ProxyTest.cpp
index 8d9633e..154ae9d 100644
--- a/tests/ProxyTest.cpp
+++ b/tests/ProxyTest.cpp
@@ -20,7 +20,6 @@
 #include "src/gpu/ganesh/GrCaps.h"
 #include "src/gpu/ganesh/GrDirectContextPriv.h"
 #include "src/gpu/ganesh/GrGpu.h"
-#include "src/gpu/ganesh/GrGpuResource.h"
 #include "src/gpu/ganesh/GrProxyProvider.h"
 #include "src/gpu/ganesh/GrRenderTarget.h"
 #include "src/gpu/ganesh/GrRenderTargetProxy.h"
diff --git a/tests/RectangleTextureTest.cpp b/tests/RectangleTextureTest.cpp
index 672395b..4812a22 100644
--- a/tests/RectangleTextureTest.cpp
+++ b/tests/RectangleTextureTest.cpp
@@ -17,6 +17,7 @@
 #include "include/core/SkPixmap.h"
 #include "include/core/SkRect.h"
 #include "include/core/SkRefCnt.h"
+#include "include/core/SkSamplingOptions.h"
 #include "include/core/SkTypes.h"
 #include "include/gpu/GrBackendSurface.h"
 #include "include/gpu/GrDirectContext.h"
diff --git a/tests/ResourceAllocatorTest.cpp b/tests/ResourceAllocatorTest.cpp
index 88d0746..778b075 100644
--- a/tests/ResourceAllocatorTest.cpp
+++ b/tests/ResourceAllocatorTest.cpp
@@ -39,7 +39,6 @@
 #include <array>
 #include <cstddef>
 #include <functional>
-#include <type_traits>
 #include <utility>
 
 class GrRecordingContext;
diff --git a/tests/SkSLCross.cpp b/tests/SkSLCross.cpp
index 0b592dc..59c327d 100644
--- a/tests/SkSLCross.cpp
+++ b/tests/SkSLCross.cpp
@@ -24,7 +24,6 @@
 #include "src/gpu/ganesh/GrImageInfo.h"
 #include "src/gpu/ganesh/GrPaint.h"
 #include "src/gpu/ganesh/GrPixmap.h"
-#include "src/gpu/ganesh/GrProcessor.h"
 #include "src/gpu/ganesh/SurfaceDrawContext.h"
 #include "src/gpu/ganesh/glsl/GrGLSLFragmentShaderBuilder.h"
 #include "src/gpu/ganesh/glsl/GrGLSLProgramDataManager.h"
diff --git a/tests/SkVMDebugTracePlayerTest.cpp b/tests/SkVMDebugTracePlayerTest.cpp
index 6f368d3..964e040 100644
--- a/tests/SkVMDebugTracePlayerTest.cpp
+++ b/tests/SkVMDebugTracePlayerTest.cpp
@@ -6,6 +6,7 @@
  */
 
 #include "include/core/SkRefCnt.h"
+#include "include/core/SkSpan.h"
 #include "include/private/SkSLProgramKind.h"
 #include "src/core/SkVM.h"
 #include "src/sksl/SkSLCompiler.h"
diff --git a/tests/SkVMTest.cpp b/tests/SkVMTest.cpp
index 78fca87..2a19616 100644
--- a/tests/SkVMTest.cpp
+++ b/tests/SkVMTest.cpp
@@ -9,6 +9,7 @@
 #include "include/core/SkData.h"
 #include "include/core/SkRefCnt.h"
 #include "include/core/SkScalar.h"
+#include "include/core/SkSpan.h"
 #include "include/core/SkStream.h"
 #include "include/core/SkTypes.h"
 #include "include/private/SkFloatingPoint.h"
diff --git a/tests/SpecialImageTest.cpp b/tests/SpecialImageTest.cpp
index 4d16192..f7f158d 100644
--- a/tests/SpecialImageTest.cpp
+++ b/tests/SpecialImageTest.cpp
@@ -32,7 +32,6 @@
 #include "tests/CtsEnforcement.h"
 #include "tests/Test.h"
 
-#include <tuple>
 #include <utility>
 
 class GrRecordingContext;
diff --git a/tests/StreamTest.cpp b/tests/StreamTest.cpp
index 42683d7..60bf22c 100644
--- a/tests/StreamTest.cpp
+++ b/tests/StreamTest.cpp
@@ -23,7 +23,6 @@
 
 #include <algorithm>
 #include <climits>
-#include <cstddef>
 #include <cstdint>
 #include <cstdio>
 #include <functional>
diff --git a/tests/StrikeForGPUTest.cpp b/tests/StrikeForGPUTest.cpp
index 73a8edb..8024e2e 100644
--- a/tests/StrikeForGPUTest.cpp
+++ b/tests/StrikeForGPUTest.cpp
@@ -18,7 +18,6 @@
 #include <cstdint>
 #include <memory>
 #include <optional>
-#include <type_traits>
 #include <utility>
 
 using namespace sktext;
diff --git a/tests/SurfaceSemaphoreTest.cpp b/tests/SurfaceSemaphoreTest.cpp
index 6e3e70e..1940909 100644
--- a/tests/SurfaceSemaphoreTest.cpp
+++ b/tests/SurfaceSemaphoreTest.cpp
@@ -34,7 +34,6 @@
 #include <cstdint>
 #include <initializer_list>
 
-
 #ifdef SK_GL
 #include "include/gpu/gl/GrGLFunctions.h"
 #include "include/gpu/gl/GrGLInterface.h"
@@ -47,10 +46,11 @@
 #include "src/gpu/ganesh/vk/GrVkCommandPool.h"
 #include "src/gpu/ganesh/vk/GrVkGpu.h"
 #include "src/gpu/ganesh/vk/GrVkUtil.h"
-#include "src/gpu/vk/VulkanInterface.h"
 
 #include <vulkan/vulkan_core.h>
 
+namespace skgpu { struct VulkanInterface; }
+
 #ifdef VK_USE_PLATFORM_WIN32_KHR
 // windows wants to define this as CreateSemaphoreA or CreateSemaphoreW
 #undef CreateSemaphore
diff --git a/tests/TArrayTest.cpp b/tests/TArrayTest.cpp
index 75d8bd3..311f69e 100644
--- a/tests/TArrayTest.cpp
+++ b/tests/TArrayTest.cpp
@@ -12,7 +12,6 @@
 #include <array>
 #include <cstdint>
 #include <initializer_list>
-#include <type_traits>
 #include <utility>
 
 // This class is used to test SkTArray's behavior with classes containing a vtable.
diff --git a/tests/TestUtils.cpp b/tests/TestUtils.cpp
index c7d7103..e4d59c5 100644
--- a/tests/TestUtils.cpp
+++ b/tests/TestUtils.cpp
@@ -21,6 +21,7 @@
 #include "include/gpu/GrRecordingContext.h"
 #include "include/private/SkTemplates.h"
 #include "include/private/SkTo.h"
+#include "include/private/gpu/ganesh/GrTypesPriv.h"
 #include "include/utils/SkBase64.h"
 #include "src/core/SkAutoPixmapStorage.h"
 #include "src/gpu/ganesh/GrCaps.h"
diff --git a/tests/TestUtils.h b/tests/TestUtils.h
index 97ff38e..e987954 100644
--- a/tests/TestUtils.h
+++ b/tests/TestUtils.h
@@ -12,7 +12,6 @@
 #include "include/core/SkRefCnt.h"
 #include "include/core/SkTypes.h"
 #include "include/gpu/GrTypes.h"
-#include "include/private/gpu/ganesh/GrTypesPriv.h"
 #include "src/gpu/ganesh/GrImageInfo.h"
 #include "src/gpu/ganesh/GrPixmap.h"
 
@@ -26,6 +25,7 @@
 class SkBitmap;
 class SkPixmap;
 class SkString;
+enum class GrColorType;
 namespace skiatest { class Reporter; }
 namespace skgpu::v1 { class SurfaceContext; }
 typedef uint32_t GrColor;
diff --git a/tests/TextureOpTest.cpp b/tests/TextureOpTest.cpp
index 252a8a2..a47a4e1 100644
--- a/tests/TextureOpTest.cpp
+++ b/tests/TextureOpTest.cpp
@@ -10,6 +10,7 @@
 #include "include/core/SkMatrix.h"
 #include "include/core/SkRect.h"
 #include "include/core/SkRefCnt.h"
+#include "include/core/SkSamplingOptions.h"
 #include "include/core/SkSize.h"
 #include "include/core/SkTypes.h"
 #include "include/gpu/GrBackendSurface.h"
diff --git a/tests/VkBackendSurfaceTest.cpp b/tests/VkBackendSurfaceTest.cpp
index b0cb997..0ff517e 100644
--- a/tests/VkBackendSurfaceTest.cpp
+++ b/tests/VkBackendSurfaceTest.cpp
@@ -32,8 +32,9 @@
 #include "tests/Test.h"
 #include "tools/gpu/ManagedBackendTexture.h"
 #include "tools/gpu/ProxyUtils.h"
+
 #include <vulkan/vulkan_core.h>
-#include <tuple>
+
 class GrTexture;
 struct GrContextOptions;
 
diff --git a/tests/VkDrawableTest.cpp b/tests/VkDrawableTest.cpp
index a0a9a2a..887f13b 100644
--- a/tests/VkDrawableTest.cpp
+++ b/tests/VkDrawableTest.cpp
@@ -32,7 +32,6 @@
 #include "src/gpu/ganesh/vk/GrVkGpu.h"
 #include "src/gpu/ganesh/vk/GrVkSecondaryCBDrawContext_impl.h"
 #include "src/gpu/ganesh/vk/GrVkUtil.h"
-#include "src/gpu/vk/VulkanInterface.h"
 #include "tests/CtsEnforcement.h"
 #include "tests/Test.h"
 
@@ -42,6 +41,8 @@
 
 struct GrContextOptions;
 
+namespace skgpu { struct VulkanInterface; }
+
 using sk_gpu_test::GrContextFactory;
 
 static const int DEV_W = 16, DEV_H = 16;
diff --git a/tests/WrappedSurfaceCopyOnWriteTest.cpp b/tests/WrappedSurfaceCopyOnWriteTest.cpp
index f7b39d0..99629bd 100644
--- a/tests/WrappedSurfaceCopyOnWriteTest.cpp
+++ b/tests/WrappedSurfaceCopyOnWriteTest.cpp
@@ -15,6 +15,7 @@
 #include "include/core/SkImageInfo.h"
 #include "include/core/SkRect.h"
 #include "include/core/SkRefCnt.h"
+#include "include/core/SkSamplingOptions.h"
 #include "include/core/SkSurface.h"
 #include "include/core/SkSurfaceCharacterization.h"
 #include "include/core/SkTypes.h"
diff --git a/toolchain/download_linux_amd64_toolchain.bzl b/toolchain/download_linux_amd64_toolchain.bzl
index 0b8c731..41ed453 100644
--- a/toolchain/download_linux_amd64_toolchain.bzl
+++ b/toolchain/download_linux_amd64_toolchain.bzl
@@ -13,12 +13,12 @@
 which will act as our sysroot.
 """
 
-load("//toolchain:utils.bzl", "gcs_mirror_url")
+load("//toolchain:utils.bzl", "gcs_mirror_only", "gcs_mirror_url")
 
-# From https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/clang+llvm-13.0.0-x86_64-linux-gnu-ubuntu-20.04.tar.xz.sha256
-clang_prefix = "clang+llvm-13.0.0-x86_64-linux-gnu-ubuntu-20.04/"
-clang_sha256 = "2c2fb857af97f41a5032e9ecadf7f78d3eff389a5cd3c9ec620d24f134ceb3c8"
-clang_url = "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/clang+llvm-13.0.0-x86_64-linux-gnu-ubuntu-20.04.tar.xz"
+# The clang from CIPD has no prefix, and we download it directly from our GCS bucket
+# This is clang 15.0.1 and iwyu built from source.
+# https://chrome-infra-packages.appspot.com/p/skia/bots/clang_linux/+/5h9JgVTkZk0fFuOyLUCHZXIFqG1b1TAdYG9fHTFLEzoC
+clang_sha256 = "e61f498154e4664d1f16e3b22d4087657205a86d5bd5301d606f5f1d314b133a"
 
 debs_to_install = [
     # These three comprise glibc. libc6 has the shared libraries, like libc itself, the math library
@@ -124,43 +124,6 @@
         "sha256": "1f9f2dbe7744a2bb7f855d819f43167df095fe7d5291546bec12865aed045e0c",
         "url": "https://ftp.debian.org/debian/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_amd64.deb",
     },
-    # This is used to make sure we include only the headers we need. This corresponds to
-    # IWYU version 0.17, which uses Clang 13, like we compile with.
-    {
-        # From https://packages.debian.org/sid/amd64/iwyu/download
-        "sha256": "9fd6932a7609e89364f7edc5f9613892c98c21c88a3931e51cf1a0f8744759bd",
-        "url": "https://ftp.debian.org/debian/pool/main/i/iwyu/iwyu_8.17-1_amd64.deb",
-    },
-    {
-        # This is a requirement of iwyu
-        # https://packages.debian.org/sid/amd64/libclang-cpp13/download
-        "sha256": "c6e2471de8f3ec06e40c8e006e06bbd251dd0c8000dee820a4b6dca3d3290c0d",
-        "url": "https://ftp.debian.org/debian/pool/main/l/llvm-toolchain-13/libclang-cpp13_13.0.1-3+b1_amd64.deb",
-    },
-    {
-        # This is a requirement of libclang-cpp13
-        # https://packages.debian.org/sid/amd64/libstdc++6/download
-        "sha256": "f37e5954423955938c5309a8d0e475f7e84e92b56b8301487fb885192dee8085",
-        "url": "https://ftp.debian.org/debian/pool/main/g/gcc-12/libstdc++6_12-20220319-1_amd64.deb",
-    },
-    {
-        # This is a requirement of iwyu
-        # https://packages.debian.org/sid/amd64/libllvm13/download
-        "sha256": "49f29a6c9fbc3097077931529e7fe1c032b1d04a984d971aa1e6990a5133556e",
-        "url": "https://ftp.debian.org/debian/pool/main/l/llvm-toolchain-13/libllvm13_13.0.1-3+b1_amd64.deb",
-    },
-    {
-        # This is a requirement of libllvm13
-        # https://packages.debian.org/sid/amd64/libffi8/download
-        "sha256": "87c55b36951aed18ef2c357683e15c365713bda6090f15386998b57df433b387",
-        "url": "https://ftp.debian.org/debian/pool/main/libf/libffi/libffi8_3.4.2-4_amd64.deb",
-    },
-    {
-        # This is a requirement of libllvm13
-        # https://packages.debian.org/sid/libz3-4/download
-        "sha256": "b415b863678625dee3f3c75bd48b1b9e3b6e11279ebec337904d7f09630d107f",
-        "url": "https://ftp.debian.org/debian/pool/main/z/z3/libz3-4_4.8.12-1+b1_amd64.deb",
-    },
     {
         # https://packages.debian.org/bullseye/libfontconfig-dev/download
         "sha256": "7655d4238ee7e6ced13501006d20986cbf9ff08454a4e502d5aa399f83e28876",
@@ -209,9 +172,8 @@
     # Download the clang toolchain (the extraction can take a while)
     # https://bazel.build/rules/lib/repository_ctx#download_and_extract
     ctx.download_and_extract(
-        url = gcs_mirror_url(clang_url, clang_sha256),
+        url = gcs_mirror_only(clang_sha256, ".zip"),
         output = "",
-        stripPrefix = clang_prefix,
         sha256 = clang_sha256,
     )
 
@@ -248,12 +210,13 @@
     name = "compile_files",
     srcs = [
         "bin/clang",
-        "usr/bin/include-what-you-use",
+        "bin/include-what-you-use",
     ] + glob(
         include = [
             "include/c++/v1/**",
+            "include/x86_64-unknown-linux-gnu/c++/v1/**",
             "usr/include/**",
-            "lib/clang/13.0.0/**",
+            "lib/clang/15.0.1/**",
             "usr/include/x86_64-linux-gnu/**",
         ],
         allow_empty = False,
@@ -267,13 +230,13 @@
         "bin/clang",
         "bin/ld.lld",
         "bin/lld",
-        "lib/libc++.a",
-        "lib/libc++abi.a",
-        "lib/libunwind.a",
+        "lib/x86_64-unknown-linux-gnu/libc++.a",
+        "lib/x86_64-unknown-linux-gnu/libc++abi.a",
+        "lib/x86_64-unknown-linux-gnu/libunwind.a",
         "lib64/ld-linux-x86-64.so.2",
     ] + glob(
         include = [
-            "lib/clang/13.0.0/lib/**",
+            "lib/clang/15.0.1/lib/**",
             "lib/x86_64-linux-gnu/**",
             "usr/lib/x86_64-linux-gnu/**",
         ],
diff --git a/toolchain/linux_amd64_toolchain_config.bzl b/toolchain/linux_amd64_toolchain_config.bzl
index 3a05a53..df94656 100644
--- a/toolchain/linux_amd64_toolchain_config.bzl
+++ b/toolchain/linux_amd64_toolchain_config.bzl
@@ -216,10 +216,13 @@
                     # are included with an absolute path and fail the build).
                     "-isystem",
                     EXTERNAL_TOOLCHAIN + "/include/c++/v1",
+                    # https://github.com/llvm/llvm-project/issues/57104
+                    "-isystem",
+                    EXTERNAL_TOOLCHAIN + "/include/x86_64-unknown-linux-gnu/c++/v1/",
                     "-isystem",
                     EXTERNAL_TOOLCHAIN + "/usr/include",
                     "-isystem",
-                    EXTERNAL_TOOLCHAIN + "/lib/clang/13.0.0/include",
+                    EXTERNAL_TOOLCHAIN + "/lib/clang/15.0.1/include",
                     "-isystem",
                     EXTERNAL_TOOLCHAIN + "/usr/include/x86_64-linux-gnu",
                     # We do not want clang to search in absolute paths for files. This makes
@@ -257,9 +260,9 @@
                     "-stdlib=libc++",
                     # We statically include these libc++ libraries so they do not need to be
                     # on a developer's machine (they can be tricky to get).
-                    EXTERNAL_TOOLCHAIN + "/lib/libc++.a",
-                    EXTERNAL_TOOLCHAIN + "/lib/libc++abi.a",
-                    EXTERNAL_TOOLCHAIN + "/lib/libunwind.a",
+                    EXTERNAL_TOOLCHAIN + "/lib/x86_64-unknown-linux-gnu/libc++.a",
+                    EXTERNAL_TOOLCHAIN + "/lib/x86_64-unknown-linux-gnu/libc++abi.a",
+                    EXTERNAL_TOOLCHAIN + "/lib/x86_64-unknown-linux-gnu/libunwind.a",
                     # Dynamically Link in the other parts of glibc (not needed in glibc 2.34+)
                     "-lpthread",
                     "-lm",
diff --git a/toolchain/linux_trampolines/IWYU_mapping.imp b/toolchain/linux_trampolines/IWYU_mapping.imp
index f782903..0ba8a6c 100644
--- a/toolchain/linux_trampolines/IWYU_mapping.imp
+++ b/toolchain/linux_trampolines/IWYU_mapping.imp
@@ -19,6 +19,10 @@
   { include: ["<__algorithm/stable_sort.h>", "private", "<algorithm>", "public"] },
   { include: ["<__algorithm/upper_bound.h>", "private", "<algorithm>", "public"] },
 
+  { include: ["<__chrono/duration.h>", "private", "<chrono>", "public"] },
+  { include: ["<__chrono/steady_clock.h>", "private", "<chrono>", "public"] },
+  { include: ["<__chrono/time_point.h>", "private", "<chrono>", "public"] },
+
   { symbol: ["INT32_MAX", "public", "<climits>", "public"]},
 
   { symbol: ["abs", "public", "<cmath>", "public"]},
@@ -26,13 +30,13 @@
   { symbol: ["sqrt", "public", "<cmath>", "public"]},
 
   # The first of these is the preferred include, but the others are acceptable.
-  { symbol: ["size_t", "public", "<cstddef>", "public"]},
-  { symbol: ["size_t", "public", "<cstdio>", "public"]},
-  { symbol: ["size_t", "public", "<cstdlib>", "public"]},
-  { symbol: ["size_t", "public", "<cstring>", "public"]},
-  { symbol: ["size_t", "public", "<ctime>", "public"]},
-  { symbol: ["size_t", "public", "<cuchar>", "public"]},
-  { symbol: ["size_t", "public", "<cwchar>", "public"]},
+  { symbol: ["size_t", "private", "<cstddef>", "public"]},
+  { symbol: ["size_t", "private", "<cstdio>", "public"]},
+  { symbol: ["size_t", "private", "<cstdlib>", "public"]},
+  { symbol: ["size_t", "private", "<cstring>", "public"]},
+  { symbol: ["size_t", "private", "<ctime>", "public"]},
+  { symbol: ["size_t", "private", "<cuchar>", "public"]},
+  { symbol: ["size_t", "private", "<cwchar>", "public"]},
 
   { symbol: ["int8_t", "public", "<cstdint>", "public"]},
   { symbol: ["int16_t", "public", "<cstdint>", "public"]},
@@ -43,6 +47,7 @@
   { symbol: ["uint32_t", "public", "<cstdint>", "public"]},
   { symbol: ["uint64_t", "public", "<cstdint>", "public"]},
 
+
   { symbol: ["FILE", "public", "<cstdio>", "public"]},
 
   { include: ["<__functional/function.h>", "private", "<functional>", "public"] },
@@ -83,9 +88,13 @@
 
   { include: ["<__locale>", "private", "<locale>", "public"] },
 
+  { include: ["<__numeric/accumulate.h>", "private", "<numeric>", "public"] },
+
   { include: ["<__memory/shared_ptr.h>", "private", "<memory>", "public"] },
   { include: ["<__memory/unique_ptr.h>", "private", "<memory>", "public"] },
 
+  { include: ["<__random/random_device.h>", "private", "<random>", "public"] },
+
   { include: ["<__tuple>", "private", "<tuple>", "public"] },
 
   { include: ["<__tree>", "private", "<set>", "public"] },
@@ -103,6 +112,8 @@
 
   { symbol: ["std::string", "public", "<string>", "public"] },
 
+  { include: ["<__fwd/string_view.h>", "private", "<string_view>", "public"] },
+
   { include: ["<__hash_table>", "private", "<unordered_map>", "public"] },
 
   { include: ["<__utility/declval.h>", "private", "<utility>", "public"] },
@@ -112,6 +123,12 @@
   { include: ["<__utility/swap.h>", "private", "<utility>", "public"] },
   { include: ["<__utility/pair.h>", "private", "<utility>", "public"] },
 
+  { include: ["<__type_traits/enable_if.h>", "private", "<type_traits>", "public"] },
+  { include: ["<__type_traits/integral_constant.h>", "private", "<type_traits>", "public"] },
+  { include: ["<__type_traits/is_trivially_copyable.h>", "private", "<type_traits>", "public"] },
+  { include: ["<__type_traits/remove_extent.h>", "private", "<type_traits>", "public"] },
+  { include: ["<__type_traits/remove_pointer.h>", "private", "<type_traits>", "public"] },
+
   { symbol: ["std::__bit_reference", "public", "<vector>", "public"] },
   { include: ["<__bit_reference>", "private",  "<vector>", "public"] },
 
diff --git a/toolchain/linux_trampolines/clang_trampoline_linux.sh b/toolchain/linux_trampolines/clang_trampoline_linux.sh
index b7433ea..a706445 100755
--- a/toolchain/linux_trampolines/clang_trampoline_linux.sh
+++ b/toolchain/linux_trampolines/clang_trampoline_linux.sh
@@ -4,7 +4,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-export LD_LIBRARY_PATH="external/clang_linux_amd64/usr/lib/x86_64-linux-gnu:external/clang_linux_amd64/usr/lib/llvm-13/lib"
+export LD_LIBRARY_PATH="external/clang_linux_amd64/usr/lib/x86_64-linux-gnu"
 
 set -e
 
@@ -76,22 +76,23 @@
   # regular compilation with clang.
   # We always allow SkTypes.h because it sets some defines that later #ifdefs use and IWYU is
   # not consistent with detecting that.
-  external/clang_linux_amd64/usr/bin/include-what-you-use \
+  external/clang_linux_amd64/bin/include-what-you-use $@ \
       -Xiwyu --keep="include/core/SkTypes.h" \
       -Xiwyu --no_default_mappings \
-      -Xiwyu --mapping_file=$MAPPING_FILE $@ 2>/dev/null
-  # IWYU returns 2 if everything looks good. It returns some other non-zero exit code otherwise.
-  if [ $? -eq 2 ]; then
+      -Xiwyu --error=3 \
+      -Xiwyu --mapping_file=$MAPPING_FILE 2>/dev/null
+  # IWYU returns 0 if everything looks good. It returns some other non-zero exit code otherwise.
+  if [ $? -eq 0 ]; then
     exit 0 # keep the build going
   else
     # Run IWYU again, but this time display the output. Then return non-zero to fail the build.
     # These flags are a little different, but only in ways that affect what was displayed, not the
     # analysis. If we aren't sure why IWYU wants to include something, try changing verbose to 3.
-    external/clang_linux_amd64/usr/bin/include-what-you-use \
+    external/clang_linux_amd64/bin/include-what-you-use $@ \
         -Xiwyu --keep="include/core/SkTypes.h" \
         -Xiwyu --no_default_mappings \
         -Xiwyu --mapping_file=$MAPPING_FILE -Xiwyu --no_comments \
-        -Xiwyu --quoted_includes_first -Xiwyu --verbose=3 $@
+        -Xiwyu --quoted_includes_first -Xiwyu --verbose=3
     exit 1 # fail the build
   fi
 fi
diff --git a/toolchain/utils.bzl b/toolchain/utils.bzl
index fd7a4b8..064aa45 100644
--- a/toolchain/utils.bzl
+++ b/toolchain/utils.bzl
@@ -38,3 +38,8 @@
 
     mirror_url = "%s/%s%s" % (_GCS_MIRROR_PREFIX, sha256, extension)
     return [mirror_url] if _TEST_GCS_MIRROR else [url, mirror_url]
+
+def gcs_mirror_only(sha256, suffix):
+    if suffix not in _SUPPORTED_SUFFIXES:
+        fail("unsupported suffix %s" % suffix)
+    return "%s/%s%s" % (_GCS_MIRROR_PREFIX, sha256, suffix)
diff --git a/tools/debugger/DebugCanvas.cpp b/tools/debugger/DebugCanvas.cpp
index 183a826..ac7a9d4 100644
--- a/tools/debugger/DebugCanvas.cpp
+++ b/tools/debugger/DebugCanvas.cpp
@@ -7,6 +7,8 @@
 
 #include "tools/debugger/DebugCanvas.h"
 
+#include "include/core/SkBlendMode.h"
+#include "include/core/SkClipOp.h"
 #include "include/core/SkData.h"
 #include "include/core/SkMatrix.h"
 #include "include/core/SkPaint.h"
diff --git a/tools/debugger/DebugCanvas.h b/tools/debugger/DebugCanvas.h
index 5597bd0..d4bee4d 100644
--- a/tools/debugger/DebugCanvas.h
+++ b/tools/debugger/DebugCanvas.h
@@ -8,10 +8,8 @@
 #ifndef SKDEBUGCANVAS_H_
 #define SKDEBUGCANVAS_H_
 
-#include "include/core/SkBlendMode.h"
 #include "include/core/SkCanvas.h"
 #include "include/core/SkCanvasVirtualEnforcer.h"
-#include "include/core/SkClipOp.h"
 #include "include/core/SkColor.h"
 #include "include/core/SkM44.h"
 #include "include/core/SkRect.h"
@@ -42,6 +40,8 @@
 class SkTextBlob;
 class SkVertices;
 class UrlDataManager;
+enum class SkBlendMode;
+enum class SkClipOp;
 struct SkDrawShadowRec;
 struct SkPoint;
 struct SkRSXform;
diff --git a/tools/debugger/DrawCommand.cpp b/tools/debugger/DrawCommand.cpp
index 6851a01..8f20ea3 100644
--- a/tools/debugger/DrawCommand.cpp
+++ b/tools/debugger/DrawCommand.cpp
@@ -9,7 +9,9 @@
 
 #include "include/core/SkAlphaType.h"
 #include "include/core/SkBitmap.h"
+#include "include/core/SkBlendMode.h"
 #include "include/core/SkBlurTypes.h"
+#include "include/core/SkClipOp.h"
 #include "include/core/SkColorFilter.h"
 #include "include/core/SkColorType.h"
 #include "include/core/SkDrawable.h"
diff --git a/tools/debugger/DrawCommand.h b/tools/debugger/DrawCommand.h
index 53bfeb4..a4ad581 100644
--- a/tools/debugger/DrawCommand.h
+++ b/tools/debugger/DrawCommand.h
@@ -8,9 +8,7 @@
 #ifndef SKDRAWCOMMAND_H_
 #define SKDRAWCOMMAND_H_
 
-#include "include/core/SkBlendMode.h"
 #include "include/core/SkCanvas.h"
-#include "include/core/SkClipOp.h"
 #include "include/core/SkColor.h"
 #include "include/core/SkData.h"
 #include "include/core/SkDrawable.h"
@@ -47,6 +45,8 @@
 class SkJSONWriter;
 class SkWStream;
 class UrlDataManager;
+enum class SkBlendMode;
+enum class SkClipOp;
 struct SkPoint3;
 struct SkRSXform;
 
diff --git a/tools/debugger/JsonWriteBuffer.cpp b/tools/debugger/JsonWriteBuffer.cpp
index 06abe5f..d658561 100644
--- a/tools/debugger/JsonWriteBuffer.cpp
+++ b/tools/debugger/JsonWriteBuffer.cpp
@@ -9,7 +9,6 @@
 
 #include "include/core/SkFlattenable.h"
 #include "include/core/SkPoint.h"
-#include "include/core/SkSamplingOptions.h"
 #include "include/core/SkString.h"
 #include "src/utils/SkJSONWriter.h"
 #include "tools/debugger/DrawCommand.h"
diff --git a/tools/get_images_from_skps.cpp b/tools/get_images_from_skps.cpp
index a75d47f..6602648 100644
--- a/tools/get_images_from_skps.cpp
+++ b/tools/get_images_from_skps.cpp
@@ -9,6 +9,7 @@
 #include "include/core/SkBitmap.h"
 #include "include/core/SkColorSpace.h"
 #include "include/core/SkData.h"
+#include "include/core/SkEncodedImageFormat.h"
 #include "include/core/SkPicture.h"
 #include "include/core/SkSerialProcs.h"
 #include "include/core/SkStream.h"
diff --git a/tools/sksl-minify/SkSLMinify.cpp b/tools/sksl-minify/SkSLMinify.cpp
index 77eab9f..88edca6 100644
--- a/tools/sksl-minify/SkSLMinify.cpp
+++ b/tools/sksl-minify/SkSLMinify.cpp
@@ -7,6 +7,7 @@
 
 #define SK_OPTS_NS sksl_minify_standalone
 #include "include/core/SkStream.h"
+#include "include/private/SkSLProgramKind.h"
 #include "include/private/SkStringView.h"
 #include "src/core/SkCpu.h"
 #include "src/core/SkOpts.h"