From 91f489a65d436d36c7fe580af2775cd0cd13c8d2 Mon Sep 17 00:00:00 2001 From: "senorblanco@chromium.org" Date: Thu, 29 Nov 2012 17:09:27 +0000 Subject: Modify the blur bench to add tests for high-quality blurs, and large non-integer blurs. Change the Coarse flag (which just turns on separable blurs) to an #ifdef, since separable is no longer just Coarse. (This #ifdef will hopefully be shortlived, once Chrome has switched). The separable blur algorithm gives +45% on SampleBlur, +84% on SampleBigBlur, +31% on TheVerge, +35 to +85% on blurbench in HQ (depending on size), +8 to +35% in low quality. (All of these on 32bit MacPro). Review URL: https://codereview.appspot.com/6851117 git-svn-id: http://skia.googlecode.com/svn/trunk@6601 2bbb7eff-a529-9590-31e7-b0007b416f81 --- bench/BlurBench.cpp | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'bench/BlurBench.cpp') diff --git a/bench/BlurBench.cpp b/bench/BlurBench.cpp index cf95610974..ab77d2b011 100644 --- a/bench/BlurBench.cpp +++ b/bench/BlurBench.cpp @@ -16,6 +16,7 @@ #define SMALL SkIntToScalar(2) #define REAL SkFloatToScalar(1.5f) #define BIG SkIntToScalar(10) +#define REALBIG SkFloatToScalar(100.5f) static const char* gStyleName[] = { "normal", @@ -27,17 +28,20 @@ static const char* gStyleName[] = { class BlurBench : public SkBenchmark { SkScalar fRadius; SkBlurMaskFilter::BlurStyle fStyle; + uint32_t fFlags; SkString fName; public: - BlurBench(void* param, SkScalar rad, SkBlurMaskFilter::BlurStyle bs) : INHERITED(param) { + BlurBench(void* param, SkScalar rad, SkBlurMaskFilter::BlurStyle bs, uint32_t flags = 0) : INHERITED(param) { fRadius = rad; fStyle = bs; + fFlags = flags; const char* name = rad > 0 ? gStyleName[bs] : "none"; + const char* quality = flags & SkBlurMaskFilter::kHighQuality_BlurFlag ? "high_quality" : "low_quality"; if (SkScalarFraction(rad) != 0) { - fName.printf("blur_%.2f_%s", SkScalarToFloat(rad), name); + fName.printf("blur_%.2f_%s_%s", SkScalarToFloat(rad), name, quality); } else { - fName.printf("blur_%d_%s", SkScalarRound(rad), name); + fName.printf("blur_%d_%s_%s", SkScalarRound(rad), name, quality); } } @@ -59,7 +63,7 @@ protected: r.offset(fRadius, fRadius); if (fRadius > 0) { - SkMaskFilter* mf = SkBlurMaskFilter::Create(fRadius, fStyle, 0); + SkMaskFilter* mf = SkBlurMaskFilter::Create(fRadius, fStyle, fFlags); paint.setMaskFilter(mf)->unref(); } canvas->drawOval(r, paint); @@ -80,10 +84,23 @@ DEF_BENCH(return new BlurBench(p, BIG, SkBlurMaskFilter::kSolid_BlurStyle);) DEF_BENCH(return new BlurBench(p, BIG, SkBlurMaskFilter::kOuter_BlurStyle);) DEF_BENCH(return new BlurBench(p, BIG, SkBlurMaskFilter::kInner_BlurStyle);) +DEF_BENCH(return new BlurBench(p, REALBIG, SkBlurMaskFilter::kNormal_BlurStyle);) +DEF_BENCH(return new BlurBench(p, REALBIG, SkBlurMaskFilter::kSolid_BlurStyle);) +DEF_BENCH(return new BlurBench(p, REALBIG, SkBlurMaskFilter::kOuter_BlurStyle);) +DEF_BENCH(return new BlurBench(p, REALBIG, SkBlurMaskFilter::kInner_BlurStyle);) + DEF_BENCH(return new BlurBench(p, REAL, SkBlurMaskFilter::kNormal_BlurStyle);) DEF_BENCH(return new BlurBench(p, REAL, SkBlurMaskFilter::kSolid_BlurStyle);) DEF_BENCH(return new BlurBench(p, REAL, SkBlurMaskFilter::kOuter_BlurStyle);) DEF_BENCH(return new BlurBench(p, REAL, SkBlurMaskFilter::kInner_BlurStyle);) +DEF_BENCH(return new BlurBench(p, SMALL, SkBlurMaskFilter::kNormal_BlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag);) + +DEF_BENCH(return new BlurBench(p, BIG, SkBlurMaskFilter::kNormal_BlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag);) + +DEF_BENCH(return new BlurBench(p, REALBIG, SkBlurMaskFilter::kNormal_BlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag);) + +DEF_BENCH(return new BlurBench(p, REAL, SkBlurMaskFilter::kNormal_BlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag);) + DEF_BENCH(return new BlurBench(p, 0, SkBlurMaskFilter::kNormal_BlurStyle);) -- cgit v1.2.3