| Index: bench/BlurRectBench.cpp
|
| ===================================================================
|
| --- bench/BlurRectBench.cpp (revision 11004)
|
| +++ bench/BlurRectBench.cpp (working copy)
|
| @@ -13,23 +13,25 @@
|
| #include "SkString.h"
|
| #include "SkBlurMask.h"
|
|
|
| -#define SMALL SkIntToScalar(2)
|
| -#define REAL SkFloatToScalar(1.5f)
|
| -#define BIG SkIntToScalar(10)
|
| -#define REALBIG SkFloatToScalar(30.5f)
|
| +#define SMALL SkFloatToScalar(1.6547f)
|
| +#define REAL SkFloatToScalar(1.366025f)
|
| +static const SkScalar kMedium = SkFloatToScalar(3.38675f);
|
| +#define BIG SkFloatToScalar(6.2735f)
|
| +static const SkScalar kMedBig = SkFloatToScalar(12.047f);
|
| +#define REALBIG SkFloatToScalar(18.109175f)
|
|
|
| class BlurRectBench: public SkBenchmark {
|
| int fLoopCount;
|
| - SkScalar fRadius;
|
| + SkScalar fSigma;
|
| SkString fName;
|
|
|
| public:
|
| - BlurRectBench(void *param, SkScalar rad) : INHERITED(param) {
|
| - fRadius = rad;
|
| + BlurRectBench(void *param, SkScalar sigma) : INHERITED(param) {
|
| + fSigma = sigma;
|
|
|
| - if (fRadius > SkIntToScalar(25)) {
|
| + if (fSigma > SkIntToScalar(15)) {
|
| fLoopCount = 100;
|
| - } else if (fRadius > SkIntToScalar(5)) {
|
| + } else if (fSigma > SkIntToScalar(3)) {
|
| fLoopCount = 1000;
|
| } else {
|
| fLoopCount = 10000;
|
| @@ -41,8 +43,8 @@
|
| return fName.c_str();
|
| }
|
|
|
| - SkScalar radius() const {
|
| - return fRadius;
|
| + SkScalar sigma() const {
|
| + return fSigma;
|
| }
|
|
|
| void setName(const SkString& name) {
|
| @@ -55,8 +57,7 @@
|
|
|
| paint.setAntiAlias(true);
|
|
|
| - SkScalar pad = fRadius*3/2 + SK_Scalar1;
|
| - SkRect r = SkRect::MakeWH(2 * pad + SK_Scalar1, 2 * pad + SK_Scalar1);
|
| + SkRect r = SkRect::MakeWH(3.0f * fSigma, 3.0f * fSigma);
|
|
|
| preBenchSetup(r);
|
|
|
| @@ -74,21 +75,16 @@
|
|
|
| class BlurRectDirectBench: public BlurRectBench {
|
| public:
|
| - BlurRectDirectBench(void *param, SkScalar rad) : INHERITED(param, rad) {
|
| + BlurRectDirectBench(void *param, SkScalar sigma, const char* suffix)
|
| + : INHERITED(param, sigma) {
|
| SkString name;
|
| -
|
| - if (SkScalarFraction(rad) != 0) {
|
| - name.printf("blurrect_direct_%.2f", SkScalarToFloat(rad));
|
| - } else {
|
| - name.printf("blurrect_direct_%d", SkScalarRoundToInt(rad));
|
| - }
|
| -
|
| - setName(name);
|
| + name.printf("blurrect_direct_%s", suffix);
|
| + this->setName(name);
|
| }
|
| protected:
|
| virtual void makeBlurryRect(const SkRect& r) SK_OVERRIDE {
|
| SkMask mask;
|
| - SkBlurMask::BlurRect(&mask, r, this->radius(), SkBlurMask::kNormal_Style);
|
| + SkBlurMask::BlurRect(this->sigma(), &mask, r, SkBlurMask::kNormal_Style);
|
| SkMask::FreeImage(mask.fImage);
|
| }
|
| private:
|
| @@ -98,7 +94,7 @@
|
| class BlurRectSeparableBench: public BlurRectBench {
|
|
|
| public:
|
| - BlurRectSeparableBench(void *param, SkScalar rad) : INHERITED(param, rad) {
|
| + BlurRectSeparableBench(void *param, SkScalar sigma) : INHERITED(param, sigma) {
|
| fSrcMask.fImage = NULL;
|
| }
|
|
|
| @@ -125,14 +121,11 @@
|
|
|
| class BlurRectBoxFilterBench: public BlurRectSeparableBench {
|
| public:
|
| - BlurRectBoxFilterBench(void *param, SkScalar rad) : INHERITED(param, rad) {
|
| + BlurRectBoxFilterBench(void *param, SkScalar sigma, const char* suffix)
|
| + : INHERITED(param, sigma) {
|
| SkString name;
|
| - if (SkScalarFraction(rad) != 0) {
|
| - name.printf("blurrect_boxfilter_%.2f", SkScalarToFloat(rad));
|
| - } else {
|
| - name.printf("blurrect_boxfilter_%d", SkScalarRoundToInt(rad));
|
| - }
|
| - setName(name);
|
| + name.printf("blurrect_boxfilter_%s", suffix);
|
| + this->setName(name);
|
| }
|
|
|
| protected:
|
| @@ -140,9 +133,9 @@
|
| virtual void makeBlurryRect(const SkRect&) SK_OVERRIDE {
|
| SkMask mask;
|
| mask.fImage = NULL;
|
| - SkBlurMask::Blur(&mask, fSrcMask, this->radius(),
|
| - SkBlurMask::kNormal_Style,
|
| - SkBlurMask::kHigh_Quality);
|
| + SkBlurMask::BoxBlur(&mask, fSrcMask, this->sigma(),
|
| + SkBlurMask::kNormal_Style,
|
| + SkBlurMask::kHigh_Quality);
|
| SkMask::FreeImage(mask.fImage);
|
| }
|
| private:
|
| @@ -151,14 +144,11 @@
|
|
|
| class BlurRectGaussianBench: public BlurRectSeparableBench {
|
| public:
|
| - BlurRectGaussianBench(void *param, SkScalar rad) : INHERITED(param, rad) {
|
| + BlurRectGaussianBench(void *param, SkScalar sigma, const char* suffix)
|
| + : INHERITED(param, sigma) {
|
| SkString name;
|
| - if (SkScalarFraction(rad) != 0) {
|
| - name.printf("blurrect_gaussian_%.2f", SkScalarToFloat(rad));
|
| - } else {
|
| - name.printf("blurrect_gaussian_%d", SkScalarRoundToInt(rad));
|
| - }
|
| - setName(name);
|
| + name.printf("blurrect_gaussian_%s", suffix);
|
| + this->setName(name);
|
| }
|
|
|
| protected:
|
| @@ -166,7 +156,7 @@
|
| virtual void makeBlurryRect(const SkRect&) SK_OVERRIDE {
|
| SkMask mask;
|
| mask.fImage = NULL;
|
| - SkBlurMask::BlurGroundTruth(&mask, fSrcMask, this->radius(),
|
| + SkBlurMask::BlurGroundTruth(this->sigma(), &mask, fSrcMask,
|
| SkBlurMask::kNormal_Style);
|
| SkMask::FreeImage(mask.fImage);
|
| }
|
| @@ -174,24 +164,24 @@
|
| typedef BlurRectSeparableBench INHERITED;
|
| };
|
|
|
| -DEF_BENCH(return new BlurRectBoxFilterBench(p, SMALL);)
|
| -DEF_BENCH(return new BlurRectBoxFilterBench(p, BIG);)
|
| -DEF_BENCH(return new BlurRectBoxFilterBench(p, REALBIG);)
|
| -DEF_BENCH(return new BlurRectBoxFilterBench(p, REAL);)
|
| -DEF_BENCH(return new BlurRectGaussianBench(p, SMALL);)
|
| -DEF_BENCH(return new BlurRectGaussianBench(p, BIG);)
|
| -DEF_BENCH(return new BlurRectGaussianBench(p, REALBIG);)
|
| -DEF_BENCH(return new BlurRectGaussianBench(p, REAL);)
|
| -DEF_BENCH(return new BlurRectDirectBench(p, SMALL);)
|
| -DEF_BENCH(return new BlurRectDirectBench(p, BIG);)
|
| -DEF_BENCH(return new BlurRectDirectBench(p, REALBIG);)
|
| -DEF_BENCH(return new BlurRectDirectBench(p, REAL);)
|
| +DEF_BENCH(return new BlurRectBoxFilterBench(p, SMALL, "2");)
|
| +DEF_BENCH(return new BlurRectBoxFilterBench(p, BIG, "10");)
|
| +DEF_BENCH(return new BlurRectBoxFilterBench(p, REALBIG, "30.50");)
|
| +DEF_BENCH(return new BlurRectBoxFilterBench(p, REAL, "1.50");)
|
| +DEF_BENCH(return new BlurRectGaussianBench(p, SMALL, "2");)
|
| +DEF_BENCH(return new BlurRectGaussianBench(p, BIG, "10");)
|
| +DEF_BENCH(return new BlurRectGaussianBench(p, REALBIG, "30.50");)
|
| +DEF_BENCH(return new BlurRectGaussianBench(p, REAL, "1.50");)
|
| +DEF_BENCH(return new BlurRectDirectBench(p, SMALL, "2");)
|
| +DEF_BENCH(return new BlurRectDirectBench(p, BIG, "10");)
|
| +DEF_BENCH(return new BlurRectDirectBench(p, REALBIG, "30.50");)
|
| +DEF_BENCH(return new BlurRectDirectBench(p, REAL, "1.50");)
|
|
|
| -DEF_BENCH(return new BlurRectDirectBench(p, SkIntToScalar(5));)
|
| -DEF_BENCH(return new BlurRectDirectBench(p, SkIntToScalar(20));)
|
| +DEF_BENCH(return new BlurRectDirectBench(p, kMedium, "5");)
|
| +DEF_BENCH(return new BlurRectDirectBench(p, kMedBig, "20");)
|
|
|
| -DEF_BENCH(return new BlurRectBoxFilterBench(p, SkIntToScalar(5));)
|
| -DEF_BENCH(return new BlurRectBoxFilterBench(p, SkIntToScalar(20));)
|
| +DEF_BENCH(return new BlurRectBoxFilterBench(p, kMedium, "5");)
|
| +DEF_BENCH(return new BlurRectBoxFilterBench(p, kMedBig, "20");)
|
|
|
| #if 0
|
| // disable Gaussian benchmarks; the algorithm works well enough
|
|
|