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>
diff --git a/src/gpu/GrProcessor.cpp b/src/gpu/GrProcessor.cpp
index bff3348..52aae68 100644
--- a/src/gpu/GrProcessor.cpp
+++ b/src/gpu/GrProcessor.cpp
@@ -33,17 +33,15 @@
  * 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 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 @@
     }
 }
 
-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 71b112d..563fd7c 100644
--- a/src/gpu/GrProcessorUnitTest.cpp
+++ b/src/gpu/GrProcessorUnitTest.cpp
@@ -14,7 +14,7 @@
 #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 5a5f5d3..10ba928 100644
--- a/src/gpu/GrProcessorUnitTest.h
+++ b/src/gpu/GrProcessorUnitTest.h
@@ -23,6 +23,7 @@
 struct GrProcessorTestData;
 class GrTexture;
 class GrXPFactory;
+class GrGeometryProcessor;
 
 namespace GrProcessorUnitTest {
 
@@ -75,9 +76,11 @@
 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 @@
     }
 
     /** 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 @@
 
     /** 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 @@
 
     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 @@
 /** 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 @@
  *  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)