aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/BlurBench.cpp
diff options
context:
space:
mode:
authorGravatar senorblanco@chromium.org <senorblanco@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-11-29 17:09:27 +0000
committerGravatar senorblanco@chromium.org <senorblanco@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-11-29 17:09:27 +0000
commit91f489a65d436d36c7fe580af2775cd0cd13c8d2 (patch)
tree99dc1569121ee3cf78b80768788d3aeafc9e19ad /bench/BlurBench.cpp
parentf4d1b3911831d2111a351b2742b3a94a9d17f92e (diff)
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
Diffstat (limited to 'bench/BlurBench.cpp')
-rw-r--r--bench/BlurBench.cpp25
1 files changed, 21 insertions, 4 deletions
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);)