More threading of GrShaderDataManager

TBR=bsalomon@google.com
BUG=skia:

Review URL: https://codereview.chromium.org/1213613016
diff --git a/include/core/SkColorFilter.h b/include/core/SkColorFilter.h
index 5ba1a8f..c4109dc 100644
--- a/include/core/SkColorFilter.h
+++ b/include/core/SkColorFilter.h
@@ -16,6 +16,7 @@
 class SkBitmap;
 class GrProcessor;
 class GrContext;
+class GrShaderDataManager;
 
 /**
  *  ColorFilters are optional objects in the drawing pipeline. When present in
@@ -134,7 +135,8 @@
      *
      *  If the subclass returns false, then it should not modify the array at all.
      */
-    virtual bool asFragmentProcessors(GrContext*, SkTDArray<GrFragmentProcessor*>*) const {
+    virtual bool asFragmentProcessors(GrContext*, GrShaderDataManager*,
+                                      SkTDArray<GrFragmentProcessor*>*) const {
         return false;
     }
 
diff --git a/include/effects/SkColorCubeFilter.h b/include/effects/SkColorCubeFilter.h
index 4999bc5..1fc355e 100644
--- a/include/effects/SkColorCubeFilter.h
+++ b/include/effects/SkColorCubeFilter.h
@@ -25,7 +25,8 @@
     uint32_t getFlags() const override;
 
 #if SK_SUPPORT_GPU
-   bool asFragmentProcessors(GrContext*, SkTDArray<GrFragmentProcessor*>*) const override;
+   bool asFragmentProcessors(GrContext*, GrShaderDataManager*,
+                             SkTDArray<GrFragmentProcessor*>*) const override;
 #endif
 
     SK_TO_STRING_OVERRIDE()
diff --git a/include/effects/SkColorMatrixFilter.h b/include/effects/SkColorMatrixFilter.h
index 4709273..2dc6b49 100644
--- a/include/effects/SkColorMatrixFilter.h
+++ b/include/effects/SkColorMatrixFilter.h
@@ -26,7 +26,8 @@
     SkColorFilter* newComposed(const SkColorFilter*) const override;
 
 #if SK_SUPPORT_GPU
-    bool asFragmentProcessors(GrContext*, SkTDArray<GrFragmentProcessor*>*) const override;
+    bool asFragmentProcessors(GrContext*, GrShaderDataManager*,
+                              SkTDArray<GrFragmentProcessor*>*) const override;
 #endif
 
     struct State {
diff --git a/include/effects/SkLumaColorFilter.h b/include/effects/SkLumaColorFilter.h
index 4e8ac79..4cca2d4 100644
--- a/include/effects/SkLumaColorFilter.h
+++ b/include/effects/SkLumaColorFilter.h
@@ -28,7 +28,8 @@
     void filterSpan(const SkPMColor src[], int count, SkPMColor[]) const override;
 
 #if SK_SUPPORT_GPU
-    bool asFragmentProcessors(GrContext*, SkTDArray<GrFragmentProcessor*>*) const override;
+    bool asFragmentProcessors(GrContext*, GrShaderDataManager*,
+                              SkTDArray<GrFragmentProcessor*>*) const override;
 #endif
 
     SK_TO_STRING_OVERRIDE()
diff --git a/include/effects/SkModeColorFilter.h b/include/effects/SkModeColorFilter.h
index a2cb841..17f135a 100644
--- a/include/effects/SkModeColorFilter.h
+++ b/include/effects/SkModeColorFilter.h
@@ -39,7 +39,8 @@
 #endif
 
 #if SK_SUPPORT_GPU
-    bool asFragmentProcessors(GrContext*, SkTDArray<GrFragmentProcessor*>*) const override;
+    bool asFragmentProcessors(GrContext*, GrShaderDataManager*,
+                              SkTDArray<GrFragmentProcessor*>*) const override;
 #endif
     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkModeColorFilter)
 
diff --git a/src/core/SkColorFilter.cpp b/src/core/SkColorFilter.cpp
index 8007271..a707232 100644
--- a/src/core/SkColorFilter.cpp
+++ b/src/core/SkColorFilter.cpp
@@ -62,10 +62,10 @@
 #endif
 
 #if SK_SUPPORT_GPU
-    bool asFragmentProcessors(GrContext* context,
+    bool asFragmentProcessors(GrContext* context, GrShaderDataManager* shaderDataManager,
                               SkTDArray<GrFragmentProcessor*>* array) const override {
-        bool hasFrags = fInner->asFragmentProcessors(context, array);
-        hasFrags |= fOuter->asFragmentProcessors(context, array);
+        bool hasFrags = fInner->asFragmentProcessors(context, shaderDataManager, array);
+        hasFrags |= fOuter->asFragmentProcessors(context, shaderDataManager, array);
         return hasFrags;
     }
 #endif
diff --git a/src/effects/SkColorCubeFilter.cpp b/src/effects/SkColorCubeFilter.cpp
index 8347a9e..32bbd2e 100644
--- a/src/effects/SkColorCubeFilter.cpp
+++ b/src/effects/SkColorCubeFilter.cpp
@@ -337,7 +337,7 @@
                                             const GrGLSLCaps&, GrProcessorKeyBuilder* b) {
 }
 
-bool SkColorCubeFilter::asFragmentProcessors(GrContext* context,
+bool SkColorCubeFilter::asFragmentProcessors(GrContext* context, GrShaderDataManager*,
                                              SkTDArray<GrFragmentProcessor*>* array) const {
     static const GrUniqueKey::Domain kDomain = GrUniqueKey::GenerateDomain();
     GrUniqueKey key;
diff --git a/src/effects/SkColorFilters.cpp b/src/effects/SkColorFilters.cpp
index 1bb9f8f..ac3bee0 100644
--- a/src/effects/SkColorFilters.cpp
+++ b/src/effects/SkColorFilters.cpp
@@ -362,7 +362,7 @@
     return ModeColorFilterEffect::Create(color, mode);
 }
 
-bool SkModeColorFilter::asFragmentProcessors(GrContext*,
+bool SkModeColorFilter::asFragmentProcessors(GrContext*, GrShaderDataManager*,
                                              SkTDArray<GrFragmentProcessor*>* array) const {
     if (SkXfermode::kDst_Mode != fMode) {
         GrFragmentProcessor* frag = ModeColorFilterEffect::Create(SkColor2GrColor(fColor), fMode);
diff --git a/src/effects/SkColorMatrixFilter.cpp b/src/effects/SkColorMatrixFilter.cpp
index 78d4797..6401aaa 100644
--- a/src/effects/SkColorMatrixFilter.cpp
+++ b/src/effects/SkColorMatrixFilter.cpp
@@ -542,7 +542,7 @@
     return ColorMatrixEffect::Create(colorMatrix);
 }
 
-bool SkColorMatrixFilter::asFragmentProcessors(GrContext*,
+bool SkColorMatrixFilter::asFragmentProcessors(GrContext*, GrShaderDataManager*,
                                                SkTDArray<GrFragmentProcessor*>* array) const {
     GrFragmentProcessor* frag = ColorMatrixEffect::Create(fMatrix);
     if (frag) {
diff --git a/src/effects/SkLumaColorFilter.cpp b/src/effects/SkLumaColorFilter.cpp
index 13bb6cb..021c3c1 100644
--- a/src/effects/SkLumaColorFilter.cpp
+++ b/src/effects/SkLumaColorFilter.cpp
@@ -119,7 +119,7 @@
     }
 };
 
-bool SkLumaColorFilter::asFragmentProcessors(GrContext*,
+bool SkLumaColorFilter::asFragmentProcessors(GrContext*, GrShaderDataManager*,
                                              SkTDArray<GrFragmentProcessor*>* array) const {
 
     GrFragmentProcessor* frag = LumaColorFilterEffect::Create();
diff --git a/src/effects/SkTableColorFilter.cpp b/src/effects/SkTableColorFilter.cpp
index 839b014..e4bc778 100644
--- a/src/effects/SkTableColorFilter.cpp
+++ b/src/effects/SkTableColorFilter.cpp
@@ -50,7 +50,8 @@
     SkColorFilter* newComposed(const SkColorFilter* inner) const override;
 
 #if SK_SUPPORT_GPU
-    bool asFragmentProcessors(GrContext*, SkTDArray<GrFragmentProcessor*>*) const override;
+    bool asFragmentProcessors(GrContext*, GrShaderDataManager*,
+                              SkTDArray<GrFragmentProcessor*>*) const override;
 #endif
 
     void filterSpan(const SkPMColor src[], int count, SkPMColor dst[]) const override;
@@ -576,7 +577,8 @@
     ));
 
     SkTDArray<GrFragmentProcessor*> array;
-    if (filter->asFragmentProcessors(context, &array)) {
+    GrPaint grPaint;
+    if (filter->asFragmentProcessors(context, grPaint.getShaderDataManager(), &array)) {
         SkASSERT(1 == array.count());   // TableColorFilter only returns 1
         return array[0];
     }
@@ -584,6 +586,7 @@
 }
 
 bool SkTable_ColorFilter::asFragmentProcessors(GrContext* context,
+                                               GrShaderDataManager*,
                                                SkTDArray<GrFragmentProcessor*>* array) const {
     SkBitmap bitmap;
     this->asComponentTable(&bitmap);
diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp
index 4c71093..b7568c3 100644
--- a/src/gpu/SkGr.cpp
+++ b/src/gpu/SkGr.cpp
@@ -720,7 +720,8 @@
         } else {
             SkTDArray<GrFragmentProcessor*> array;
             // return false if failed?
-            if (colorFilter->asFragmentProcessors(context, &array)) {
+            if (colorFilter->asFragmentProcessors(context, grPaint->getShaderDataManager(),
+                                                  &array)) {
                 for (int i = 0; i < array.count(); ++i) {
                     grPaint->addColorProcessor(array[i]);
                     array[i]->unref();
diff --git a/tests/GpuColorFilterTest.cpp b/tests/GpuColorFilterTest.cpp
index 037734e..3d7f89e 100644
--- a/tests/GpuColorFilterTest.cpp
+++ b/tests/GpuColorFilterTest.cpp
@@ -6,15 +6,16 @@
  * found in the LICENSE file.
  */
 
+#include "SkColorFilter.h"
+#include "Test.h"
+
 #if SK_SUPPORT_GPU
 
 #include "GrContext.h"
 #include "GrContextFactory.h"
 #include "GrFragmentProcessor.h"
 #include "GrInvariantOutput.h"
-#include "SkColorFilter.h"
 #include "SkGr.h"
-#include "Test.h"
 
 static GrColor filterColor(const GrColor& color, uint32_t flags)  {
     uint32_t mask = 0;
@@ -96,11 +97,12 @@
         { kR|kA , gr_whiteTrans, SkColorSetARGB(128, 200, 200, 200), SkXfermode::kModulate_Mode, kR|kA, GrColorPackRGBA(50, 0, 0, 64) }
     };
 
+    GrPaint paint;
     for (size_t i = 0; i < SK_ARRAY_COUNT(filterTests); ++i) {
         const GetConstantComponentTestCase& test = filterTests[i];
         SkAutoTUnref<SkColorFilter> cf(SkColorFilter::CreateModeFilter(test.filterColor, test.filterMode));
         SkTDArray<GrFragmentProcessor*> array;
-        bool hasFrag = cf->asFragmentProcessors(grContext, &array);
+        bool hasFrag = cf->asFragmentProcessors(grContext, paint.getShaderDataManager(), &array);
         REPORTER_ASSERT(reporter, hasFrag);
         REPORTER_ASSERT(reporter, 1 == array.count());
         GrInvariantOutput inout(test.inputColor,