Chromium Code Reviews| Index: bench/GradientBench.cpp |
| diff --git a/bench/GradientBench.cpp b/bench/GradientBench.cpp |
| index 02df14825be6ff81977d41d05b45c9faeb8f143a..8f30dc674b16403cdfd7cc160b1bf67f300f666c 100644 |
| --- a/bench/GradientBench.cpp |
| +++ b/bench/GradientBench.cpp |
| @@ -23,10 +23,20 @@ struct GradData { |
| 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 }, |
| + { 50, gColors, NULL }, // many color gradient |
| }; |
| /// Ignores scale |
| @@ -117,6 +127,11 @@ enum GeomType { |
| kOval_GeomType |
| }; |
| +enum ColorType { |
| + kColors_2, |
| + kColors_50 |
| +}; |
| + |
| static const char* tilemodename(SkShader::TileMode tm) { |
| switch (tm) { |
| case SkShader::kClamp_TileMode: |
| @@ -156,9 +171,11 @@ class GradientBench : public SkBenchmark { |
| }; |
| public: |
| GradientBench(void* param, GradType gradType, |
| + ColorType colors = kColors_2, |
| 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 +184,17 @@ public: |
| fName.append(geomtypename(geomType)); |
| } |
| + if (colors == kColors_50) { |
| + fName.append("_hicolor"); |
| + } |
| + |
| 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, gGradData[colors], tm, NULL, scale); |
| fGeomType = geomType; |
| } |
| @@ -256,21 +277,25 @@ private: |
| }; |
| 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, kColors_50); ) |
| +DEF_BENCH( return new GradientBench(p, kLinear_GradType, kColors_2, 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, kColors_2, 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, kColors_2, SkShader::kClamp_TileMode, kOval_GeomType); ) |
| -DEF_BENCH( return new GradientBench(p, kRadial_GradType, SkShader::kMirror_TileMode); ) |
| +DEF_BENCH( return new GradientBench(p, kRadial_GradType, kColors_2, SkShader::kMirror_TileMode); ) |
| DEF_BENCH( return new GradientBench(p, kSweep_GradType); ) |
| +DEF_BENCH( return new GradientBench(p, kSweep_GradType, kColors_50); ) |
|
bsalomon
2013/07/09 21:29:45
Maybe just pass the GradData instance that you wan
dierk
2013/07/10 15:01:26
I used enums to match the style of the existing co
bsalomon
2013/07/10 15:21:21
You could have:
struct GradData {
int
dierk
2013/07/10 15:41:12
Done.
|
| 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, kColors_50); ) |
| +DEF_BENCH( return new GradientBench(p, kRadial2_GradType, kColors_2, SkShader::kMirror_TileMode); ) |
| DEF_BENCH( return new GradientBench(p, kConical_GradType); ) |
| +DEF_BENCH( return new GradientBench(p, kConical_GradType, kColors_50); ) |
| DEF_BENCH( return new Gradient2Bench(p, false); ) |
| DEF_BENCH( return new Gradient2Bench(p, true); ) |