make SkPM4f private

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1713653002

Review URL: https://codereview.chromium.org/1713653002
diff --git a/bench/SkLinearBitmapPipelineBench.cpp b/bench/SkLinearBitmapPipelineBench.cpp
index cc5d085..89d4c79 100644
--- a/bench/SkLinearBitmapPipelineBench.cpp
+++ b/bench/SkLinearBitmapPipelineBench.cpp
@@ -8,6 +8,7 @@
 #include <memory>
 #include "SkColor.h"
 #include "SkLinearBitmapPipeline.h"
+#include "SkPM4f.h"
 #include "Benchmark.h"
 #include "SkShader.h"
 #include "SkImage.h"
diff --git a/bench/Xfer4fBench.cpp b/bench/Xfer4fBench.cpp
index 6b6bbc8..f2bcedc 100644
--- a/bench/Xfer4fBench.cpp
+++ b/bench/Xfer4fBench.cpp
@@ -1,4 +1,3 @@
-
 /*
  * Copyright 2016 Google Inc.
  *
@@ -7,6 +6,7 @@
  */
 
 #include "Benchmark.h"
+#include "SkPM4f.h"
 #include "SkString.h"
 #include "SkXfermode.h"
 
diff --git a/bench/XferU64Bench.cpp b/bench/XferU64Bench.cpp
index 0cc2ba1..75aada6 100644
--- a/bench/XferU64Bench.cpp
+++ b/bench/XferU64Bench.cpp
@@ -6,6 +6,7 @@
  */
 
 #include "Benchmark.h"
+#include "SkPM4f.h"
 #include "SkString.h"
 #include "SkXfermode.h"
 
diff --git a/gm/xfer4f.cpp b/gm/xfer4f.cpp
index 14927f2..dc7196d 100644
--- a/gm/xfer4f.cpp
+++ b/gm/xfer4f.cpp
@@ -9,6 +9,7 @@
 #include "SkCanvas.h"
 #include "SkImageInfo.h"
 #include "SkXfermode.h"
+#include "SkPM4f.h"
 
 static void draw_rect(SkCanvas* canvas, const SkRect& r, SkColor c, SkColorProfileType profile,
                       const SkAlpha aa[]) {
diff --git a/gm/xfermodes.cpp b/gm/xfermodes.cpp
index fa44617..9e87c04 100644
--- a/gm/xfermodes.cpp
+++ b/gm/xfermodes.cpp
@@ -1,14 +1,15 @@
-
 /*
  * Copyright 2011 Google Inc.
  *
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "gm.h"
 #include "SkBitmap.h"
 #include "SkShader.h"
 #include "SkXfermode.h"
+#include "SkPM4f.h"
 
 enum SrcType {
     //! A WxH image with a rectangle in the lower right.
diff --git a/gm/xferu64.cpp b/gm/xferu64.cpp
index 03fc886..fef1a44 100644
--- a/gm/xferu64.cpp
+++ b/gm/xferu64.cpp
@@ -11,6 +11,7 @@
 #include "SkXfermode.h"
 #include "SkHalf.h"
 #include "SkImage.h"
+#include "SkPM4f.h"
 
 static SkPMColor f16_to_pmcolor(uint64_t src) {
     SkPMColor dst;
diff --git a/include/core/SkColor.h b/include/core/SkColor.h
index 101a9bd..a40e5f1 100644
--- a/include/core/SkColor.h
+++ b/include/core/SkColor.h
@@ -160,39 +160,7 @@
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-struct SkColor4f;
-
-/*
- *  The float values are 0...1 premultiplied
- */
-struct SkPM4f {
-    enum {
-        A = SK_A32_SHIFT/8,
-        R = SK_R32_SHIFT/8,
-        G = SK_G32_SHIFT/8,
-        B = SK_B32_SHIFT/8,
-    };
-    float fVec[4];
-
-    float a() const { return fVec[A]; }
-
-    SkColor4f unpremul() const;
-
-    static SkPM4f FromPMColor(SkPMColor);
-
-    // half-float routines
-    void toF16(uint16_t[4]) const;
-    uint64_t toF16() const; // 4 float16 values packed into uint64_t
-    static SkPM4f FromF16(const uint16_t[4]);
-
-#ifdef SK_DEBUG
-    void assertIsUnit() const;
-#else
-    void assertIsUnit() const {}
-#endif
-};
-
-typedef SkPM4f (*SkXfermodeProc4f)(const SkPM4f& src, const SkPM4f& dst);
+struct SkPM4f;
 
 /*
  *  The float values are 0...1 unpremultiplied
diff --git a/include/core/SkXfermode.h b/include/core/SkXfermode.h
index 3b0f49d..94f49fa 100644
--- a/include/core/SkXfermode.h
+++ b/include/core/SkXfermode.h
@@ -18,6 +18,9 @@
 class GrXPFactory;
 class SkString;
 
+struct SkPM4f;
+typedef SkPM4f (*SkXfermodeProc4f)(const SkPM4f& src, const SkPM4f& dst);
+
 /** \class SkXfermode
  *
  *  SkXfermode is the base class for objects that are called to implement custom
diff --git a/src/core/SkBlitter_PM4f.cpp b/src/core/SkBlitter_PM4f.cpp
index cec2361..3c13baa 100644
--- a/src/core/SkBlitter_PM4f.cpp
+++ b/src/core/SkBlitter_PM4f.cpp
@@ -12,6 +12,7 @@
 #include "SkXfermode.h"
 #include "SkBlitMask.h"
 #include "SkTemplates.h"
+#include "SkPM4f.h"
 
 template <typename State> class SkState_Blitter : public SkRasterBlitter {
     typedef SkRasterBlitter INHERITED;
diff --git a/src/core/SkColor.cpp b/src/core/SkColor.cpp
index c0a3895..d88950b 100644
--- a/src/core/SkColor.cpp
+++ b/src/core/SkColor.cpp
@@ -102,6 +102,7 @@
 }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
+#include "SkPM4f.h"
 #include "SkNx.h"
 #include "SkHalf.h"
 
diff --git a/src/core/SkColorFilter.cpp b/src/core/SkColorFilter.cpp
index 72f5470..7d11163 100644
--- a/src/core/SkColorFilter.cpp
+++ b/src/core/SkColorFilter.cpp
@@ -12,6 +12,7 @@
 #include "SkTDArray.h"
 #include "SkUnPreMultiply.h"
 #include "SkWriteBuffer.h"
+#include "SkPM4f.h"
 
 #if SK_SUPPORT_GPU
 #include "GrFragmentProcessor.h"
diff --git a/src/core/SkColorMatrixFilterRowMajor255.cpp b/src/core/SkColorMatrixFilterRowMajor255.cpp
index 3b79d7f..de87913 100644
--- a/src/core/SkColorMatrixFilterRowMajor255.cpp
+++ b/src/core/SkColorMatrixFilterRowMajor255.cpp
@@ -12,6 +12,7 @@
 #include "SkWriteBuffer.h"
 #include "SkUnPreMultiply.h"
 #include "SkString.h"
+#include "SkPM4f.h"
 
 #define SK_PMORDER_INDEX_A  (SK_A32_SHIFT / 8)
 #define SK_PMORDER_INDEX_R  (SK_R32_SHIFT / 8)
diff --git a/src/core/SkColorShader.h b/src/core/SkColorShader.h
index 1c07a3c..eb55a07 100644
--- a/src/core/SkColorShader.h
+++ b/src/core/SkColorShader.h
@@ -9,6 +9,7 @@
 #define SkColorShader_DEFINED
 
 #include "SkShader.h"
+#include "SkPM4f.h"
 
 /** \class SkColorShader
     A Shader that represents a single color. In general, this effect can be
diff --git a/src/core/SkColorSpace.cpp b/src/core/SkColorSpace.cpp
index bbb03c6..6651abb 100644
--- a/src/core/SkColorSpace.cpp
+++ b/src/core/SkColorSpace.cpp
@@ -174,6 +174,7 @@
 
 #include "SkColor.h"
 #include "SkNx.h"
+#include "SkPM4f.h"
 
 void SkApply3x3ToPM4f(const SkFloat3x3& m, const SkPM4f src[], SkPM4f dst[], int count) {
     SkASSERT(1 == SkPM4f::G);
diff --git a/src/core/SkLinearBitmapPipeline.cpp b/src/core/SkLinearBitmapPipeline.cpp
index d25335b..edb0e88 100644
--- a/src/core/SkLinearBitmapPipeline.cpp
+++ b/src/core/SkLinearBitmapPipeline.cpp
@@ -6,6 +6,7 @@
  */
 
 #include "SkLinearBitmapPipeline.h"
+#include "SkPM4f.h"
 
 struct X {
     explicit X(SkScalar val) : fVal{val} { }
diff --git a/src/core/SkModeColorFilter.cpp b/src/core/SkModeColorFilter.cpp
index 14e3fb7..574c1ce 100644
--- a/src/core/SkModeColorFilter.cpp
+++ b/src/core/SkModeColorFilter.cpp
@@ -14,6 +14,7 @@
 #include "SkUtils.h"
 #include "SkString.h"
 #include "SkValidationUtils.h"
+#include "SkPM4f.h"
 
 //////////////////////////////////////////////////////////////////////////////////////////////////
 
diff --git a/src/core/SkPM4f.h b/src/core/SkPM4f.h
new file mode 100644
index 0000000..fb22783
--- /dev/null
+++ b/src/core/SkPM4f.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SkPM4f_DEFINED
+#define SkPM4f_DEFINED
+
+#include "SkColorPriv.h"
+
+/*
+ *  The float values are 0...1 premultiplied
+ */
+struct SkPM4f {
+    enum {
+        A = SK_A32_SHIFT/8,
+        R = SK_R32_SHIFT/8,
+        G = SK_G32_SHIFT/8,
+        B = SK_B32_SHIFT/8,
+    };
+    float fVec[4];
+
+    float a() const { return fVec[A]; }
+
+    SkColor4f unpremul() const;
+
+    static SkPM4f FromPMColor(SkPMColor);
+
+    // half-float routines
+    void toF16(uint16_t[4]) const;
+    uint64_t toF16() const; // 4 float16 values packed into uint64_t
+    static SkPM4f FromF16(const uint16_t[4]);
+
+#ifdef SK_DEBUG
+    void assertIsUnit() const;
+#else
+    void assertIsUnit() const {}
+#endif
+};
+
+typedef SkPM4f (*SkXfermodeProc4f)(const SkPM4f& src, const SkPM4f& dst);
+
+
+#endif
diff --git a/src/core/SkPM4fPriv.h b/src/core/SkPM4fPriv.h
index 81aff70..24d0736 100644
--- a/src/core/SkPM4fPriv.h
+++ b/src/core/SkPM4fPriv.h
@@ -5,6 +5,7 @@
  * found in the LICENSE file.
  */
 
+#include "SkPM4f.h"
 #include "SkColorPriv.h"
 #include "SkNx.h"
 
diff --git a/src/core/SkPixmap.cpp b/src/core/SkPixmap.cpp
index f285668..57bb194 100644
--- a/src/core/SkPixmap.cpp
+++ b/src/core/SkPixmap.cpp
@@ -11,6 +11,7 @@
 #include "SkMask.h"
 #include "SkPixmap.h"
 #include "SkUtils.h"
+#include "SkPM4f.h"
 
 void SkAutoPixmapUnlock::reset(const SkPixmap& pm, void (*unlock)(void*), void* ctx) {
     SkASSERT(pm.addr() != nullptr);
diff --git a/src/core/SkXfermode.cpp b/src/core/SkXfermode.cpp
index 8b28f1b..07c4e16 100644
--- a/src/core/SkXfermode.cpp
+++ b/src/core/SkXfermode.cpp
@@ -14,6 +14,7 @@
 #include "SkReadBuffer.h"
 #include "SkString.h"
 #include "SkWriteBuffer.h"
+#include "SkPM4f.h"
 
 #define SkAlphaMulAlpha(a, b)   SkMulDiv255Round(a, b)
 
diff --git a/tests/Float16Test.cpp b/tests/Float16Test.cpp
index 3b13533..ef349c6 100644
--- a/tests/Float16Test.cpp
+++ b/tests/Float16Test.cpp
@@ -10,6 +10,7 @@
 #include "SkHalf.h"
 #include "SkOpts.h"
 #include "SkPixmap.h"
+#include "SkPM4f.h"
 #include "SkRandom.h"
 
 static bool eq_within_half_float(float a, float b) {
diff --git a/tests/SkColor4fTest.cpp b/tests/SkColor4fTest.cpp
index b9dcd0d..46c10f1 100644
--- a/tests/SkColor4fTest.cpp
+++ b/tests/SkColor4fTest.cpp
@@ -9,6 +9,7 @@
 #include "SkColorMatrixFilter.h"
 #include "SkGradientShader.h"
 #include "SkImage.h"
+#include "SkPM4f.h"
 #include "SkShader.h"
 
 #include "Test.h"
diff --git a/tests/SkLinearBitmapPipelineTest.cpp b/tests/SkLinearBitmapPipelineTest.cpp
index db1fc2a..851b201 100644
--- a/tests/SkLinearBitmapPipelineTest.cpp
+++ b/tests/SkLinearBitmapPipelineTest.cpp
@@ -4,10 +4,10 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "SkLinearBitmapPipeline.h"
-
 #include "SkColor.h"
-
+#include "SkPM4f.h"
 #include "Test.h"
 
 struct SinkBilerpProcessor final : public PointProcessorInterface {