Delete SkFlattenable::Type
authormsarett <msarett@google.com>
Mon, 4 Apr 2016 20:53:02 +0000 (13:53 -0700)
committerCommit bot <commit-bot@chromium.org>
Mon, 4 Apr 2016 20:53:02 +0000 (13:53 -0700)
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1834303003

Review URL: https://codereview.chromium.org/1834303003

24 files changed:
gm/imagefiltersbase.cpp
gm/imagefiltersgraph.cpp
include/core/SkColorFilter.h
include/core/SkDrawLooper.h
include/core/SkFlattenable.h
include/core/SkFlattenableSerialization.h
include/core/SkImageFilter.h
include/core/SkMaskFilter.h
include/core/SkPathEffect.h
include/core/SkRasterizer.h
include/core/SkShader.h
include/core/SkXfermode.h
samplecode/SampleFilterFuzz.cpp
src/core/SkFlattenable.cpp
src/core/SkFlattenableSerialization.cpp
src/core/SkReadBuffer.cpp
src/core/SkReadBuffer.h
src/core/SkScalerContext.cpp
src/core/SkValidatingReadBuffer.cpp
src/core/SkValidatingReadBuffer.h
src/utils/SkBitmapSourceDeserializer.h
tests/ImageFilterTest.cpp
tests/SerializationTest.cpp
tools/chrome_fuzz.cpp

index e2e9235..3cb43a8 100644 (file)
@@ -23,8 +23,7 @@ public:
     public:
         Registrar() {
             SkFlattenable::Register("FailImageFilter",
-                                    FailImageFilter::CreateProc,
-                                    FailImageFilter::GetFlattenableType());
+                                    FailImageFilter::CreateProc);
         }
     };
     static sk_sp<SkImageFilter> Make() {
@@ -66,8 +65,7 @@ public:
     public:
         Registrar() {
             SkFlattenable::Register("IdentityImageFilter",
-                                    IdentityImageFilter::CreateProc,
-                                    IdentityImageFilter::GetFlattenableType());
+                                    IdentityImageFilter::CreateProc);
         }
     };
     static sk_sp<SkImageFilter> Make(sk_sp<SkImageFilter> input) {
index e7bcf70..f49d382 100644 (file)
@@ -32,8 +32,7 @@ public:
     public:
         Registrar() {
             SkFlattenable::Register("SimpleOffsetFilter",
-                                    SimpleOffsetFilter::CreateProc,
-                                    SimpleOffsetFilter::GetFlattenableType());
+                                    SimpleOffsetFilter::CreateProc);
         }
     };
     static sk_sp<SkImageFilter> Make(SkScalar dx, SkScalar dy, sk_sp<SkImageFilter> input) {
index 7ac335f..5cfbf27 100644 (file)
@@ -162,7 +162,6 @@ public:
     SK_TO_STRING_PUREVIRT()
 
     SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP()
-    SK_DEFINE_FLATTENABLE_TYPE(SkColorFilter)
 
 protected:
     SkColorFilter() {}
index 28d7d8b..e59e52f 100644 (file)
@@ -107,7 +107,6 @@ public:
     virtual bool asABlurShadow(BlurShadowRec*) const;
 
     SK_TO_STRING_PUREVIRT()
-    SK_DEFINE_FLATTENABLE_TYPE(SkDrawLooper)
 
 protected:
     SkDrawLooper() {}
index c76f119..4d45e24 100644 (file)
@@ -43,8 +43,7 @@ class SkPrivateEffectInitializer;
     }
 
 #define SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(flattenable) \
-    SkFlattenable::Register(#flattenable, flattenable::CreateProc, \
-                            flattenable::GetFlattenableType());
+    SkFlattenable::Register(#flattenable, flattenable::CreateProc);
 
 #define SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(flattenable)    \
     private:                                                                \
@@ -53,14 +52,6 @@ class SkPrivateEffectInitializer;
     public:                                                                 \
     Factory getFactory() const override { return CreateProc; }
 
-/** For SkFlattenable derived objects with a valid type
-    This macro should only be used in base class objects in core
-  */
-#define SK_DEFINE_FLATTENABLE_TYPE(flattenable) \
-    static Type GetFlattenableType() { \
-        return k##flattenable##_Type; \
-    }
-
 /** \class SkFlattenable
 
  SkFlattenable is the base class for objects that need to be flattened
@@ -69,19 +60,6 @@ class SkPrivateEffectInitializer;
  */
 class SK_API SkFlattenable : public SkRefCnt {
 public:
-    enum Type {
-        kSkColorFilter_Type,
-        kSkDrawLooper_Type,
-        kSkImageFilter_Type,
-        kSkMaskFilter_Type,
-        kSkPathEffect_Type,
-        kSkPixelRef_Type,
-        kSkRasterizer_Type,
-        kSkShader_Type,
-        kSkUnused_Type,     // used to be SkUnitMapper
-        kSkXfermode_Type,
-    };
-
     typedef sk_sp<SkFlattenable> (*Factory)(SkReadBuffer&);
 
     SkFlattenable() {}
@@ -98,9 +76,8 @@ public:
 
     static Factory NameToFactory(const char name[]);
     static const char* FactoryToName(Factory);
-    static bool NameToType(const char name[], Type* type);
 
-    static void Register(const char name[], Factory, Type);
+    static void Register(const char name[], Factory);
 
     /**
      *  Override this if your subclass needs to record data that it will need to recreate itself
index ffb1b5a..6d0f681 100644 (file)
@@ -13,7 +13,6 @@
 class SkData;
 
 SK_API SkData* SkValidatingSerializeFlattenable(SkFlattenable*);
-SK_API SkFlattenable* SkValidatingDeserializeFlattenable(const void* data, size_t size,
-                                                         SkFlattenable::Type type);
+SK_API SkFlattenable* SkValidatingDeserializeFlattenable(const void* data, size_t size);
 
 #endif
index 4493d28..cb2e7ea 100644 (file)
@@ -292,7 +292,6 @@ public:
 #endif
 
     SK_TO_STRING_PUREVIRT()
-    SK_DEFINE_FLATTENABLE_TYPE(SkImageFilter)
 
 protected:
     class Common {
index 8d3d1ca..405f44f 100644 (file)
@@ -171,7 +171,6 @@ public:
     virtual bool asABlur(BlurRec*) const;
 
     SK_TO_STRING_PUREVIRT()
-    SK_DEFINE_FLATTENABLE_TYPE(SkMaskFilter)
 
 protected:
     SkMaskFilter() {}
index fd59573..6175fb0 100644 (file)
@@ -129,7 +129,6 @@ public:
     virtual DashType asADash(DashInfo* info) const;
 
     SK_TO_STRING_PUREVIRT()
-    SK_DEFINE_FLATTENABLE_TYPE(SkPathEffect)
 
 #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
     /// Override for subclasses as appropriate.
index 1881cce..b065c44 100644 (file)
@@ -26,8 +26,6 @@ public:
                    const SkIRect* clipBounds, SkMaskFilter* filter,
                    SkMask* mask, SkMask::CreateMode mode) const;
 
-    SK_DEFINE_FLATTENABLE_TYPE(SkRasterizer)
-
 protected:
     SkRasterizer() {}
     virtual bool onRasterize(const SkPath& path, const SkMatrix& matrix,
index 0de53ad..1d89f61 100644 (file)
@@ -456,7 +456,6 @@ public:
     virtual SkShader* refAsALocalMatrixShader(SkMatrix* localMatrix) const;
 
     SK_TO_STRING_VIRT()
-    SK_DEFINE_FLATTENABLE_TYPE(SkShader)
 
 protected:
     void flatten(SkWriteBuffer&) const override;
index db8d570..7870f27 100644 (file)
@@ -234,7 +234,6 @@ public:
 
     SK_TO_STRING_PUREVIRT()
     SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP()
-    SK_DEFINE_FLATTENABLE_TYPE(SkXfermode)
 
     enum D32Flags {
         kSrcIsOpaque_D32Flag  = 1 << 0,
index 1b7d30b..57e7de5 100644 (file)
@@ -799,8 +799,7 @@ static SkImageFilter* make_serialized_image_filter() {
         }
     }
 #endif // SK_ADD_RANDOM_BIT_FLIPS
-    SkFlattenable* flattenable = SkValidatingDeserializeFlattenable(ptr, len,
-                                    SkImageFilter::GetFlattenableType());
+    SkFlattenable* flattenable = SkValidatingDeserializeFlattenable(ptr, len);
     return static_cast<SkImageFilter*>(flattenable);
 }
 
index c759a1a..506a7b1 100644 (file)
@@ -53,20 +53,18 @@ void SkRefCntSet::decPtr(void* ptr) {
 struct Entry {
     const char*             fName;
     SkFlattenable::Factory  fFactory;
-    SkFlattenable::Type     fType;
 };
 
 static int gCount = 0;
 static Entry gEntries[MAX_ENTRY_COUNT];
 
-void SkFlattenable::Register(const char name[], Factory factory, SkFlattenable::Type type) {
+void SkFlattenable::Register(const char name[], Factory factory) {
     SkASSERT(name);
     SkASSERT(factory);
     SkASSERT(gCount < MAX_ENTRY_COUNT);
 
     gEntries[gCount].fName = name;
     gEntries[gCount].fFactory = factory;
-    gEntries[gCount].fType = type;
     gCount += 1;
 }
 
@@ -94,22 +92,6 @@ SkFlattenable::Factory SkFlattenable::NameToFactory(const char name[]) {
     return nullptr;
 }
 
-bool SkFlattenable::NameToType(const char name[], SkFlattenable::Type* type) {
-    SkASSERT(type);
-    InitializeFlattenablesIfNeeded();
-#ifdef SK_DEBUG
-    report_no_entries(__FUNCTION__);
-#endif
-    const Entry* entries = gEntries;
-    for (int i = gCount - 1; i >= 0; --i) {
-        if (strcmp(entries[i].fName, name) == 0) {
-            *type = entries[i].fType;
-            return true;
-        }
-    }
-    return false;
-}
-
 const char* SkFlattenable::FactoryToName(Factory fact) {
     InitializeFlattenablesIfNeeded();
 #ifdef SK_DEBUG
index e9ce09f..748e20a 100644 (file)
@@ -20,8 +20,7 @@ SkData* SkValidatingSerializeFlattenable(SkFlattenable* flattenable) {
     return data.release();
 }
 
-SkFlattenable* SkValidatingDeserializeFlattenable(const void* data, size_t size,
-                                                  SkFlattenable::Type type) {
+SkFlattenable* SkValidatingDeserializeFlattenable(const void* data, size_t size) {
     SkValidatingReadBuffer buffer(data, size);
-    return buffer.readFlattenable(type);
+    return buffer.readFlattenable();
 }
index f220b5a..d57b223 100644 (file)
@@ -329,11 +329,7 @@ SkTypeface* SkReadBuffer::readTypeface() {
     }
 }
 
-SkFlattenable* SkReadBuffer::readFlattenable(SkFlattenable::Type ft) {
-    //
-    // TODO: confirm that ft matches the factory we decide to use
-    //
-
+SkFlattenable* SkReadBuffer::readFlattenable() {
     SkFlattenable::Factory factory = nullptr;
 
     if (fFactoryCount > 0) {
index 7b12194..cd570e1 100644 (file)
@@ -126,9 +126,9 @@ public:
     virtual void readPath(SkPath* path);
     void readPaint(SkPaint* paint) { paint->unflatten(*this); }
 
-    virtual SkFlattenable* readFlattenable(SkFlattenable::Type);
+    virtual SkFlattenable* readFlattenable();
     template <typename T> sk_sp<T> readFlattenable() {
-        return sk_sp<T>((T*)this->readFlattenable(T::GetFlattenableType()));
+        return sk_sp<T>((T*)this->readFlattenable());
     }
     sk_sp<SkColorFilter> readColorFilter() { return this->readFlattenable<SkColorFilter>(); }
     sk_sp<SkDrawLooper> readDrawLooper() { return this->readFlattenable<SkDrawLooper>(); }
index cf4098b..3db9e30 100644 (file)
@@ -62,15 +62,14 @@ void SkGlyph::zeroMetrics() {
     #define DUMP_RECx
 #endif
 
-static SkFlattenable* load_flattenable(const SkDescriptor* desc, uint32_t tag,
-                                       SkFlattenable::Type ft) {
+static SkFlattenable* load_flattenable(const SkDescriptor* desc, uint32_t tag) {
     SkFlattenable*  obj = nullptr;
     uint32_t        len;
     const void*     data = desc->findEntry(tag, &len);
 
     if (data) {
         SkReadBuffer buffer(data, len);
-        obj = buffer.readFlattenable(ft);
+        obj = buffer.readFlattenable();
         SkASSERT(buffer.offset() == buffer.size());
     }
     return obj;
@@ -80,12 +79,9 @@ SkScalerContext::SkScalerContext(SkTypeface* typeface, const SkDescriptor* desc)
     : fRec(*static_cast<const Rec*>(desc->findEntry(kRec_SkDescriptorTag, nullptr)))
 
     , fTypeface(SkRef(typeface))
-    , fPathEffect(static_cast<SkPathEffect*>(load_flattenable(desc, kPathEffect_SkDescriptorTag,
-                                             SkFlattenable::kSkPathEffect_Type)))
-    , fMaskFilter(static_cast<SkMaskFilter*>(load_flattenable(desc, kMaskFilter_SkDescriptorTag,
-                                             SkFlattenable::kSkMaskFilter_Type)))
-    , fRasterizer(static_cast<SkRasterizer*>(load_flattenable(desc, kRasterizer_SkDescriptorTag,
-                                             SkFlattenable::kSkRasterizer_Type)))
+    , fPathEffect(static_cast<SkPathEffect*>(load_flattenable(desc, kPathEffect_SkDescriptorTag)))
+    , fMaskFilter(static_cast<SkMaskFilter*>(load_flattenable(desc, kMaskFilter_SkDescriptorTag)))
+    , fRasterizer(static_cast<SkRasterizer*>(load_flattenable(desc, kRasterizer_SkDescriptorTag)))
       // Initialize based on our settings. Subclasses can also force this.
     , fGenerateImageFromPath(fRec.fFrameWidth > 0 || fPathEffect != nullptr || fRasterizer != nullptr)
 
index ad4b6c4..0ce8bf9 100644 (file)
@@ -222,20 +222,14 @@ bool SkValidatingReadBuffer::validateAvailable(size_t size) {
     return this->validate((size <= SK_MaxU32) && fReader.isAvailable(static_cast<uint32_t>(size)));
 }
 
-SkFlattenable* SkValidatingReadBuffer::readFlattenable(SkFlattenable::Type type) {
+SkFlattenable* SkValidatingReadBuffer::readFlattenable() {
     SkString name;
     this->readString(&name);
     if (fError) {
         return nullptr;
     }
 
-    // Is this the type we wanted ?
     const char* cname = name.c_str();
-    SkFlattenable::Type baseType;
-    if (!SkFlattenable::NameToType(cname, &baseType) || (baseType != type)) {
-        return nullptr;
-    }
-
     SkFlattenable::Factory factory = SkFlattenable::NameToFactory(cname);
     if (nullptr == factory) {
         return nullptr; // writer failed to give us the flattenable
index bcdcba5..4b8cdf8 100644 (file)
@@ -39,7 +39,7 @@ public:
     void* readEncodedString(size_t* length, SkPaint::TextEncoding encoding) override;
 
     // common data structures
-    SkFlattenable* readFlattenable(SkFlattenable::Type type) override;
+    SkFlattenable* readFlattenable() override;
     void skipFlattenable() override;
     void readPoint(SkPoint* point) override;
     void readMatrix(SkMatrix* matrix) override;
index e017599..60f185e 100644 (file)
@@ -14,7 +14,6 @@
 // Should be removed when SKP versions which may contain SkBitmapSource records are phased out.
 class SkBitmapSourceDeserializer : public SkFlattenable {
 public:
-    SK_DEFINE_FLATTENABLE_TYPE(SkImageFilter)
     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBitmapSource)
 };
 
index e6430b4..c6f0433 100644 (file)
@@ -1089,7 +1089,7 @@ DEF_TEST(ImageFilterCrossProcessPictureImageFilter, reporter) {
     // cross-process. Do this by "laundering" it through SkValidatingReadBuffer.
     SkAutoTUnref<SkData> data(SkValidatingSerializeFlattenable(imageFilter.get()));
     SkAutoTUnref<SkFlattenable> flattenable(SkValidatingDeserializeFlattenable(
-        data->data(), data->size(), SkImageFilter::GetFlattenableType()));
+        data->data(), data->size()));
     SkImageFilter* unflattenedFilter = static_cast<SkImageFilter*>(flattenable.get());
 
     redPaintWithFilter.setImageFilter(unflattenedFilter);
@@ -1536,7 +1536,7 @@ DEF_TEST(ImageFilterImageSourceSerialization, reporter) {
 
     sk_sp<SkData> data(SkValidatingSerializeFlattenable(filter.get()));
     sk_sp<SkFlattenable> flattenable(SkValidatingDeserializeFlattenable(
-        data->data(), data->size(), SkImageFilter::GetFlattenableType()));
+        data->data(), data->size()));
     SkImageFilter* unflattenedFilter = static_cast<SkImageFilter*>(flattenable.get());
     REPORTER_ASSERT(reporter, unflattenedFilter);
 
index 15b7382..b590fb5 100644 (file)
@@ -42,7 +42,7 @@ template<typename T> struct SerializationUtils {
         writer.writeFlattenable(flattenable);
     }
     static void Read(SkValidatingReadBuffer& reader, T** flattenable) {
-        *flattenable = (T*)reader.readFlattenable(T::GetFlattenableType());
+        *flattenable = (T*)reader.readFlattenable();
     }
 };
 
index c59c741..22cf088 100644 (file)
@@ -31,7 +31,7 @@ static void run_test_case(const SkString& testdata, const SkBitmap& bitmap,
   // This call shouldn't crash or cause ASAN to flag any memory issues
   // If nothing bad happens within this call, everything is fine
   SkFlattenable* flattenable = SkValidatingDeserializeFlattenable(
-        testdata.c_str(), testdata.size(), SkImageFilter::GetFlattenableType());
+        testdata.c_str(), testdata.size());
 
   // Adding some info, but the test passed if we got here without any trouble
   if (flattenable != nullptr) {