Added a high-color (50 colors) gradient for each gradient type.

To do so I added an enumerated type called ColorType that can toggle between kColors_2 and kColors_50 to swap between 2 and 50 color gradients.





Added hicolor bench for each gradient type.

BUG=
R=reed@google.com, bsalomon@google.com

Author: dierk@google.com

Review URL: https://chromiumcodereview.appspot.com/18655012

git-svn-id: http://skia.googlecode.com/svn/trunk@9960 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/bench/GradientBench.cpp b/bench/GradientBench.cpp
index 02df148..b20fc9a 100644
--- a/bench/GradientBench.cpp
+++ b/bench/GradientBench.cpp
@@ -19,14 +19,25 @@
     int             fCount;
     const SkColor*  fColors;
     const SkScalar* fPos;
+    const char*     fName;
 };
 
 static const SkColor gColors[] = {
     SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK,
+    SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK,
+    SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK,
+    SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK,
+    SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK,
+    SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK,
+    SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK,
+    SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK,
+    SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK,
+    SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, // 10 lines, 50 colors
 };
 
 static const GradData gGradData[] = {
-    { 2, gColors, NULL },
+    { 2, gColors, NULL, "" },
+    { 50, gColors, NULL, "_hicolor" }, // many color gradient
 };
 
 /// Ignores scale
@@ -156,9 +167,11 @@
     };
 public:
     GradientBench(void* param, GradType gradType,
+                  GradData data = gGradData[0],
                   SkShader::TileMode tm = SkShader::kClamp_TileMode,
                   GeomType geomType = kRect_GeomType,
-                  float scale = 1.0f)
+                  float scale = 1.0f
+        )
         : INHERITED(param) {
         fName.printf("gradient_%s_%s", gGrads[gradType].fName,
                      tilemodename(tm));
@@ -167,13 +180,15 @@
             fName.append(geomtypename(geomType));
         }
 
+        fName.append(data.fName);
+
         const SkPoint pts[2] = {
             { 0, 0 },
             { SkIntToScalar(W), SkIntToScalar(H) }
         };
 
         fCount = SkBENCHLOOP(N * gGrads[gradType].fRepeat);
-        fShader = gGrads[gradType].fMaker(pts, gGradData[0], tm, NULL, scale);
+        fShader = gGrads[gradType].fMaker(pts, data, tm, NULL, scale);
         fGeomType = geomType;
     }
 
@@ -256,21 +271,25 @@
 };
 
 DEF_BENCH( return new GradientBench(p, kLinear_GradType); )
-DEF_BENCH( return new GradientBench(p, kLinear_GradType, SkShader::kMirror_TileMode); )
+DEF_BENCH( return new GradientBench(p, kLinear_GradType, gGradData[1]); )
+DEF_BENCH( return new GradientBench(p, kLinear_GradType, gGradData[0], SkShader::kMirror_TileMode); )
 
 // Draw a radial gradient of radius 1/2 on a rectangle; half the lines should
 // be completely pinned, the other half should pe partially pinned
-DEF_BENCH( return new GradientBench(p, kRadial_GradType, SkShader::kClamp_TileMode, kRect_GeomType, 0.5f); )
+DEF_BENCH( return new GradientBench(p, kRadial_GradType, gGradData[0], SkShader::kClamp_TileMode, kRect_GeomType, 0.5f); )
 
 // Draw a radial gradient on a circle of equal size; all the lines should
 // hit the unpinned fast path (so long as GradientBench.W == H)
-DEF_BENCH( return new GradientBench(p, kRadial_GradType, SkShader::kClamp_TileMode, kOval_GeomType); )
+DEF_BENCH( return new GradientBench(p, kRadial_GradType, gGradData[0], SkShader::kClamp_TileMode, kOval_GeomType); )
 
-DEF_BENCH( return new GradientBench(p, kRadial_GradType, SkShader::kMirror_TileMode); )
+DEF_BENCH( return new GradientBench(p, kRadial_GradType, gGradData[0], SkShader::kMirror_TileMode); )
 DEF_BENCH( return new GradientBench(p, kSweep_GradType); )
+DEF_BENCH( return new GradientBench(p, kSweep_GradType, gGradData[1]); )
 DEF_BENCH( return new GradientBench(p, kRadial2_GradType); )
-DEF_BENCH( return new GradientBench(p, kRadial2_GradType, SkShader::kMirror_TileMode); )
+DEF_BENCH( return new GradientBench(p, kRadial2_GradType, gGradData[1]); )
+DEF_BENCH( return new GradientBench(p, kRadial2_GradType, gGradData[0], SkShader::kMirror_TileMode); )
 DEF_BENCH( return new GradientBench(p, kConical_GradType); )
+DEF_BENCH( return new GradientBench(p, kConical_GradType, gGradData[1]); )
 
 DEF_BENCH( return new Gradient2Bench(p, false); )
 DEF_BENCH( return new Gradient2Bench(p, true); )