Move more virtuals into ...Base to hide them from public api

Bug: skia:12111

Change-Id: I35601e0504e8e1186314e19bf53f01274bfc0ae0
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/419357
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Mike Reed <reed@google.com>
diff --git a/include/core/SkColorFilter.h b/include/core/SkColorFilter.h
index 0ef3f89..89e60f53 100644
--- a/include/core/SkColorFilter.h
+++ b/include/core/SkColorFilter.h
@@ -55,10 +55,6 @@
      */
     sk_sp<SkColorFilter> makeComposed(sk_sp<SkColorFilter> inner) const;
 
-    static SkFlattenable::Type GetFlattenableType() {
-        return kSkColorFilter_Type;
-    }
-
     static sk_sp<SkColorFilter> Deserialize(const void* data, size_t size,
                                             const SkDeserialProcs* procs = nullptr);
 
diff --git a/include/core/SkImageFilter.h b/include/core/SkImageFilter.h
index 17eb826..e224091 100644
--- a/include/core/SkImageFilter.h
+++ b/include/core/SkImageFilter.h
@@ -93,14 +93,6 @@
      */
     sk_sp<SkImageFilter> makeWithLocalMatrix(const SkMatrix& matrix) const;
 
-    static SkFlattenable::Type GetFlattenableType() {
-        return kSkImageFilter_Type;
-    }
-
-    SkFlattenable::Type getFlattenableType() const override {
-        return kSkImageFilter_Type;
-    }
-
     static sk_sp<SkImageFilter> Deserialize(const void* data, size_t size,
                                           const SkDeserialProcs* procs = nullptr) {
         return sk_sp<SkImageFilter>(static_cast<SkImageFilter*>(
diff --git a/include/core/SkMaskFilter.h b/include/core/SkMaskFilter.h
index abf65c0..3fde51b 100644
--- a/include/core/SkMaskFilter.h
+++ b/include/core/SkMaskFilter.h
@@ -32,14 +32,6 @@
     static sk_sp<SkMaskFilter> MakeBlur(SkBlurStyle style, SkScalar sigma,
                                         bool respectCTM = true);
 
-    static SkFlattenable::Type GetFlattenableType() {
-        return kSkMaskFilter_Type;
-    }
-
-    SkFlattenable::Type getFlattenableType() const override {
-        return kSkMaskFilter_Type;
-    }
-
     /**
      *  Returns the approximate bounds that would result from filtering the src rect.
      *  The actual result may be different, but it should be contained within the
diff --git a/src/core/SkImageFilter_Base.h b/src/core/SkImageFilter_Base.h
index 1c91d2c..cba26a8 100644
--- a/src/core/SkImageFilter_Base.h
+++ b/src/core/SkImageFilter_Base.h
@@ -121,6 +121,14 @@
 
     uint32_t uniqueID() const { return fUniqueID; }
 
+    static SkFlattenable::Type GetFlattenableType() {
+        return kSkImageFilter_Type;
+    }
+
+    SkFlattenable::Type getFlattenableType() const override {
+        return kSkImageFilter_Type;
+    }
+
 protected:
     // DEPRECATED: Will be removed once cropping is handled by a standalone image filter
     class CropRect {
diff --git a/src/core/SkMaskFilterBase.h b/src/core/SkMaskFilterBase.h
index 4b895b8..69ad38e 100644
--- a/src/core/SkMaskFilterBase.h
+++ b/src/core/SkMaskFilterBase.h
@@ -159,6 +159,14 @@
      */
     virtual bool asABlur(BlurRec*) const;
 
+    static SkFlattenable::Type GetFlattenableType() {
+        return kSkMaskFilter_Type;
+    }
+
+    SkFlattenable::Type getFlattenableType() const override {
+        return kSkMaskFilter_Type;
+    }
+
 protected:
     SkMaskFilterBase() {}
 
diff --git a/src/core/SkReadBuffer.h b/src/core/SkReadBuffer.h
index df0ec16..e436d63 100644
--- a/src/core/SkReadBuffer.h
+++ b/src/core/SkReadBuffer.h
@@ -18,6 +18,7 @@
 #include "include/core/SkSerialProcs.h"
 #include "src/core/SkBlenderBase.h"
 #include "src/core/SkColorFilterBase.h"
+#include "src/core/SkImageFilter_Base.h"
 #include "src/core/SkMaskFilterBase.h"
 #include "src/core/SkPaintPriv.h"
 #include "src/core/SkPicturePriv.h"
@@ -118,7 +119,7 @@
 #ifdef SK_SUPPORT_LEGACY_DRAWLOOPER
     sk_sp<SkDrawLooper> readDrawLooper() { return this->readFlattenable<SkDrawLooper>(); }
 #endif
-    sk_sp<SkImageFilter> readImageFilter() { return this->readFlattenable<SkImageFilter>(); }
+    sk_sp<SkImageFilter> readImageFilter() { return this->readFlattenable<SkImageFilter_Base>(); }
     sk_sp<SkBlender> readBlender() { return this->readFlattenable<SkBlenderBase>(); }
     sk_sp<SkMaskFilter> readMaskFilter() { return this->readFlattenable<SkMaskFilterBase>(); }
     sk_sp<SkPathEffect> readPathEffect() { return this->readFlattenable<SkPathEffect>(); }
diff --git a/tests/SerializationTest.cpp b/tests/SerializationTest.cpp
index 9980a33..97616b3 100644
--- a/tests/SerializationTest.cpp
+++ b/tests/SerializationTest.cpp
@@ -281,8 +281,8 @@
                               std::move(validBitmapSource), nullptr));
 
     sk_sp<SkImageFilter> deserializedFilter(
-        TestFlattenableSerialization<SkImageFilter>(
-            xfermodeImageFilter.get(), shouldSucceed, reporter));
+        TestFlattenableSerialization<SkImageFilter_Base>(
+            (SkImageFilter_Base*)xfermodeImageFilter.get(), shouldSucceed, reporter));
 
     // Try to render a small bitmap using the invalid deserialized filter
     // to make sure we don't crash while trying to render it