diff options
author | Brian Salomon <bsalomon@google.com> | 2017-07-24 10:16:19 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-07-24 15:43:09 +0000 |
commit | 1c053644a844db6b6ef454db10b058072e5c4249 (patch) | |
tree | 3c1734a6b4a35b8d575057127793b6ad00e2c0b0 /src | |
parent | 8e5be413c10bc5fa816f56a8b69f9962c4565eac (diff) |
Make GrProcessorTestFactory be templated on smart ptr class rather than processor class.
This is part of setting the stage for moving GrFragmentProcessor to unique_ptr ownership.
Change-Id: I2dfb4977319605d56c4debe05ff0b3dc970bb4c5
Reviewed-on: https://skia-review.googlesource.com/26141
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/gpu/GrProcessor.cpp | 22 | ||||
-rw-r--r-- | src/gpu/GrProcessorUnitTest.cpp | 2 | ||||
-rw-r--r-- | src/gpu/GrProcessorUnitTest.h | 34 |
3 files changed, 31 insertions, 27 deletions
diff --git a/src/gpu/GrProcessor.cpp b/src/gpu/GrProcessor.cpp index bff33489fa..52aae6854c 100644 --- a/src/gpu/GrProcessor.cpp +++ b/src/gpu/GrProcessor.cpp @@ -33,17 +33,15 @@ class GrGeometryProcessor; * Originally these were both in the processor unit test header, but then it seemed to cause linker * problems on android. */ -template<> -SkTArray<GrProcessorTestFactory<GrFragmentProcessor>*, true>* -GrProcessorTestFactory<GrFragmentProcessor>::GetFactories() { - static SkTArray<GrProcessorTestFactory<GrFragmentProcessor>*, true> gFactories; +template <> +SkTArray<GrFragmentProcessorTestFactory*, true>* GrFragmentProcessorTestFactory::GetFactories() { + static SkTArray<GrFragmentProcessorTestFactory*, true> gFactories; return &gFactories; } -template<> -SkTArray<GrProcessorTestFactory<GrGeometryProcessor>*, true>* -GrProcessorTestFactory<GrGeometryProcessor>::GetFactories() { - static SkTArray<GrProcessorTestFactory<GrGeometryProcessor>*, true> gFactories; +template <> +SkTArray<GrGeometryProcessorTestFactory*, true>* GrGeometryProcessorTestFactory::GetFactories() { + static SkTArray<GrGeometryProcessorTestFactory*, true> gFactories; return &gFactories; } @@ -61,8 +59,8 @@ static const int kFPFactoryCount = 42; static const int kGPFactoryCount = 14; static const int kXPFactoryCount = 4; -template<> -void GrProcessorTestFactory<GrFragmentProcessor>::VerifyFactoryCount() { +template <> +void GrFragmentProcessorTestFactory::VerifyFactoryCount() { if (kFPFactoryCount != GetFactories()->count()) { SkDebugf("\nExpected %d fragment processor factories, found %d.\n", kFPFactoryCount, GetFactories()->count()); @@ -70,8 +68,8 @@ void GrProcessorTestFactory<GrFragmentProcessor>::VerifyFactoryCount() { } } -template<> -void GrProcessorTestFactory<GrGeometryProcessor>::VerifyFactoryCount() { +template <> +void GrGeometryProcessorTestFactory::VerifyFactoryCount() { if (kGPFactoryCount != GetFactories()->count()) { SkDebugf("\nExpected %d geometry processor factories, found %d.\n", kGPFactoryCount, GetFactories()->count()); diff --git a/src/gpu/GrProcessorUnitTest.cpp b/src/gpu/GrProcessorUnitTest.cpp index 71b112d20f..563fd7c843 100644 --- a/src/gpu/GrProcessorUnitTest.cpp +++ b/src/gpu/GrProcessorUnitTest.cpp @@ -14,7 +14,7 @@ sk_sp<GrFragmentProcessor> GrProcessorUnitTest::MakeChildFP(GrProcessorTestData* #if SK_ALLOW_STATIC_GLOBAL_INITIALIZERS sk_sp<GrFragmentProcessor> fp; do { - fp = GrProcessorTestFactory<GrFragmentProcessor>::Make(data); + fp = GrFragmentProcessorTestFactory::Make(data); SkASSERT(fp); } while (fp->numChildProcessors() != 0); return fp; diff --git a/src/gpu/GrProcessorUnitTest.h b/src/gpu/GrProcessorUnitTest.h index 5a5f5d3c0f..10ba9289ca 100644 --- a/src/gpu/GrProcessorUnitTest.h +++ b/src/gpu/GrProcessorUnitTest.h @@ -23,6 +23,7 @@ class GrRenderTargetContext; struct GrProcessorTestData; class GrTexture; class GrXPFactory; +class GrGeometryProcessor; namespace GrProcessorUnitTest { @@ -75,9 +76,11 @@ private: class GrProcessor; class GrTexture; -template <class Processor> class GrProcessorTestFactory : private SkNoncopyable { +template <class ProcessorSmartPtr> +class GrProcessorTestFactory : private SkNoncopyable { public: - typedef sk_sp<Processor> (*MakeProc)(GrProcessorTestData*); + using Processor = typename ProcessorSmartPtr::element_type; + using MakeProc = ProcessorSmartPtr (*)(GrProcessorTestData*); GrProcessorTestFactory(MakeProc makeProc) { fMakeProc = makeProc; @@ -85,7 +88,7 @@ public: } /** Pick a random factory function and create a processor. */ - static sk_sp<Processor> Make(GrProcessorTestData* data) { + static ProcessorSmartPtr Make(GrProcessorTestData* data) { VerifyFactoryCount(); SkASSERT(GetFactories()->count()); uint32_t idx = data->fRandom->nextRangeU(0, GetFactories()->count() - 1); @@ -97,8 +100,8 @@ public: /** Use factory function at Index idx to create a processor. */ static sk_sp<Processor> MakeIdx(int idx, GrProcessorTestData* data) { - GrProcessorTestFactory<Processor>* factory = (*GetFactories())[idx]; - sk_sp<Processor> processor = factory->fMakeProc(data); + GrProcessorTestFactory<ProcessorSmartPtr>* factory = (*GetFactories())[idx]; + ProcessorSmartPtr processor = factory->fMakeProc(data); SkASSERT(processor); return processor; } @@ -111,9 +114,12 @@ private: MakeProc fMakeProc; - static SkTArray<GrProcessorTestFactory<Processor>*, true>* GetFactories(); + static SkTArray<GrProcessorTestFactory<ProcessorSmartPtr>*, true>* GetFactories(); }; +using GrFragmentProcessorTestFactory = GrProcessorTestFactory<sk_sp<GrFragmentProcessor>>; +using GrGeometryProcessorTestFactory = GrProcessorTestFactory<sk_sp<GrGeometryProcessor>>; + class GrXPFactoryTestFactory : private SkNoncopyable { public: using GetFn = const GrXPFactory*(GrProcessorTestData*); @@ -139,12 +145,12 @@ private: /** GrProcessor subclasses should insert this macro in their declaration to be included in the * program generation unit test. */ -#define GR_DECLARE_GEOMETRY_PROCESSOR_TEST \ - static GrProcessorTestFactory<GrGeometryProcessor> gTestFactory SK_UNUSED; \ +#define GR_DECLARE_GEOMETRY_PROCESSOR_TEST \ + static GrGeometryProcessorTestFactory gTestFactory SK_UNUSED; \ static sk_sp<GrGeometryProcessor> TestCreate(GrProcessorTestData*); -#define GR_DECLARE_FRAGMENT_PROCESSOR_TEST \ - static GrProcessorTestFactory<GrFragmentProcessor> gTestFactory SK_UNUSED; \ +#define GR_DECLARE_FRAGMENT_PROCESSOR_TEST \ + static GrFragmentProcessorTestFactory gTestFactory SK_UNUSED; \ static sk_sp<GrFragmentProcessor> TestCreate(GrProcessorTestData*); #define GR_DECLARE_XP_FACTORY_TEST \ @@ -155,11 +161,11 @@ private: * also implement this static function: * GrProcessor* TestCreate(GrProcessorTestData*); */ -#define GR_DEFINE_FRAGMENT_PROCESSOR_TEST(Effect) \ - GrProcessorTestFactory<GrFragmentProcessor> Effect::gTestFactory(Effect::TestCreate) +#define GR_DEFINE_FRAGMENT_PROCESSOR_TEST(Effect) \ + GrFragmentProcessorTestFactory Effect::gTestFactory(Effect::TestCreate) -#define GR_DEFINE_GEOMETRY_PROCESSOR_TEST(Effect) \ - GrProcessorTestFactory<GrGeometryProcessor> Effect::gTestFactory(Effect::TestCreate) +#define GR_DEFINE_GEOMETRY_PROCESSOR_TEST(Effect) \ + GrGeometryProcessorTestFactory Effect::gTestFactory(Effect::TestCreate) #define GR_DEFINE_XP_FACTORY_TEST(Factory) \ GrXPFactoryTestFactory Factory::gTestFactory(Factory::TestGet) |