| Index: gm/imagefiltersbase.cpp | 
| diff --git a/gm/imagefiltersbase.cpp b/gm/imagefiltersbase.cpp | 
| index 5472f2d98a2c2fcd1ef01dc8ac65ec724f6c82c3..d1bd5a72df80c1cafdae882ba79f44c9815c91b9 100644 | 
| --- a/gm/imagefiltersbase.cpp | 
| +++ b/gm/imagefiltersbase.cpp | 
| @@ -18,6 +18,18 @@ | 
|  | 
| class FailImageFilter : public SkImageFilter { | 
| public: | 
| +    class Registrar { | 
| +    public: | 
| +        Registrar() { | 
| +            SkFlattenable::Register("FailImageFilter", | 
| +#ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING | 
| +                                    FailImageFilter::DeepCreateProc, | 
| +#else | 
| +                                    FailImageFilter::CreateProc, | 
| +#endif | 
| +                                    FailImageFilter::GetFlattenableType()); | 
| +        } | 
| +    }; | 
| static FailImageFilter* Create() { | 
| return SkNEW(FailImageFilter); | 
| } | 
| @@ -25,14 +37,7 @@ public: | 
| SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(FailImageFilter) | 
|  | 
| protected: | 
| -    FailImageFilter() : INHERITED(0, NULL) { | 
| -        static bool gOnce; | 
| -        if (!gOnce) { | 
| -            gOnce = true; | 
| -            SkFlattenable::Register("FailImageFilter", this->getFactory(), | 
| -                                    this->GetFlattenableType()); | 
| -        } | 
| -    } | 
| +    FailImageFilter() : INHERITED(0, NULL) {} | 
|  | 
| virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&, | 
| SkBitmap* result, SkIPoint* offset) const SK_OVERRIDE { | 
| @@ -47,6 +52,8 @@ private: | 
| typedef SkImageFilter INHERITED; | 
| }; | 
|  | 
| +static FailImageFilter::Registrar gReg0; | 
| + | 
| SkFlattenable* FailImageFilter::CreateProc(SkReadBuffer& buffer) { | 
| SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 0); | 
| return FailImageFilter::Create(); | 
| @@ -54,20 +61,25 @@ SkFlattenable* FailImageFilter::CreateProc(SkReadBuffer& buffer) { | 
|  | 
| class IdentityImageFilter : public SkImageFilter { | 
| public: | 
| +    class Registrar { | 
| +    public: | 
| +        Registrar() { | 
| +            SkFlattenable::Register("IdentityImageFilter", | 
| +#ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING | 
| +                                    IdentityImageFilter::DeepCreateProc, | 
| +#else | 
| +                                    IdentityImageFilter::CreateProc, | 
| +#endif | 
| +                                    IdentityImageFilter::GetFlattenableType()); | 
| +        } | 
| +    }; | 
| static IdentityImageFilter* Create(SkImageFilter* input = NULL) { | 
| return SkNEW_ARGS(IdentityImageFilter, (input)); | 
| } | 
|  | 
| SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(IdentityImageFilter) | 
| protected: | 
| -    IdentityImageFilter(SkImageFilter* input) : INHERITED(1, &input) { | 
| -        static bool gOnce; | 
| -        if (!gOnce) { | 
| -            gOnce = true; | 
| -            SkFlattenable::Register("IdentityImageFilter", this->getFactory(), | 
| -                                    this->GetFlattenableType()); | 
| -        } | 
| -    } | 
| +    IdentityImageFilter(SkImageFilter* input) : INHERITED(1, &input) {} | 
|  | 
| virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&, | 
| SkBitmap* result, SkIPoint* offset) const SK_OVERRIDE { | 
| @@ -84,6 +96,8 @@ private: | 
| typedef SkImageFilter INHERITED; | 
| }; | 
|  | 
| +static IdentityImageFilter::Registrar gReg1; | 
| + | 
| SkFlattenable* IdentityImageFilter::CreateProc(SkReadBuffer& buffer) { | 
| SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1); | 
| return IdentityImageFilter::Create(common.getInput(0)); | 
|  |