aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/GradientBench.cpp
diff options
context:
space:
mode:
authorGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2014-04-14 16:02:31 +0000
committerGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2014-04-14 16:02:31 +0000
commit95f79261addecd8c3b4e64f2f1469f9e1aa0acb2 (patch)
treef456b4c8930ffb39da33a8aa983fb338059d9697 /bench/GradientBench.cpp
parent1a479e7547d4efe2d1d06fab5c9442b77ec6c954 (diff)
Add conical special cases to GradientBench
BUG=skia: R=reed@google.com, bsalomon@google.com, robertphillips@google.com Author: egdaniel@google.com Review URL: https://codereview.chromium.org/234603006 git-svn-id: http://skia.googlecode.com/svn/trunk@14182 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'bench/GradientBench.cpp')
-rw-r--r--bench/GradientBench.cpp71
1 files changed, 65 insertions, 6 deletions
diff --git a/bench/GradientBench.cpp b/bench/GradientBench.cpp
index 9c6c48a235..55e777d8fb 100644
--- a/bench/GradientBench.cpp
+++ b/bench/GradientBench.cpp
@@ -102,6 +102,50 @@ static SkShader* MakeConical(const SkPoint pts[2], const GradData& data,
data.fColors, data.fPos, data.fCount, tm, mapper);
}
+/// Ignores scale
+static SkShader* MakeConicalZeroRad(const SkPoint pts[2], const GradData& data,
+ SkShader::TileMode tm, SkUnitMapper* mapper,
+ float scale) {
+ SkPoint center0, center1;
+ center0.set(SkScalarAve(pts[0].fX, pts[1].fX),
+ SkScalarAve(pts[0].fY, pts[1].fY));
+ center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5),
+ SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4));
+ return SkGradientShader::CreateTwoPointConical(center1, 0.0,
+ center0, (pts[1].fX - pts[0].fX) / 2,
+ data.fColors, data.fPos, data.fCount, tm, mapper);
+}
+
+/// Ignores scale
+static SkShader* MakeConicalOutside(const SkPoint pts[2], const GradData& data,
+ SkShader::TileMode tm, SkUnitMapper* mapper,
+ float scale) {
+ SkPoint center0, center1;
+ SkScalar radius0 = SkScalarDiv(pts[1].fX - pts[0].fX, 10);
+ SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3);
+ center0.set(pts[0].fX + radius0, pts[0].fY + radius0);
+ center1.set(pts[1].fX - radius1, pts[1].fY - radius1);
+ return SkGradientShader::CreateTwoPointConical(center0, radius0,
+ center1, radius1,
+ data.fColors, data.fPos,
+ data.fCount, tm, mapper);
+}
+
+/// Ignores scale
+static SkShader* MakeConicalOutsideZeroRad(const SkPoint pts[2], const GradData& data,
+ SkShader::TileMode tm, SkUnitMapper* mapper,
+ float scale) {
+ SkPoint center0, center1;
+ SkScalar radius0 = SkScalarDiv(pts[1].fX - pts[0].fX, 10);
+ SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3);
+ center0.set(pts[0].fX + radius0, pts[0].fY + radius0);
+ center1.set(pts[1].fX - radius1, pts[1].fY - radius1);
+ return SkGradientShader::CreateTwoPointConical(center0, 0.0,
+ center1, radius1,
+ data.fColors, data.fPos,
+ data.fCount, tm, mapper);
+}
+
typedef SkShader* (*GradMaker)(const SkPoint pts[2], const GradData& data,
SkShader::TileMode tm, SkUnitMapper* mapper,
float scale);
@@ -110,11 +154,14 @@ static const struct {
GradMaker fMaker;
const char* fName;
} gGrads[] = {
- { MakeLinear, "linear" },
- { MakeRadial, "radial1" },
- { MakeSweep, "sweep" },
- { Make2Radial, "radial2" },
- { MakeConical, "conical" },
+ { MakeLinear, "linear" },
+ { MakeRadial, "radial1" },
+ { MakeSweep, "sweep" },
+ { Make2Radial, "radial2" },
+ { MakeConical, "conical" },
+ { MakeConicalZeroRad, "conicalZero" },
+ { MakeConicalOutside, "conicalOut" },
+ { MakeConicalOutsideZeroRad, "conicalOutZero" },
};
enum GradType { // these must match the order in gGrads
@@ -122,7 +169,10 @@ enum GradType { // these must match the order in gGrads
kRadial_GradType,
kSweep_GradType,
kRadial2_GradType,
- kConical_GradType
+ kConical_GradType,
+ kConicalZero_GradType,
+ kConicalOut_GradType,
+ kConicalOutZero_GradType
};
enum GeomType {
@@ -255,6 +305,15 @@ DEF_BENCH( return new GradientBench(kRadial2_GradType, gGradData[0], SkShader::k
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 GradientBench(kConicalZero_GradType); )
+DEF_BENCH( return new GradientBench(kConicalZero_GradType, gGradData[1]); )
+DEF_BENCH( return new GradientBench(kConicalZero_GradType, gGradData[2]); )
+DEF_BENCH( return new GradientBench(kConicalOut_GradType); )
+DEF_BENCH( return new GradientBench(kConicalOut_GradType, gGradData[1]); )
+DEF_BENCH( return new GradientBench(kConicalOut_GradType, gGradData[2]); )
+DEF_BENCH( return new GradientBench(kConicalOutZero_GradType); )
+DEF_BENCH( return new GradientBench(kConicalOutZero_GradType, gGradData[1]); )
+DEF_BENCH( return new GradientBench(kConicalOutZero_GradType, gGradData[2]); )
///////////////////////////////////////////////////////////////////////////////