Perlin issue fixed

BUG=skia:1799
R=sugoi@chromium.org, sugoi@google.com, senorblanco@chromium.org

Author: bsalomon@google.com

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

git-svn-id: http://skia.googlecode.com/svn/trunk@12150 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/expectations/gm/ignored-tests.txt b/expectations/gm/ignored-tests.txt
index 5db45ea..2b60fb2 100644
--- a/expectations/gm/ignored-tests.txt
+++ b/expectations/gm/ignored-tests.txt
@@ -71,3 +71,6 @@
 imagefiltersbase
 imageblur
 colorfilterimagefilter
+
+# Added by sugoi in https://codereview.chromium.org/59173005
+perlinnoise
diff --git a/gm/perlinnoise.cpp b/gm/perlinnoise.cpp
index a2ec916..098c690 100644
--- a/gm/perlinnoise.cpp
+++ b/gm/perlinnoise.cpp
@@ -23,7 +23,7 @@
     }
 
     virtual SkISize onISize() {
-        return make_isize(200, 400);
+        return make_isize(200, 500);
     }
 
     void drawClippedRect(SkCanvas* canvas, int x, int y, const SkPaint& paint) {
@@ -52,27 +52,31 @@
 
     virtual void onDraw(SkCanvas* canvas) {
         canvas->clear(0x00000000);
+        test(canvas,   0,   0, SkPerlinNoiseShader::kFractalNoise_Type,
+             0.1f, 0.1f, 0, 0, false);
+        test(canvas, 100,   0, SkPerlinNoiseShader::kTurbulence_Type,
+             0.1f, 0.1f, 0, 0, false);
 
-        test(canvas,   0, 0, SkPerlinNoiseShader::kFractalNoise_Type,
+        test(canvas,   0, 100, SkPerlinNoiseShader::kFractalNoise_Type,
              0.1f, 0.1f, 2, 0, false);
-        test(canvas, 100, 0, SkPerlinNoiseShader::kFractalNoise_Type,
+        test(canvas, 100, 100, SkPerlinNoiseShader::kFractalNoise_Type,
              0.2f, 0.4f, 5, 0, true);
 
-        test(canvas,   0, 100, SkPerlinNoiseShader::kTurbulence_Type,
+        test(canvas,   0, 200, SkPerlinNoiseShader::kTurbulence_Type,
              0.1f, 0.1f, 2, 0, true);
-        test(canvas, 100, 100, SkPerlinNoiseShader::kTurbulence_Type,
+        test(canvas, 100, 200, SkPerlinNoiseShader::kTurbulence_Type,
              0.2f, 0.4f, 5, 0, false);
 
-        test(canvas,   0, 200, SkPerlinNoiseShader::kFractalNoise_Type,
+        test(canvas,   0, 300, SkPerlinNoiseShader::kFractalNoise_Type,
              0.1f, 0.1f, 3, 1, false);
-        test(canvas, 100, 200, SkPerlinNoiseShader::kFractalNoise_Type,
+        test(canvas, 100, 300, SkPerlinNoiseShader::kFractalNoise_Type,
              0.1f, 0.1f, 3, 4, false);
 
         canvas->scale(SkFloatToScalar(0.75f), SkFloatToScalar(1.0f));
 
-        test(canvas,   0, 300, SkPerlinNoiseShader::kFractalNoise_Type,
+        test(canvas,   0, 400, SkPerlinNoiseShader::kFractalNoise_Type,
              0.1f, 0.1f, 2, 0, false);
-        test(canvas, 100, 300, SkPerlinNoiseShader::kFractalNoise_Type,
+        test(canvas, 100, 400, SkPerlinNoiseShader::kFractalNoise_Type,
              0.2f, 0.4f, 5, 0, true);
     }
 
diff --git a/src/effects/SkPerlinNoiseShader.cpp b/src/effects/SkPerlinNoiseShader.cpp
index af51afc..f2ce679 100644
--- a/src/effects/SkPerlinNoiseShader.cpp
+++ b/src/effects/SkPerlinNoiseShader.cpp
@@ -7,6 +7,7 @@
 
 #include "SkDither.h"
 #include "SkPerlinNoiseShader.h"
+#include "SkColorFilter.h"
 #include "SkFlattenableBuffers.h"
 #include "SkShader.h"
 #include "SkUnPreMultiply.h"
@@ -1295,6 +1296,16 @@
 GrEffectRef* SkPerlinNoiseShader::asNewEffect(GrContext* context, const SkPaint& paint) const {
     SkASSERT(NULL != context);
 
+    if (0 == fNumOctaves) {
+        SkColor clearColor = 0;
+        if (kFractalNoise_Type == fType) {
+            clearColor = SkColorSetARGB(paint.getAlpha() / 2, 127, 127, 127);
+        }
+        SkAutoTUnref<SkColorFilter> cf(SkColorFilter::CreateModeFilter(
+                                                clearColor, SkXfermode::kSrc_Mode));
+        return cf->asNewEffect(context);
+    }
+
     // Either we don't stitch tiles, either we have a valid tile size
     SkASSERT(!fStitchTiles || !fTileSize.isEmpty());