| Index: bench/GradientBench.cpp
|
| diff --git a/bench/GradientBench.cpp b/bench/GradientBench.cpp
|
| index 5ec9d8784eb8d98dab7669bb744a4bc5a46dd05b..e04a8122d13baee1f6e7edbbb204d0adea7790d9 100644
|
| --- a/bench/GradientBench.cpp
|
| +++ b/bench/GradientBench.cpp
|
| @@ -109,13 +109,12 @@ typedef SkShader* (*GradMaker)(const SkPoint pts[2], const GradData& data,
|
| static const struct {
|
| GradMaker fMaker;
|
| const char* fName;
|
| - int fRepeat;
|
| } gGrads[] = {
|
| - { MakeLinear, "linear", 15 },
|
| - { MakeRadial, "radial1", 10 },
|
| - { MakeSweep, "sweep", 1 },
|
| - { Make2Radial, "radial2", 5 },
|
| - { MakeConical, "conical", 5 },
|
| + { MakeLinear, "linear" },
|
| + { MakeRadial, "radial1" },
|
| + { MakeSweep, "sweep" },
|
| + { Make2Radial, "radial2" },
|
| + { MakeConical, "conical" },
|
| };
|
|
|
| enum GradType { // these must match the order in gGrads
|
| @@ -162,10 +161,10 @@ static const char* geomtypename(GeomType gt) {
|
| class GradientBench : public SkBenchmark {
|
| SkString fName;
|
| SkShader* fShader;
|
| - int fRepeat;
|
| enum {
|
| W = 400,
|
| H = 400,
|
| + kRepeat = 15,
|
| };
|
| public:
|
| GradientBench(GradType gradType,
|
| @@ -191,7 +190,6 @@ public:
|
| { SkIntToScalar(W), SkIntToScalar(H) }
|
| };
|
|
|
| - fRepeat = gGrads[gradType].fRepeat;
|
| fShader = gGrads[gradType].fMaker(pts, data, tm, NULL, scale);
|
| fGeomType = geomType;
|
| }
|
| @@ -212,7 +210,7 @@ protected:
|
| paint.setShader(fShader);
|
|
|
| SkRect r = { 0, 0, SkIntToScalar(W), SkIntToScalar(H) };
|
| - for (int i = 0; i < this->getLoops() * fRepeat; i++) {
|
| + for (int i = 0; i < this->getLoops() * kRepeat; i++) {
|
| switch (fGeomType) {
|
| case kRect_GeomType:
|
| canvas->drawRect(r, paint);
|
| @@ -230,6 +228,35 @@ private:
|
| GeomType fGeomType;
|
| };
|
|
|
| +DEF_BENCH( return new GradientBench(kLinear_GradType); )
|
| +DEF_BENCH( return new GradientBench(kLinear_GradType, gGradData[1]); )
|
| +DEF_BENCH( return new GradientBench(kLinear_GradType, gGradData[2]); )
|
| +DEF_BENCH( return new GradientBench(kLinear_GradType, gGradData[0], SkShader::kMirror_TileMode); )
|
| +
|
| +DEF_BENCH( return new GradientBench(kRadial_GradType, gGradData[0]); )
|
| +DEF_BENCH( return new GradientBench(kRadial_GradType, gGradData[1]); )
|
| +DEF_BENCH( return new GradientBench(kRadial_GradType, gGradData[2]); )
|
| +// 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(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(kRadial_GradType, gGradData[0], SkShader::kClamp_TileMode, kOval_GeomType); )
|
| +
|
| +DEF_BENCH( return new GradientBench(kRadial_GradType, gGradData[0], SkShader::kMirror_TileMode); )
|
| +DEF_BENCH( return new GradientBench(kSweep_GradType); )
|
| +DEF_BENCH( return new GradientBench(kSweep_GradType, gGradData[1]); )
|
| +DEF_BENCH( return new GradientBench(kSweep_GradType, gGradData[2]); )
|
| +DEF_BENCH( return new GradientBench(kRadial2_GradType); )
|
| +DEF_BENCH( return new GradientBench(kRadial2_GradType, gGradData[1]); )
|
| +DEF_BENCH( return new GradientBench(kRadial2_GradType, gGradData[0], SkShader::kMirror_TileMode); )
|
| +DEF_BENCH( return new GradientBench(kConical_GradType); )
|
| +DEF_BENCH( return new GradientBench(kConical_GradType, gGradData[1]); )
|
| +DEF_BENCH( return new GradientBench(kConical_GradType, gGradData[2]); )
|
| +
|
| +///////////////////////////////////////////////////////////////////////////////
|
| +
|
| class Gradient2Bench : public SkBenchmark {
|
| SkString fName;
|
| bool fHasAlpha;
|
| @@ -274,33 +301,5 @@ private:
|
| typedef SkBenchmark INHERITED;
|
| };
|
|
|
| -DEF_BENCH( return new GradientBench(kLinear_GradType); )
|
| -DEF_BENCH( return new GradientBench(kLinear_GradType, gGradData[1]); )
|
| -DEF_BENCH( return new GradientBench(kLinear_GradType, gGradData[2]); )
|
| -DEF_BENCH( return new GradientBench(kLinear_GradType, gGradData[0], SkShader::kMirror_TileMode); )
|
| -
|
| -
|
| -DEF_BENCH( return new GradientBench(kRadial_GradType, gGradData[0]); )
|
| -DEF_BENCH( return new GradientBench(kRadial_GradType, gGradData[1]); )
|
| -DEF_BENCH( return new GradientBench(kRadial_GradType, gGradData[2]); )
|
| -// 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(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(kRadial_GradType, gGradData[0], SkShader::kClamp_TileMode, kOval_GeomType); )
|
| -
|
| -DEF_BENCH( return new GradientBench(kRadial_GradType, gGradData[0], SkShader::kMirror_TileMode); )
|
| -DEF_BENCH( return new GradientBench(kSweep_GradType); )
|
| -DEF_BENCH( return new GradientBench(kSweep_GradType, gGradData[1]); )
|
| -DEF_BENCH( return new GradientBench(kSweep_GradType, gGradData[2]); )
|
| -DEF_BENCH( return new GradientBench(kRadial2_GradType); )
|
| -DEF_BENCH( return new GradientBench(kRadial2_GradType, gGradData[1]); )
|
| -DEF_BENCH( return new GradientBench(kRadial2_GradType, gGradData[0], SkShader::kMirror_TileMode); )
|
| -DEF_BENCH( return new GradientBench(kConical_GradType); )
|
| -DEF_BENCH( return new GradientBench(kConical_GradType, gGradData[1]); )
|
| -DEF_BENCH( return new GradientBench(kConical_GradType, gGradData[2]); )
|
| -
|
| DEF_BENCH( return new Gradient2Bench(false); )
|
| DEF_BENCH( return new Gradient2Bench(true); )
|
|
|