Revert "Revert "SkTypes: extract SkTo""

This reverts commit fdcfb8b7c23fbf18f872d2c31d27978235033876.

> Original change's description:
> > SkTypes: extract SkTo
> >
> > Change-Id: I8de790d5013db2105ad885fa2683303d7c250b09
> > Reviewed-on: https://skia-review.googlesource.com/133620
> > Reviewed-by: Mike Klein <mtklein@google.com>

Change-Id: Ida74fbc5c21248a724a5edbf9fae18a33bcb23aa
Reviewed-on: https://skia-review.googlesource.com/134506
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Hal Canary <halcanary@google.com>
diff --git a/src/core/SkAAClip.cpp b/src/core/SkAAClip.cpp
index fc8f771..46c09e0 100644
--- a/src/core/SkAAClip.cpp
+++ b/src/core/SkAAClip.cpp
@@ -6,6 +6,7 @@
  */
 
 #include "SkAAClip.h"
+
 #include "SkAtomics.h"
 #include "SkBlitter.h"
 #include "SkColorData.h"
@@ -13,6 +14,7 @@
 #include "SkPath.h"
 #include "SkRectPriv.h"
 #include "SkScan.h"
+#include "SkTo.h"
 #include "SkUtils.h"
 
 class AutoAAClipValidate {
diff --git a/src/core/SkAlphaRuns.cpp b/src/core/SkAlphaRuns.cpp
index 37f57c1..c5c4d15 100644
--- a/src/core/SkAlphaRuns.cpp
+++ b/src/core/SkAlphaRuns.cpp
@@ -5,8 +5,8 @@
  * found in the LICENSE file.
  */
 
-
 #include "SkAntiRun.h"
+#include "SkTo.h"
 #include "SkUtils.h"
 
 void SkAlphaRuns::reset(int width) {
diff --git a/src/core/SkAnalyticEdge.cpp b/src/core/SkAnalyticEdge.cpp
index e2da090..60c956a 100644
--- a/src/core/SkAnalyticEdge.cpp
+++ b/src/core/SkAnalyticEdge.cpp
@@ -5,10 +5,11 @@
  * found in the LICENSE file.
  */
 
-
 #include "SkAnalyticEdge.h"
+
 #include "SkFDot6.h"
 #include "SkMathPriv.h"
+#include "SkTo.h"
 
 // This will become a bottleneck for small ovals rendering if we call SkFixedDiv twice here.
 // Therefore, we'll let the outter function compute the slope once and send in the value.
diff --git a/src/core/SkAnalyticEdge.h b/src/core/SkAnalyticEdge.h
index 5e8403f..b18ccac 100644
--- a/src/core/SkAnalyticEdge.h
+++ b/src/core/SkAnalyticEdge.h
@@ -9,6 +9,7 @@
 #define SkAnalyticEdge_DEFINED
 
 #include "SkEdge.h"
+#include "SkTo.h"
 
 struct SkAnalyticEdge {
     // Similar to SkEdge, the conic edges will be converted to quadratic edges
diff --git a/src/core/SkAntiRun.h b/src/core/SkAntiRun.h
index 8b19036..92aabff 100644
--- a/src/core/SkAntiRun.h
+++ b/src/core/SkAntiRun.h
@@ -5,11 +5,11 @@
  * found in the LICENSE file.
  */
 
-
 #ifndef SkAntiRun_DEFINED
 #define SkAntiRun_DEFINED
 
 #include "SkBlitter.h"
+#include "SkTo.h"
 
 /** Sparse array of run-length-encoded alpha (supersampling coverage) values.
     Sparseness allows us to independently compose several paths into the
diff --git a/src/core/SkBitmap.cpp b/src/core/SkBitmap.cpp
index 29a1a56..14bbe76 100644
--- a/src/core/SkBitmap.cpp
+++ b/src/core/SkBitmap.cpp
@@ -5,8 +5,9 @@
  * found in the LICENSE file.
  */
 
-#include "SkAtomics.h"
 #include "SkBitmap.h"
+
+#include "SkAtomics.h"
 #include "SkColorData.h"
 #include "SkConvertPixels.h"
 #include "SkData.h"
@@ -23,6 +24,7 @@
 #include "SkRect.h"
 #include "SkScalar.h"
 #include "SkTemplates.h"
+#include "SkTo.h"
 #include "SkUnPreMultiply.h"
 #include "SkWriteBuffer.h"
 #include "SkWritePixelsRec.h"
diff --git a/src/core/SkBitmapProcState_matrixProcs.cpp b/src/core/SkBitmapProcState_matrixProcs.cpp
index f9e3c82..2fd1b9b 100644
--- a/src/core/SkBitmapProcState_matrixProcs.cpp
+++ b/src/core/SkBitmapProcState_matrixProcs.cpp
@@ -14,10 +14,11 @@
  */
 
 #include "SkBitmapProcState.h"
+#include "SkBitmapProcState_utils.h"
 #include "SkShader.h"
+#include "SkTo.h"
 #include "SkUtils.h"
 #include "SkUtilsArm.h"
-#include "SkBitmapProcState_utils.h"
 
 /*  returns 0...(n-1) given any x (positive or negative).
 
diff --git a/src/core/SkBitmapProcState_utils.h b/src/core/SkBitmapProcState_utils.h
index ec35ca1..b40b45c 100644
--- a/src/core/SkBitmapProcState_utils.h
+++ b/src/core/SkBitmapProcState_utils.h
@@ -8,6 +8,8 @@
 #ifndef SkBitmapProcState_utils_DEFINED
 #define SkBitmapProcState_utils_DEFINED
 
+#include "SkTo.h"
+
 // Helper to ensure that when we shift down, we do it w/o sign-extension
 // so the caller doesn't have to manually mask off the top 16 bits
 //
diff --git a/src/core/SkBlitter.cpp b/src/core/SkBlitter.cpp
index ee6100a..7a45981 100644
--- a/src/core/SkBlitter.cpp
+++ b/src/core/SkBlitter.cpp
@@ -5,21 +5,23 @@
  * found in the LICENSE file.
  */
 
-#include "SkArenaAlloc.h"
 #include "SkBlitter.h"
+
 #include "SkAntiRun.h"
+#include "SkArenaAlloc.h"
 #include "SkColor.h"
 #include "SkColorFilter.h"
-#include "SkReadBuffer.h"
-#include "SkWriteBuffer.h"
 #include "SkMask.h"
 #include "SkMaskFilterBase.h"
 #include "SkPaintPriv.h"
+#include "SkReadBuffer.h"
 #include "SkRegionPriv.h"
 #include "SkShaderBase.h"
 #include "SkString.h"
 #include "SkTLazy.h"
+#include "SkTo.h"
 #include "SkUtils.h"
+#include "SkWriteBuffer.h"
 #include "SkXfermodeInterpretation.h"
 
 SkBlitter::~SkBlitter() {}
diff --git a/src/core/SkBlitter.h b/src/core/SkBlitter.h
index cf3edd3..fc3bf8b 100644
--- a/src/core/SkBlitter.h
+++ b/src/core/SkBlitter.h
@@ -15,6 +15,7 @@
 #include "SkRect.h"
 #include "SkRegion.h"
 #include "SkShaderBase.h"
+#include "SkTo.h"
 
 class SkArenaAlloc;
 class SkMatrix;
diff --git a/src/core/SkBlurMask.cpp b/src/core/SkBlurMask.cpp
index 4b8293c..b36bc0c 100644
--- a/src/core/SkBlurMask.cpp
+++ b/src/core/SkBlurMask.cpp
@@ -5,15 +5,15 @@
  * found in the LICENSE file.
  */
 
-
 #include "SkBlurMask.h"
+
+#include "SkTo.h"
 #include "SkColorPriv.h"
 #include "SkMaskBlurFilter.h"
 #include "SkMath.h"
 #include "SkTemplates.h"
 #include "SkEndian.h"
 
-
 // This constant approximates the scaling done in the software path's
 // "high quality" mode, in SkBlurMask::Blur() (1 / sqrt(3)).
 // IMHO, it actually should be 1:  we blur "less" than we should do
diff --git a/src/core/SkBuffer.h b/src/core/SkBuffer.h
index 7dfe2bb..0338e76 100644
--- a/src/core/SkBuffer.h
+++ b/src/core/SkBuffer.h
@@ -5,10 +5,11 @@
  * found in the LICENSE file.
  */
 
-
 #ifndef SkBuffer_DEFINED
 #define SkBuffer_DEFINED
 
+#include <limits>
+
 #include "SkSafeMath.h"
 #include "SkScalar.h"
 #include "SkTypes.h"
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 8494bdb..494bd3b 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -5,53 +5,55 @@
  * found in the LICENSE file.
  */
 
+#include "SkCanvas.h"
+
 #include "SkArenaAlloc.h"
 #include "SkBitmapDevice.h"
-#include "SkCanvas.h"
 #include "SkCanvasPriv.h"
+#include "SkClipOpPriv.h"
 #include "SkClipStack.h"
 #include "SkColorFilter.h"
 #include "SkDraw.h"
-#include "SkDrawable.h"
 #include "SkDrawFilter.h"
 #include "SkDrawLooper.h"
+#include "SkDrawable.h"
 #include "SkGlyphCache.h"
 #include "SkGlyphRun.h"
 #include "SkImage.h"
-#include "SkImage_Base.h"
 #include "SkImageFilter.h"
 #include "SkImageFilterCache.h"
+#include "SkImage_Base.h"
 #include "SkLatticeIter.h"
+#include "SkMSAN.h"
 #include "SkMakeUnique.h"
 #include "SkMatrixUtils.h"
 #include "SkMetaData.h"
-#include "SkMSAN.h"
 #include "SkNoDrawCanvas.h"
 #include "SkNx.h"
 #include "SkPaintPriv.h"
 #include "SkPatchUtils.h"
 #include "SkPathEffect.h"
 #include "SkPicture.h"
+#include "SkRRect.h"
 #include "SkRasterClip.h"
 #include "SkRasterHandleAllocator.h"
-#include "SkRRect.h"
 #include "SkSpecialImage.h"
 #include "SkStrikeCache.h"
 #include "SkString.h"
 #include "SkSurface_Base.h"
+#include "SkTLazy.h"
 #include "SkTextBlob.h"
 #include "SkTextFormatParams.h"
-#include "SkTLazy.h"
+#include "SkTo.h"
 #include "SkTraceEvent.h"
+#include "SkVertices.h"
+
 #include <new>
 
 #if SK_SUPPORT_GPU
 #include "GrContext.h"
 #include "SkGr.h"
-
 #endif
-#include "SkClipOpPriv.h"
-#include "SkVertices.h"
 
 #define RETURN_ON_NULL(ptr)     do { if (nullptr == (ptr)) return; } while (0)
 #define RETURN_ON_FALSE(pred)   do { if (!(pred)) return; } while (0)
diff --git a/src/core/SkColorData.h b/src/core/SkColorData.h
index 3fc0113..3e61c18 100644
--- a/src/core/SkColorData.h
+++ b/src/core/SkColorData.h
@@ -15,6 +15,7 @@
 
 #include "SkColor.h"
 #include "SkColorPriv.h"
+#include "SkTo.h"
 
 //////////////////////////////////////////////////////////////////////////////
 
diff --git a/src/core/SkDescriptor.h b/src/core/SkDescriptor.h
index 84672e5..7f1939d 100644
--- a/src/core/SkDescriptor.h
+++ b/src/core/SkDescriptor.h
@@ -10,7 +10,9 @@
 
 #include "SkMacros.h"
 #include "SkOpts.h"
+#include "SkTo.h"
 #include "SkTypes.h"
+
 #include <memory>
 #include <new>
 
diff --git a/src/core/SkDevice.cpp b/src/core/SkDevice.cpp
index aa9b1e2..aea08c5 100644
--- a/src/core/SkDevice.cpp
+++ b/src/core/SkDevice.cpp
@@ -6,6 +6,7 @@
  */
 
 #include "SkDevice.h"
+
 #include "SkColorFilter.h"
 #include "SkDraw.h"
 #include "SkDrawFilter.h"
@@ -28,6 +29,7 @@
 #include "SkTLazy.h"
 #include "SkTextBlobRunIterator.h"
 #include "SkTextToPathIter.h"
+#include "SkTo.h"
 #include "SkUtils.h"
 #include "SkVertices.h"
 
diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp
index 69eadbe..58489b9 100644
--- a/src/core/SkDraw.cpp
+++ b/src/core/SkDraw.cpp
@@ -5,7 +5,7 @@
  * found in the LICENSE file.
  */
 
-#define __STDC_LIMIT_MACROS
+#include "SkDraw.h"
 
 #include "SkArenaAlloc.h"
 #include "SkAutoBlitterChoose.h"
@@ -14,7 +14,6 @@
 #include "SkCanvas.h"
 #include "SkColorData.h"
 #include "SkDevice.h"
-#include "SkDraw.h"
 #include "SkDrawProcs.h"
 #include "SkFindAndPlaceGlyph.h"
 #include "SkMaskFilterBase.h"
@@ -24,19 +23,20 @@
 #include "SkPaint.h"
 #include "SkPathEffect.h"
 #include "SkPathPriv.h"
+#include "SkRRect.h"
 #include "SkRasterClip.h"
 #include "SkRectPriv.h"
-#include "SkRRect.h"
 #include "SkScalerContext.h"
 #include "SkScan.h"
 #include "SkShader.h"
 #include "SkString.h"
 #include "SkStroke.h"
 #include "SkStrokeRec.h"
+#include "SkTLazy.h"
 #include "SkTemplates.h"
 #include "SkTextMapStateProc.h"
 #include "SkThreadedBMPDevice.h"
-#include "SkTLazy.h"
+#include "SkTo.h"
 #include "SkUtils.h"
 
 static SkPaint make_paint_with_image(
diff --git a/src/core/SkEdge.cpp b/src/core/SkEdge.cpp
index 1bb8e9e..0a19e53 100644
--- a/src/core/SkEdge.cpp
+++ b/src/core/SkEdge.cpp
@@ -5,10 +5,11 @@
  * found in the LICENSE file.
  */
 
-
 #include "SkEdge.h"
+
 #include "SkFDot6.h"
 #include "SkMathPriv.h"
+#include "SkTo.h"
 
 /*
     In setLine, setQuadratic, setCubic, the first thing we do is to convert
diff --git a/src/core/SkEdge.h b/src/core/SkEdge.h
index 509c0c4..7fc6851 100644
--- a/src/core/SkEdge.h
+++ b/src/core/SkEdge.h
@@ -5,13 +5,13 @@
  * found in the LICENSE file.
  */
 
-
 #ifndef SkEdge_DEFINED
 #define SkEdge_DEFINED
 
-#include "SkRect.h"
 #include "SkFDot6.h"
 #include "SkMath.h"
+#include "SkRect.h"
+#include "SkTo.h"
 
 // This correctly favors the lower-pixel when y0 is on a 1/2 pixel boundary
 #define SkEdge_Compute_DY(top, y0)  (SkLeftShift(top, 6) + 32 - (y0))
diff --git a/src/core/SkEdgeBuilder.cpp b/src/core/SkEdgeBuilder.cpp
index b7d80b0..48c1bca 100644
--- a/src/core/SkEdgeBuilder.cpp
+++ b/src/core/SkEdgeBuilder.cpp
@@ -4,14 +4,17 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "SkEdgeBuilder.h"
-#include "SkEdge.h"
+
 #include "SkAnalyticEdge.h"
+#include "SkEdge.h"
 #include "SkEdgeClipper.h"
-#include "SkLineClipper.h"
 #include "SkGeometry.h"
+#include "SkLineClipper.h"
 #include "SkPath.h"
 #include "SkPathPriv.h"
+#include "SkTo.h"
 
 ///////////////////////////////////////////////////////////////////////////////
 
diff --git a/src/core/SkFDot6.h b/src/core/SkFDot6.h
index 0046661..57e7d6a 100644
--- a/src/core/SkFDot6.h
+++ b/src/core/SkFDot6.h
@@ -5,13 +5,13 @@
  * found in the LICENSE file.
  */
 
-
 #ifndef SkFDot6_DEFINED
 #define SkFDot6_DEFINED
 
 #include "SkFixed.h"
-#include "SkScalar.h"
 #include "SkMath.h"
+#include "SkScalar.h"
+#include "SkTo.h"
 
 typedef int32_t SkFDot6;
 
diff --git a/src/core/SkFont.cpp b/src/core/SkFont.cpp
index 77259ff..bde8c4c 100644
--- a/src/core/SkFont.cpp
+++ b/src/core/SkFont.cpp
@@ -6,6 +6,8 @@
  */
 
 #include "SkFont.h"
+
+#include "SkTo.h"
 #include "SkTypeface.h"
 #include "SkUtils.h"
 
diff --git a/src/core/SkGlyph.h b/src/core/SkGlyph.h
index 3ea795b..f618a33 100644
--- a/src/core/SkGlyph.h
+++ b/src/core/SkGlyph.h
@@ -12,6 +12,7 @@
 #include "SkChecksum.h"
 #include "SkFixed.h"
 #include "SkMask.h"
+#include "SkTo.h"
 #include "SkTypes.h"
 
 class SkPath;
diff --git a/src/core/SkGlyphRun.cpp b/src/core/SkGlyphRun.cpp
index 6209b58..caea07a 100644
--- a/src/core/SkGlyphRun.cpp
+++ b/src/core/SkGlyphRun.cpp
@@ -14,11 +14,12 @@
 #include "SkDevice.h"
 #include "SkDraw.h"
 #include "SkGlyphCache.h"
-#include "SkMakeUnique.h"
 #include "SkMSAN.h"
+#include "SkMakeUnique.h"
 #include "SkPaint.h"
 #include "SkPaintPriv.h"
 #include "SkStrikeCache.h"
+#include "SkTo.h"
 #include "SkUtils.h"
 
 static SkTypeface::Encoding convert_encoding(SkPaint::TextEncoding encoding) {
diff --git a/src/core/SkIPoint16.h b/src/core/SkIPoint16.h
index 27052b3..735f167 100644
--- a/src/core/SkIPoint16.h
+++ b/src/core/SkIPoint16.h
@@ -8,6 +8,7 @@
 #ifndef SkIPoint16_DEFINED
 #define SkIPoint16_DEFINED
 
+#include "SkTo.h"
 #include "SkTypes.h"
 
 /** \struct SkIPoint16
diff --git a/src/core/SkLineClipper.cpp b/src/core/SkLineClipper.cpp
index 62da6d0..73a1819 100644
--- a/src/core/SkLineClipper.cpp
+++ b/src/core/SkLineClipper.cpp
@@ -6,6 +6,7 @@
  */
 
 #include "SkLineClipper.h"
+#include "SkTo.h"
 
 template <typename T> T pin_unsorted(T value, T limit0, T limit1) {
     if (limit1 < limit0) {
diff --git a/src/core/SkMD5.h b/src/core/SkMD5.h
index 8838d47..5ae14e1 100644
--- a/src/core/SkMD5.h
+++ b/src/core/SkMD5.h
@@ -9,6 +9,7 @@
 #define SkMD5_DEFINED
 
 #include "SkStream.h"
+#include "SkTo.h"
 
 /* Calculate a 128-bit MD5 message-digest of the bytes sent to this stream. */
 class SkMD5 : public SkWStream {
diff --git a/src/core/SkMask.cpp b/src/core/SkMask.cpp
index b3a6543..7336116 100644
--- a/src/core/SkMask.cpp
+++ b/src/core/SkMask.cpp
@@ -6,8 +6,10 @@
  */
 
 #include "SkMask.h"
+
 #include "SkMalloc.h"
 #include "SkSafeMath.h"
+#include "SkTo.h"
 
 /** returns the product if it is positive and fits in 31 bits. Otherwise this
     returns 0.
diff --git a/src/core/SkMaskBlurFilter.cpp b/src/core/SkMaskBlurFilter.cpp
index ea3d8ab..2c8cda5 100644
--- a/src/core/SkMaskBlurFilter.cpp
+++ b/src/core/SkMaskBlurFilter.cpp
@@ -5,13 +5,15 @@
  * found in the LICENSE file.
  */
 
+#include "SkMaskBlurFilter.h"
+
 #include "SkArenaAlloc.h"
 #include "SkColorPriv.h"
 #include "SkGaussFilter.h"
 #include "SkMalloc.h"
-#include "SkMaskBlurFilter.h"
 #include "SkNx.h"
 #include "SkTemplates.h"
+#include "SkTo.h"
 
 #include <cmath>
 #include <climits>
diff --git a/src/core/SkMaskGamma.cpp b/src/core/SkMaskGamma.cpp
index bbe72c4..e231d92 100644
--- a/src/core/SkMaskGamma.cpp
+++ b/src/core/SkMaskGamma.cpp
@@ -5,11 +5,12 @@
  * found in the LICENSE file.
  */
 
-#include "SkTypes.h"
+#include "SkMaskGamma.h"
 
 #include "SkColor.h"
 #include "SkFloatingPoint.h"
-#include "SkMaskGamma.h"
+#include "SkTo.h"
+#include "SkTypes.h"
 
 class SkLinearColorSpaceLuminance : public SkColorSpaceLuminance {
     SkScalar toLuma(SkScalar SkDEBUGCODE(gamma), SkScalar luminance) const override {
diff --git a/src/core/SkMatrix.cpp b/src/core/SkMatrix.cpp
index d3bdb38..cb4b792 100644
--- a/src/core/SkMatrix.cpp
+++ b/src/core/SkMatrix.cpp
@@ -5,6 +5,8 @@
  * found in the LICENSE file.
  */
 
+#include "SkMatrix.h"
+
 #include "SkFloatBits.h"
 #include "SkMathPriv.h"
 #include "SkMatrixPriv.h"
@@ -13,6 +15,7 @@
 #include "SkPoint3.h"
 #include "SkRSXform.h"
 #include "SkString.h"
+#include "SkTo.h"
 #include <stddef.h>
 
 static void normalize_perspective(SkScalar mat[9]) {
diff --git a/src/core/SkMetaData.cpp b/src/core/SkMetaData.cpp
index d1564e9..e960321 100644
--- a/src/core/SkMetaData.cpp
+++ b/src/core/SkMetaData.cpp
@@ -5,11 +5,11 @@
  * found in the LICENSE file.
  */
 
-
 #include "SkMetaData.h"
 
 #include "SkMalloc.h"
 #include "SkRefCnt.h"
+#include "SkTo.h"
 
 struct PtrPair {
     void*               fPtr;
diff --git a/src/core/SkMipMap.cpp b/src/core/SkMipMap.cpp
index edb800f..f569682 100644
--- a/src/core/SkMipMap.cpp
+++ b/src/core/SkMipMap.cpp
@@ -6,6 +6,7 @@
  */
 
 #include "SkMipMap.h"
+
 #include "SkBitmap.h"
 #include "SkColorData.h"
 #include "SkHalf.h"
@@ -14,6 +15,7 @@
 #include "SkNx.h"
 #include "SkPM4fPriv.h"
 #include "SkSRGB.h"
+#include "SkTo.h"
 #include "SkTypes.h"
 #include <new>
 
diff --git a/src/core/SkNx.h b/src/core/SkNx.h
index 9536540..1636dde 100644
--- a/src/core/SkNx.h
+++ b/src/core/SkNx.h
@@ -11,6 +11,8 @@
 #include "SkSafe_math.h"
 #include "SkScalar.h"
 #include "SkTypes.h"
+
+#include <algorithm>
 #include <limits>
 #include <type_traits>
 
diff --git a/src/core/SkOverdrawCanvas.cpp b/src/core/SkOverdrawCanvas.cpp
index e5bf5a6..25bc7fb 100644
--- a/src/core/SkOverdrawCanvas.cpp
+++ b/src/core/SkOverdrawCanvas.cpp
@@ -5,13 +5,14 @@
  * found in the LICENSE file.
  */
 
+#include "SkOverdrawCanvas.h"
+
 #include "SkColorFilter.h"
-#include "SkDrawable.h"
 #include "SkDrawShadowInfo.h"
+#include "SkDrawable.h"
 #include "SkFindAndPlaceGlyph.h"
 #include "SkImagePriv.h"
 #include "SkLatticeIter.h"
-#include "SkOverdrawCanvas.h"
 #include "SkPatchUtils.h"
 #include "SkPath.h"
 #include "SkRRect.h"
@@ -19,6 +20,7 @@
 #include "SkStrikeCache.h"
 #include "SkTextBlob.h"
 #include "SkTextBlobRunIterator.h"
+#include "SkTo.h"
 
 namespace {
 class ProcessOneGlyphBounds {
diff --git a/src/core/SkPaint.cpp b/src/core/SkPaint.cpp
index c76b981..7643bab 100644
--- a/src/core/SkPaint.cpp
+++ b/src/core/SkPaint.cpp
@@ -6,22 +6,22 @@
  */
 
 #include "SkPaint.h"
-#include "SkPaintPriv.h"
+
 #include "SkColorFilter.h"
 #include "SkData.h"
 #include "SkDraw.h"
 #include "SkFontDescriptor.h"
-#include "SkGraphics.h"
 #include "SkGlyphCache.h"
+#include "SkGraphics.h"
 #include "SkImageFilter.h"
 #include "SkMaskFilter.h"
 #include "SkMaskGamma.h"
 #include "SkMutex.h"
-#include "SkReadBuffer.h"
-#include "SkWriteBuffer.h"
 #include "SkOpts.h"
 #include "SkPaintDefaults.h"
+#include "SkPaintPriv.h"
 #include "SkPathEffect.h"
+#include "SkReadBuffer.h"
 #include "SkSafeRange.h"
 #include "SkScalar.h"
 #include "SkScalerContext.h"
@@ -31,12 +31,14 @@
 #include "SkStroke.h"
 #include "SkStrokeRec.h"
 #include "SkSurfacePriv.h"
+#include "SkTLazy.h"
 #include "SkTextBlob.h"
 #include "SkTextBlobRunIterator.h"
 #include "SkTextFormatParams.h"
 #include "SkTextToPathIter.h"
-#include "SkTLazy.h"
+#include "SkTo.h"
 #include "SkTypeface.h"
+#include "SkWriteBuffer.h"
 
 static inline uint32_t set_clear_mask(uint32_t bits, bool cond, uint32_t mask) {
     return cond ? bits | mask : bits & ~mask;
diff --git a/src/core/SkPath.cpp b/src/core/SkPath.cpp
index d80ceee..e38d736 100644
--- a/src/core/SkPath.cpp
+++ b/src/core/SkPath.cpp
@@ -5,7 +5,8 @@
  * found in the LICENSE file.
  */
 
-#include <cmath>
+#include "SkPath.h"
+
 #include "SkBuffer.h"
 #include "SkCubicClipper.h"
 #include "SkData.h"
@@ -18,6 +19,9 @@
 #include "SkPointPriv.h"
 #include "SkRRect.h"
 #include "SkSafeMath.h"
+#include "SkTo.h"
+
+#include <cmath>
 
 static float poly_eval(float A, float B, float C, float t) {
     return (A * t + B) * t + C;
diff --git a/src/core/SkPathRef.cpp b/src/core/SkPathRef.cpp
index 58782df..20d3131 100644
--- a/src/core/SkPathRef.cpp
+++ b/src/core/SkPathRef.cpp
@@ -5,13 +5,15 @@
  * found in the LICENSE file.
  */
 
+#include "SkPathRef.h"
+
 #include "SkBuffer.h"
 #include "SkNx.h"
 #include "SkOnce.h"
 #include "SkPath.h"
-#include "SkPathRef.h"
 #include "SkPathPriv.h"
 #include "SkSafeMath.h"
+#include "SkTo.h"
 
 // Conic weights must be 0 < weight <= finite
 static bool validate_conic_weights(const SkScalar weights[], int count) {
diff --git a/src/core/SkPath_serial.cpp b/src/core/SkPath_serial.cpp
index 3adcec2..d434dd1 100644
--- a/src/core/SkPath_serial.cpp
+++ b/src/core/SkPath_serial.cpp
@@ -5,7 +5,6 @@
  * found in the LICENSE file.
  */
 
-#include <cmath>
 #include "SkBuffer.h"
 #include "SkData.h"
 #include "SkMath.h"
@@ -13,6 +12,9 @@
 #include "SkPathRef.h"
 #include "SkRRectPriv.h"
 #include "SkSafeMath.h"
+#include "SkTo.h"
+
+#include <cmath>
 
 enum SerializationOffsets {
     kType_SerializationShift = 28,       // requires 4 bits
diff --git a/src/core/SkPicture.cpp b/src/core/SkPicture.cpp
index 34fa558..ad83031 100644
--- a/src/core/SkPicture.cpp
+++ b/src/core/SkPicture.cpp
@@ -5,6 +5,8 @@
  * found in the LICENSE file.
  */
 
+#include "SkPicture.h"
+
 #include "SkAtomics.h"
 #include "SkImageGenerator.h"
 #include "SkMathPriv.h"
@@ -15,6 +17,7 @@
 #include "SkPictureRecord.h"
 #include "SkPictureRecorder.h"
 #include "SkSerialProcs.h"
+#include "SkTo.h"
 
 // When we read/write the SkPictInfo via a stream, we have a sentinel byte right after the info.
 // Note: in the read/write buffer versions, we have a slightly different convention:
diff --git a/src/core/SkPictureData.cpp b/src/core/SkPictureData.cpp
index 3d34b27..bd2be63 100644
--- a/src/core/SkPictureData.cpp
+++ b/src/core/SkPictureData.cpp
@@ -5,18 +5,20 @@
  * found in the LICENSE file.
  */
 
-#include <new>
+#include "SkPictureData.h"
 
 #include "SkAutoMalloc.h"
 #include "SkImageGenerator.h"
 #include "SkMakeUnique.h"
-#include "SkPictureData.h"
 #include "SkPictureRecord.h"
 #include "SkPicturePriv.h"
 #include "SkReadBuffer.h"
 #include "SkTextBlob.h"
 #include "SkTypeface.h"
 #include "SkWriteBuffer.h"
+#include "SkTo.h"
+
+#include <new>
 
 #if SK_SUPPORT_GPU
 #include "GrContext.h"
diff --git a/src/core/SkPictureRecord.cpp b/src/core/SkPictureRecord.cpp
index 32748c1..87c8c4d 100644
--- a/src/core/SkPictureRecord.cpp
+++ b/src/core/SkPictureRecord.cpp
@@ -6,7 +6,9 @@
  */
 
 #include "SkPictureRecord.h"
+
 #include "SkCanvasPriv.h"
+#include "SkClipOpPriv.h"
 #include "SkDrawShadowInfo.h"
 #include "SkImage_Base.h"
 #include "SkMatrixPriv.h"
@@ -14,9 +16,9 @@
 #include "SkPixelRef.h"
 #include "SkRRect.h"
 #include "SkRSXform.h"
-#include "SkTextBlob.h"
 #include "SkTSearch.h"
-#include "SkClipOpPriv.h"
+#include "SkTextBlob.h"
+#include "SkTo.h"
 
 #define HEAP_BLOCK_SIZE 4096
 
diff --git a/src/core/SkPictureRecord.h b/src/core/SkPictureRecord.h
index 9490f53..ad2dbdf 100644
--- a/src/core/SkPictureRecord.h
+++ b/src/core/SkPictureRecord.h
@@ -16,6 +16,7 @@
 #include "SkTArray.h"
 #include "SkTDArray.h"
 #include "SkTHash.h"
+#include "SkTo.h"
 #include "SkVertices.h"
 #include "SkWriter32.h"
 
diff --git a/src/core/SkPixmap.cpp b/src/core/SkPixmap.cpp
index 446f25b..aad9e34 100644
--- a/src/core/SkPixmap.cpp
+++ b/src/core/SkPixmap.cpp
@@ -5,14 +5,16 @@
  * found in the LICENSE file.
  */
 
+#include "SkPixmap.h"
+
 #include "SkBitmap.h"
 #include "SkCanvas.h"
 #include "SkColorData.h"
 #include "SkConvertPixels.h"
 #include "SkData.h"
+#include "SkHalf.h"
 #include "SkImageInfoPriv.h"
 #include "SkImageShader.h"
-#include "SkHalf.h"
 #include "SkMask.h"
 #include "SkNx.h"
 #include "SkPM4f.h"
@@ -20,6 +22,7 @@
 #include "SkReadPixelsRec.h"
 #include "SkSurface.h"
 #include "SkTemplates.h"
+#include "SkTo.h"
 #include "SkUnPreMultiply.h"
 #include "SkUtils.h"
 
diff --git a/src/core/SkRWBuffer.cpp b/src/core/SkRWBuffer.cpp
index ef33f91..69e4a2e 100644
--- a/src/core/SkRWBuffer.cpp
+++ b/src/core/SkRWBuffer.cpp
@@ -8,9 +8,10 @@
 #include "SkRWBuffer.h"
 
 #include "SkAtomics.h"
-#include "SkMalloc.h"
 #include "SkMakeUnique.h"
+#include "SkMalloc.h"
 #include "SkStream.h"
+#include "SkTo.h"
 
 #include <atomic>
 #include <new>
diff --git a/src/core/SkRasterPipelineBlitter.cpp b/src/core/SkRasterPipelineBlitter.cpp
index aa6b6e9..8b37bef 100644
--- a/src/core/SkRasterPipelineBlitter.cpp
+++ b/src/core/SkRasterPipelineBlitter.cpp
@@ -5,9 +5,10 @@
  * found in the LICENSE file.
  */
 
+#include "../jumper/SkJumper.h"
 #include "SkArenaAlloc.h"
-#include "SkBlitter.h"
 #include "SkBlendModePriv.h"
+#include "SkBlitter.h"
 #include "SkColor.h"
 #include "SkColorFilter.h"
 #include "SkColorSpaceXformer.h"
@@ -17,8 +18,8 @@
 #include "SkRasterPipeline.h"
 #include "SkShader.h"
 #include "SkShaderBase.h"
+#include "SkTo.h"
 #include "SkUtils.h"
-#include "../jumper/SkJumper.h"
 
 class SkRasterPipelineBlitter final : public SkBlitter {
 public:
diff --git a/src/core/SkRecorder.cpp b/src/core/SkRecorder.cpp
index 7d8a849..65dcd7b 100644
--- a/src/core/SkRecorder.cpp
+++ b/src/core/SkRecorder.cpp
@@ -5,13 +5,16 @@
  * found in the LICENSE file.
  */
 
+#include "SkRecorder.h"
+
 #include "SkBigPicture.h"
 #include "SkCanvasPriv.h"
 #include "SkImage.h"
 #include "SkPatchUtils.h"
 #include "SkPicture.h"
-#include "SkRecorder.h"
 #include "SkSurface.h"
+#include "SkTo.h"
+
 #include <new>
 
 SkDrawableList::~SkDrawableList() {
diff --git a/src/core/SkRegion.cpp b/src/core/SkRegion.cpp
index 1330067..3d48f36 100644
--- a/src/core/SkRegion.cpp
+++ b/src/core/SkRegion.cpp
@@ -5,12 +5,14 @@
  * found in the LICENSE file.
  */
 
+#include "SkRegion.h"
 
 #include "SkAtomics.h"
 #include "SkMacros.h"
 #include "SkRegionPriv.h"
 #include "SkSafeMath.h"
 #include "SkTemplates.h"
+#include "SkTo.h"
 #include "SkUtils.h"
 
 /* Region Layout
diff --git a/src/core/SkRegionPriv.h b/src/core/SkRegionPriv.h
index 08db564..e0e46b2 100644
--- a/src/core/SkRegionPriv.h
+++ b/src/core/SkRegionPriv.h
@@ -5,7 +5,6 @@
  * found in the LICENSE file.
  */
 
-
 #ifndef SkRegionPriv_DEFINED
 #define SkRegionPriv_DEFINED
 
@@ -13,6 +12,7 @@
 
 #include "SkAtomics.h"
 #include "SkMalloc.h"
+#include "SkTo.h"
 
 inline bool SkRegionValueIsSentinel(int32_t value) {
     return value == (int32_t)SkRegion::kRunTypeSentinel;
diff --git a/src/core/SkRegion_path.cpp b/src/core/SkRegion_path.cpp
index 4fb6826..e54e251 100644
--- a/src/core/SkRegion_path.cpp
+++ b/src/core/SkRegion_path.cpp
@@ -5,13 +5,14 @@
  * found in the LICENSE file.
  */
 
-#include "SkRegionPriv.h"
 #include "SkBlitter.h"
+#include "SkPath.h"
+#include "SkRegionPriv.h"
 #include "SkSafeMath.h"
 #include "SkScan.h"
-#include "SkTSort.h"
 #include "SkTDArray.h"
-#include "SkPath.h"
+#include "SkTSort.h"
+#include "SkTo.h"
 
 // The rgnbuilder caller *seems* to pass short counts, possible often seens early failure, so
 // we may not want to promote this to a "std" routine just yet.
diff --git a/src/core/SkResourceCache.cpp b/src/core/SkResourceCache.cpp
index ee9d2d8..e016d23 100644
--- a/src/core/SkResourceCache.cpp
+++ b/src/core/SkResourceCache.cpp
@@ -5,12 +5,14 @@
  * found in the LICENSE file.
  */
 
+#include "SkResourceCache.h"
+
 #include "SkDiscardableMemory.h"
 #include "SkMessageBus.h"
 #include "SkMipMap.h"
 #include "SkMutex.h"
 #include "SkOpts.h"
-#include "SkResourceCache.h"
+#include "SkTo.h"
 #include "SkTraceMemoryDump.h"
 
 #include <stddef.h>
diff --git a/src/core/SkSafeMath.h b/src/core/SkSafeMath.h
index f54be32..c092272 100644
--- a/src/core/SkSafeMath.h
+++ b/src/core/SkSafeMath.h
@@ -8,6 +8,7 @@
 #ifndef SkSafeMath_DEFINED
 #define SkSafeMath_DEFINED
 
+#include "SkTFitsIn.h"
 #include "SkTypes.h"
 #include <limits>
 
diff --git a/src/core/SkScalerContext.cpp b/src/core/SkScalerContext.cpp
index b4a3565..3089ee9 100644
--- a/src/core/SkScalerContext.cpp
+++ b/src/core/SkScalerContext.cpp
@@ -29,6 +29,7 @@
 #include "SkStrokeRec.h"
 #include "SkSurfacePriv.h"
 #include "SkTextFormatParams.h"
+#include "SkTo.h"
 #include "SkWriteBuffer.h"
 #include <new>
 
diff --git a/src/core/SkScan_AAAPath.cpp b/src/core/SkScan_AAAPath.cpp
index 5e7f232..bd649e7 100644
--- a/src/core/SkScan_AAAPath.cpp
+++ b/src/core/SkScan_AAAPath.cpp
@@ -20,6 +20,7 @@
 #include "SkScanPriv.h"
 #include "SkTSort.h"
 #include "SkTemplates.h"
+#include "SkTo.h"
 #include "SkUtils.h"
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/src/core/SkScan_AntiPath.cpp b/src/core/SkScan_AntiPath.cpp
index 45bc2e2..9c64f32 100644
--- a/src/core/SkScan_AntiPath.cpp
+++ b/src/core/SkScan_AntiPath.cpp
@@ -5,15 +5,16 @@
  * found in the LICENSE file.
  */
 
-
 #include "SkScanPriv.h"
+
+#include "SkAntiRun.h"
+#include "SkBlitter.h"
+#include "SkCoverageDelta.h"
+#include "SkMatrix.h"
 #include "SkPath.h"
 #include "SkPathPriv.h"
-#include "SkMatrix.h"
-#include "SkBlitter.h"
 #include "SkRegion.h"
-#include "SkAntiRun.h"
-#include "SkCoverageDelta.h"
+#include "SkTo.h"
 
 #define SHIFT   SK_SUPERSAMPLE_SHIFT
 #define SCALE   (1 << SHIFT)
diff --git a/src/core/SkScan_Antihair.cpp b/src/core/SkScan_Antihair.cpp
index a552253..37faed4 100644
--- a/src/core/SkScan_Antihair.cpp
+++ b/src/core/SkScan_Antihair.cpp
@@ -5,13 +5,14 @@
  * found in the LICENSE file.
  */
 
-
 #include "SkScan.h"
+
 #include "SkBlitter.h"
 #include "SkColorData.h"
+#include "SkFDot6.h"
 #include "SkLineClipper.h"
 #include "SkRasterClip.h"
-#include "SkFDot6.h"
+#include "SkTo.h"
 
 /*  Our attempt to compute the worst case "bounds" for the horizontal and
     vertical cases has some numerical bug in it, and we sometimes undervalue
diff --git a/src/core/SkStream.cpp b/src/core/SkStream.cpp
index 57fd7f5..f8f4350 100644
--- a/src/core/SkStream.cpp
+++ b/src/core/SkStream.cpp
@@ -6,15 +6,17 @@
  */
 
 #include "SkStream.h"
-#include "SkStreamPriv.h"
+
 #include "SkData.h"
 #include "SkFixed.h"
 #include "SkMakeUnique.h"
-#include "SkSafeMath.h"
-#include "SkString.h"
 #include "SkOSFile.h"
-#include "SkTypes.h"
+#include "SkSafeMath.h"
+#include "SkStreamPriv.h"
+#include "SkString.h"
 #include "SkTFitsIn.h"
+#include "SkTo.h"
+#include "SkTypes.h"
 
 #include <limits>
 
diff --git a/src/core/SkString.cpp b/src/core/SkString.cpp
index a9c1d82..23c85f9 100644
--- a/src/core/SkString.cpp
+++ b/src/core/SkString.cpp
@@ -5,10 +5,13 @@
  * found in the LICENSE file.
  */
 
+#include "SkString.h"
+
 #include "SkAtomics.h"
 #include "SkSafeMath.h"
-#include "SkString.h"
+#include "SkTo.h"
 #include "SkUtils.h"
+
 #include <cstdio>
 #include <new>
 #include <stdarg.h>
diff --git a/src/core/SkStroke.cpp b/src/core/SkStroke.cpp
index 3452c77..bb216d1 100644
--- a/src/core/SkStroke.cpp
+++ b/src/core/SkStroke.cpp
@@ -6,10 +6,12 @@
  */
 
 #include "SkStrokerPriv.h"
+
 #include "SkGeometry.h"
 #include "SkMacros.h"
 #include "SkPathPriv.h"
 #include "SkPointPriv.h"
+#include "SkTo.h"
 
 enum {
     kTangent_RecursiveLimit,
diff --git a/src/core/SkStroke.h b/src/core/SkStroke.h
index b286572..189b5cf 100644
--- a/src/core/SkStroke.h
+++ b/src/core/SkStroke.h
@@ -8,10 +8,11 @@
 #ifndef SkStroke_DEFINED
 #define SkStroke_DEFINED
 
+#include "SkPaint.h"
 #include "SkPath.h"
 #include "SkPoint.h"
-#include "SkPaint.h"
 #include "SkStrokerPriv.h"
+#include "SkTo.h"
 
 #ifdef SK_DEBUG
 extern bool gDebugStrokerErrorSet;
diff --git a/src/core/SkTSort.h b/src/core/SkTSort.h
index e76f5c9..a97baf9 100644
--- a/src/core/SkTSort.h
+++ b/src/core/SkTSort.h
@@ -5,12 +5,12 @@
  * found in the LICENSE file.
  */
 
-
 #ifndef SkTSort_DEFINED
 #define SkTSort_DEFINED
 
-#include "SkTypes.h"
 #include "SkMathPriv.h"
+#include "SkTo.h"
+#include "SkTypes.h"
 
 /* A comparison functor which performs the comparison 'a < b'. */
 template <typename T> struct SkTCompareLT {
diff --git a/src/core/SkTime.cpp b/src/core/SkTime.cpp
index 7988925..b70b89c 100644
--- a/src/core/SkTime.cpp
+++ b/src/core/SkTime.cpp
@@ -5,10 +5,13 @@
  * found in the LICENSE file.
  */
 
+#include "SkTime.h"
+
 #include "SkLeanWindows.h"
 #include "SkString.h"
-#include "SkTime.h"
+#include "SkTo.h"
 #include "SkTypes.h"
+
 #include <chrono>
 
 void SkTime::DateTime::toISO8601(SkString* dst) const {
diff --git a/src/core/SkUtils.cpp b/src/core/SkUtils.cpp
index 0b92510..e6fafa0 100644
--- a/src/core/SkUtils.cpp
+++ b/src/core/SkUtils.cpp
@@ -5,9 +5,10 @@
  * found in the LICENSE file.
  */
 
-
 #include "SkUtils.h"
 
+#include "SkTo.h"
+
 /*  0xxxxxxx    1 total
     10xxxxxx    // never a leading byte
     110xxxxx    2 total
@@ -413,4 +414,4 @@
 const char SkHexadecimalDigits::gUpper[16] =
     { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
 const char SkHexadecimalDigits::gLower[16] =
-    { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
\ No newline at end of file
+    { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
diff --git a/src/core/SkVertices.cpp b/src/core/SkVertices.cpp
index c0f3eb2..e8bf1b7 100644
--- a/src/core/SkVertices.cpp
+++ b/src/core/SkVertices.cpp
@@ -5,12 +5,14 @@
  * found in the LICENSE file.
  */
 
-#include "SkAtomics.h"
 #include "SkVertices.h"
+
+#include "SkAtomics.h"
 #include "SkData.h"
 #include "SkReader32.h"
 #include "SkSafeMath.h"
 #include "SkSafeRange.h"
+#include "SkTo.h"
 #include "SkWriter32.h"
 #include <new>
 
diff --git a/src/core/SkWriteBuffer.cpp b/src/core/SkWriteBuffer.cpp
index b793dbf..a40e9ab 100644
--- a/src/core/SkWriteBuffer.cpp
+++ b/src/core/SkWriteBuffer.cpp
@@ -6,6 +6,7 @@
  */
 
 #include "SkWriteBuffer.h"
+
 #include "SkBitmap.h"
 #include "SkData.h"
 #include "SkDeduper.h"
@@ -14,6 +15,7 @@
 #include "SkPixelRef.h"
 #include "SkPtrRecorder.h"
 #include "SkStream.h"
+#include "SkTo.h"
 #include "SkTypeface.h"
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/core/SkWriter32.cpp b/src/core/SkWriter32.cpp
index 3261aad..b1638e4 100644
--- a/src/core/SkWriter32.cpp
+++ b/src/core/SkWriter32.cpp
@@ -8,6 +8,8 @@
 #include "SkMatrixPriv.h"
 #include "SkReader32.h"
 #include "SkString.h"
+#include "SkTo.h"
+
 #include "SkWriter32.h"
 
 void SkWriter32::writeMatrix(const SkMatrix& matrix) {
diff --git a/src/core/SkWriter32.h b/src/core/SkWriter32.h
index 2143c6b..de33c5c 100644
--- a/src/core/SkWriter32.h
+++ b/src/core/SkWriter32.h
@@ -1,4 +1,3 @@
-
 /*
  * Copyright 2008 The Android Open Source Project
  *
@@ -6,11 +5,9 @@
  * found in the LICENSE file.
  */
 
-
 #ifndef SkWriter32_DEFINED
 #define SkWriter32_DEFINED
 
-#include "../private/SkTemplates.h"
 #include "SkData.h"
 #include "SkMatrix.h"
 #include "SkPath.h"
@@ -21,6 +18,8 @@
 #include "SkRegion.h"
 #include "SkScalar.h"
 #include "SkStream.h"
+#include "SkTemplates.h"
+#include "SkTo.h"
 #include "SkTypes.h"
 
 class SK_API SkWriter32 : SkNoncopyable {