Added TestCreate for SkComposeShader; will pick two random child procs that don...
authorwangyix <wangyix@google.com>
Tue, 8 Sep 2015 22:23:34 +0000 (15:23 -0700)
committerCommit bot <commit-bot@chromium.org>
Tue, 8 Sep 2015 22:23:35 +0000 (15:23 -0700)
BUG=skia:4182

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

src/core/SkComposeShader.cpp
src/gpu/GrProcessor.cpp

index 50fc6aa..d3e29be 100644 (file)
@@ -198,9 +198,9 @@ void SkComposeShader::ComposeShaderContext::shadeSpan(int x, int y, SkPMColor re
 
 #include "SkGr.h"
 #include "GrProcessor.h"
+#include "effects/GrConstColorProcessor.h"
 #include "gl/GrGLBlend.h"
 #include "gl/builders/GrGLProgramBuilder.h"
-#include "effects/GrConstColorProcessor.h"
 
 /////////////////////////////////////////////////////////////////////
 
@@ -235,6 +235,8 @@ private:
 
     SkXfermode::Mode fMode;
 
+    GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
+
     typedef GrFragmentProcessor INHERITED;
 };
 
@@ -250,6 +252,35 @@ private:
     typedef GrGLFragmentProcessor INHERITED;
 };
 
+/////////////////////////////////////////////////////////////////////
+
+GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrComposeEffect);
+
+const GrFragmentProcessor* GrComposeEffect::TestCreate(GrProcessorTestData* d) {
+#if SK_ALLOW_STATIC_GLOBAL_INITIALIZERS
+    // Create two random frag procs.
+    // For now, we'll prevent either children from being a shader with children to prevent the
+    // possibility of an arbitrarily large tree of procs.
+    SkAutoTUnref<const GrFragmentProcessor> fpA;
+    do {
+        fpA.reset(GrProcessorTestFactory<GrFragmentProcessor>::CreateStage(d));
+        SkASSERT(fpA);
+    } while (fpA->numChildProcessors() != 0);
+    SkAutoTUnref<const GrFragmentProcessor> fpB;
+    do {
+        fpB.reset(GrProcessorTestFactory<GrFragmentProcessor>::CreateStage(d));
+        SkASSERT(fpB);
+    } while (fpB->numChildProcessors() != 0);
+
+    SkXfermode::Mode mode = static_cast<SkXfermode::Mode>(
+            d->fRandom->nextRangeU(0, SkXfermode::kLastCoeffMode));
+    return SkNEW_ARGS(GrComposeEffect, (fpA, fpB, mode));
+#else
+    SkFAIL("Should not be called if !SK_ALLOW_STATIC_GLOBAL_INITIALIZERS");
+    return nullptr;
+#endif
+}
+
 bool GrComposeEffect::onIsEqual(const GrFragmentProcessor& other) const {
     const GrComposeEffect& cs = other.cast<GrComposeEffect>();
     return fMode == cs.fMode;
index 4f6d878..e324baa 100644 (file)
@@ -50,7 +50,7 @@ GrProcessorTestFactory<GrGeometryProcessor>::GetFactories() {
  * we verify the count is as expected.  If a new factory is added, then these numbers must be
  * manually adjusted.
  */
-static const int kFPFactoryCount = 37;
+static const int kFPFactoryCount = 38;
 static const int kGPFactoryCount = 14;
 static const int kXPFactoryCount = 5;