From 95f79261addecd8c3b4e64f2f1469f9e1aa0acb2 Mon Sep 17 00:00:00 2001 From: "commit-bot@chromium.org" Date: Mon, 14 Apr 2014 16:02:31 +0000 Subject: 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 --- bench/GradientBench.cpp | 71 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 65 insertions(+), 6 deletions(-) (limited to 'bench/GradientBench.cpp') 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]); ) /////////////////////////////////////////////////////////////////////////////// -- cgit v1.2.3