Allow the alpha folding optimization if the single draw's paint has a shader

Let's land this and then leave for 2 weeks.

BUG=skia:3119

Review URL: https://codereview.chromium.org/817033002
diff --git a/src/core/SkRecordOpts.cpp b/src/core/SkRecordOpts.cpp
index 7c24a08..4a51bee 100644
--- a/src/core/SkRecordOpts.cpp
+++ b/src/core/SkRecordOpts.cpp
@@ -112,7 +112,7 @@
         const uint32_t layerColor = layerPaint->getColor();
         const uint32_t  drawColor =  drawPaint->getColor();
         if (!IsOnlyAlpha(layerColor)  || !IsOpaque(drawColor) ||
-            HasAnyEffect(*layerPaint) || HasAnyEffect(*drawPaint)) {
+            HasAnyEffect(*layerPaint) || CantFoldAlpha(*drawPaint)) {
             // Too fancy for us.  Actually, as long as layerColor is just an alpha
             // we can blend it into drawColor's alpha; drawColor doesn't strictly have to be opaque.
             return false;
@@ -139,6 +139,17 @@
                paint.getImageFilter();
     }
 
+    // The alpha folding can proceed if the single draw's paint has a shader,
+    // path effect, mask filter and/or rasterizer.
+    // TODO: most likely the looper and only some xfer modes are the hard
+    // constraints
+    static bool CantFoldAlpha(const SkPaint& paint) {
+        return paint.getXfermode()    ||
+               paint.getColorFilter() ||
+               paint.getLooper()      ||
+               paint.getImageFilter();
+    }
+
     static bool IsOpaque(SkColor color) {
         return SkColorGetA(color) == SK_AlphaOPAQUE;
     }