diff options
Diffstat (limited to 'chromium/third_party/skia/bench/BlurBench.cpp')
-rw-r--r-- | chromium/third_party/skia/bench/BlurBench.cpp | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/chromium/third_party/skia/bench/BlurBench.cpp b/chromium/third_party/skia/bench/BlurBench.cpp new file mode 100644 index 00000000000..cafc6f3a2a3 --- /dev/null +++ b/chromium/third_party/skia/bench/BlurBench.cpp @@ -0,0 +1,109 @@ + +/* + * Copyright 2011 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +#include "Benchmark.h" +#include "SkBlurMask.h" +#include "SkBlurMaskFilter.h" +#include "SkCanvas.h" +#include "SkPaint.h" +#include "SkRandom.h" +#include "SkShader.h" +#include "SkString.h" + +#define SMALL SkIntToScalar(2) +#define REAL 1.5f +#define BIG SkIntToScalar(10) +#define REALBIG 100.5f + +static const char* gStyleName[] = { + "normal", + "solid", + "outer", + "inner" +}; + +class BlurBench : public Benchmark { + SkScalar fRadius; + SkBlurStyle fStyle; + uint32_t fFlags; + SkString fName; + +public: + BlurBench(SkScalar rad, SkBlurStyle bs, uint32_t flags = 0) { + 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_%s", SkScalarToFloat(rad), name, quality); + } else { + fName.printf("blur_%d_%s_%s", SkScalarRoundToInt(rad), name, quality); + } + } + +protected: + virtual const char* onGetName() { + return fName.c_str(); + } + + virtual void onDraw(const int loops, SkCanvas* canvas) { + SkPaint paint; + this->setupPaint(&paint); + + paint.setAntiAlias(true); + + SkRandom rand; + for (int i = 0; i < loops; i++) { + SkRect r = SkRect::MakeWH(rand.nextUScalar1() * 400, + rand.nextUScalar1() * 400); + r.offset(fRadius, fRadius); + + if (fRadius > 0) { + SkMaskFilter* mf = SkBlurMaskFilter::Create(fStyle, + SkBlurMask::ConvertRadiusToSigma(fRadius), + fFlags); + paint.setMaskFilter(mf)->unref(); + } + canvas->drawOval(r, paint); + } + } + +private: + typedef Benchmark INHERITED; +}; + +DEF_BENCH(return new BlurBench(SMALL, kNormal_SkBlurStyle);) +DEF_BENCH(return new BlurBench(SMALL, kSolid_SkBlurStyle);) +DEF_BENCH(return new BlurBench(SMALL, kOuter_SkBlurStyle);) +DEF_BENCH(return new BlurBench(SMALL, kInner_SkBlurStyle);) + +DEF_BENCH(return new BlurBench(BIG, kNormal_SkBlurStyle);) +DEF_BENCH(return new BlurBench(BIG, kSolid_SkBlurStyle);) +DEF_BENCH(return new BlurBench(BIG, kOuter_SkBlurStyle);) +DEF_BENCH(return new BlurBench(BIG, kInner_SkBlurStyle);) + +DEF_BENCH(return new BlurBench(REALBIG, kNormal_SkBlurStyle);) +DEF_BENCH(return new BlurBench(REALBIG, kSolid_SkBlurStyle);) +DEF_BENCH(return new BlurBench(REALBIG, kOuter_SkBlurStyle);) +DEF_BENCH(return new BlurBench(REALBIG, kInner_SkBlurStyle);) + +DEF_BENCH(return new BlurBench(REAL, kNormal_SkBlurStyle);) +DEF_BENCH(return new BlurBench(REAL, kSolid_SkBlurStyle);) +DEF_BENCH(return new BlurBench(REAL, kOuter_SkBlurStyle);) +DEF_BENCH(return new BlurBench(REAL, kInner_SkBlurStyle);) + +DEF_BENCH(return new BlurBench(SMALL, kNormal_SkBlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag);) + +DEF_BENCH(return new BlurBench(BIG, kNormal_SkBlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag);) + +DEF_BENCH(return new BlurBench(REALBIG, kNormal_SkBlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag);) + +DEF_BENCH(return new BlurBench(REAL, kNormal_SkBlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag);) + +DEF_BENCH(return new BlurBench(0, kNormal_SkBlurStyle);) |