Split up SkXfermode::asNewEffectOrCoeff() into asNewEffect(), asCoeff().

R=bsalomon@google.com

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

git-svn-id: http://skia.googlecode.com/svn/trunk@11926 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/include/core/SkXfermode.h b/include/core/SkXfermode.h
index db9b0b0..5bf8a22 100644
--- a/include/core/SkXfermode.h
+++ b/include/core/SkXfermode.h
@@ -192,25 +192,20 @@
     }
 
     /** A subclass may implement this factory function to work with the GPU backend. It is legal
-        to call this with all but the context param NULL to simply test the return value. effect,
-        src, and dst must all be NULL or all non-NULL. If effect is non-NULL then the xfermode may
-        optionally allocate an effect to return and the caller as *effect. The caller will install
-        it and own a ref to it. Since the xfermode may or may not assign *effect, the caller should
-        set *effect to NULL beforehand. If the function returns true and *effect is NULL then the
-        src and dst coeffs will be applied to the draw. When *effect is non-NULL the coeffs are
-        ignored. background specifies the texture to use as the background for compositing, and
-        should be accessed in the effect's fragment shader. If NULL, the effect should request
-        access to destination color (setWillReadDstColor()), and use that in the fragment shader
-        (builder->dstColor()).
+        to call this with all params NULL to simply test the return value. If effect is non-NULL
+        then the xfermode may optionally allocate an effect to return and the caller as *effect.
+        The caller will install it and own a ref to it. Since the xfermode may or may not assign
+        *effect, the caller should set *effect to NULL beforehand. background specifies the
+        texture to use as the background for compositing, and should be accessed in the effect's
+        fragment shader. If NULL, the effect should request access to destination color
+        (setWillReadDstColor()), and use that in the fragment shader (builder->dstColor()).
      */
-    virtual bool asNewEffectOrCoeff(GrEffectRef** effect,
-                                    Coeff* src,
-                                    Coeff* dst,
-                                    GrTexture* background = NULL) const;
+    virtual bool asNewEffect(GrEffectRef** effect, GrTexture* background = NULL) const;
 
-    /**
-     *  The same as calling xfermode->asNewEffect(...), except that this also checks if the xfermode
-     *  is NULL, and if so, treats it as kSrcOver_Mode.
+    /** Returns true if the xfermode can be expressed as coeffs (src, dst), or as an effect
+        (effect). This helper calls the asCoeff() and asNewEffect() virtuals. If the xfermode is
+        NULL, it is treated as kSrcOver_Mode. It is legal to call this with all params NULL to
+        simply test the return value.  effect, src, and dst must all be NULL or all non-NULL.
      */
     static bool AsNewEffectOrCoeff(SkXfermode*,
                                    GrEffectRef** effect,
diff --git a/src/core/SkXfermode.cpp b/src/core/SkXfermode.cpp
index 75c6529..d2947ee 100644
--- a/src/core/SkXfermode.cpp
+++ b/src/core/SkXfermode.cpp
@@ -673,8 +673,8 @@
     return false;
 }
 
-bool SkXfermode::asNewEffectOrCoeff(GrEffectRef**, Coeff* src, Coeff* dst, GrTexture*) const {
-    return this->asCoeff(src, dst);
+bool SkXfermode::asNewEffect(GrEffectRef** effect, GrTexture* background) const {
+    return false;
 }
 
 bool SkXfermode::AsNewEffectOrCoeff(SkXfermode* xfermode,
@@ -684,8 +684,10 @@
                                     GrTexture* background) {
     if (NULL == xfermode) {
         return ModeAsCoeff(kSrcOver_Mode, src, dst);
+    } else if (xfermode->asCoeff(src, dst)) {
+        return true;
     } else {
-        return xfermode->asNewEffectOrCoeff(effect, src, dst, background);
+        return xfermode->asNewEffect(effect, background);
     }
 }
 
@@ -1363,13 +1365,8 @@
 }
 
 #if SK_SUPPORT_GPU
-bool SkProcCoeffXfermode::asNewEffectOrCoeff(GrEffectRef** effect,
-                                             Coeff* src,
-                                             Coeff* dst,
-                                             GrTexture* background) const {
-    if (this->asCoeff(src, dst)) {
-        return true;
-    }
+bool SkProcCoeffXfermode::asNewEffect(GrEffectRef** effect,
+                                      GrTexture* background) const {
     if (XferEffect::IsSupportedMode(fMode)) {
         if (NULL != effect) {
             *effect = XferEffect::Create(fMode, background);
diff --git a/src/core/SkXfermode_proccoeff.h b/src/core/SkXfermode_proccoeff.h
index bba8b39..df2b974 100644
--- a/src/core/SkXfermode_proccoeff.h
+++ b/src/core/SkXfermode_proccoeff.h
@@ -29,10 +29,8 @@
     virtual bool asCoeff(Coeff* sc, Coeff* dc) const SK_OVERRIDE;
 
 #if SK_SUPPORT_GPU
-    virtual bool asNewEffectOrCoeff(GrEffectRef** effect,
-                                    Coeff* src,
-                                    Coeff* dst,
-                                    GrTexture* background) const SK_OVERRIDE;
+    virtual bool asNewEffect(GrEffectRef** effect,
+                             GrTexture* background) const SK_OVERRIDE;
 #endif
 
     SK_DEVELOPER_TO_STRING()
diff --git a/src/effects/SkArithmeticMode.cpp b/src/effects/SkArithmeticMode.cpp
index 7c4428c..3c445ab 100644
--- a/src/effects/SkArithmeticMode.cpp
+++ b/src/effects/SkArithmeticMode.cpp
@@ -36,7 +36,7 @@
     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkArithmeticMode_scalar)
 
 #if SK_SUPPORT_GPU
-    virtual bool asNewEffectOrCoeff(GrEffectRef** effect, Coeff*, Coeff*, GrTexture* background) const SK_OVERRIDE;
+    virtual bool asNewEffect(GrEffectRef** effect, GrTexture* background) const SK_OVERRIDE;
 #endif
 
 private:
@@ -408,10 +408,7 @@
 
 GR_DEFINE_EFFECT_TEST(GrArithmeticEffect);
 
-bool SkArithmeticMode_scalar::asNewEffectOrCoeff(GrEffectRef** effect,
-                                                 Coeff*,
-                                                 Coeff*,
-                                                 GrTexture* background) const {
+bool SkArithmeticMode_scalar::asNewEffect(GrEffectRef** effect, GrTexture* background) const {
     if (effect) {
         *effect = GrArithmeticEffect::Create(SkScalarToFloat(fK[0]),
                                              SkScalarToFloat(fK[1]),