| Index: bench/BlurImageFilterBench.cpp
|
| diff --git a/bench/BlurImageFilterBench.cpp b/bench/BlurImageFilterBench.cpp
|
| index e4476a11edeba78d47bdf148836922a7d36cda01..7ed600632a1c3141ee1fab87dbcf6a53d7241f0e 100644
|
| --- a/bench/BlurImageFilterBench.cpp
|
| +++ b/bench/BlurImageFilterBench.cpp
|
| @@ -7,6 +7,7 @@
|
|
|
| #include "Benchmark.h"
|
| #include "SkBlurImageFilter.h"
|
| +#include "SkOffsetImageFilter.h"
|
| #include "SkCanvas.h"
|
| #include "SkPaint.h"
|
| #include "SkRandom.h"
|
| @@ -22,12 +23,33 @@
|
| #define BLUR_SIGMA_LARGE 10.0f
|
| #define BLUR_SIGMA_HUGE 80.0f
|
|
|
| +
|
| +// When 'cropped' is set we apply a cropRect to the blurImageFilter. The crop rect is an inset of
|
| +// the source's natural dimensions. This is intended to exercise blurring a larger source bitmap
|
| +// to a smaller destination bitmap.
|
| +
|
| +// When 'expanded' is set we apply a cropRect to the input of the blurImageFilter (a noOp
|
| +// offsetImageFilter). The crop rect in this case is an inset of the source's natural dimensions.
|
| +// An additional crop rect is applied to the blurImageFilter that is just the natural dimensions
|
| +// of the source (not inset). This is intended to exercise blurring a smaller source bitmap to a
|
| +// larger destination.
|
| +
|
| class BlurImageFilterBench : public Benchmark {
|
| public:
|
| - BlurImageFilterBench(SkScalar sigmaX, SkScalar sigmaY, bool small, bool cropped) :
|
| - fIsSmall(small), fIsCropped(cropped), fInitialized(false), fSigmaX(sigmaX), fSigmaY(sigmaY) {
|
| - fName.printf("blur_image_filter_%s%s_%.2f_%.2f", fIsSmall ? "small" : "large",
|
| - fIsCropped ? "_cropped" : "", SkScalarToFloat(sigmaX), SkScalarToFloat(sigmaY));
|
| + BlurImageFilterBench(SkScalar sigmaX, SkScalar sigmaY, bool small, bool cropped,
|
| + bool expanded)
|
| + : fIsSmall(small)
|
| + , fIsCropped(cropped)
|
| + , fIsExpanded(expanded)
|
| + , fInitialized(false)
|
| + , fSigmaX(sigmaX)
|
| + , fSigmaY(sigmaY) {
|
| + fName.printf("blur_image_filter_%s%s%s_%.2f_%.2f",
|
| + fIsSmall ? "small" : "large",
|
| + fIsCropped ? "_cropped" : "",
|
| + fIsExpanded ? "_expanded" : "",
|
| + SkScalarToFloat(sigmaX), SkScalarToFloat(sigmaY));
|
| + SkASSERT(!fIsExpanded || fIsCropped); // never want expansion w/o cropping
|
| }
|
|
|
| protected:
|
| @@ -49,11 +71,16 @@ protected:
|
| const SkRect bmpRect = SkRect::MakeXYWH(kX, kY,
|
| SkIntToScalar(fCheckerboard.width()),
|
| SkIntToScalar(fCheckerboard.height()));
|
| - const SkImageFilter::CropRect cropRect =
|
| - SkImageFilter::CropRect(bmpRect.makeInset(10.f, 10.f));
|
| - const SkImageFilter::CropRect* crop = fIsCropped ? &cropRect : nullptr;
|
| + const SkImageFilter::CropRect cropRect(bmpRect.makeInset(10.f, 10.f));
|
| + const SkImageFilter::CropRect cropRectLarge(bmpRect);
|
| + SkAutoTUnref<SkImageFilter> noOpCropped(SkOffsetImageFilter::Create(0, 0, nullptr,
|
| + &cropRect));
|
| +
|
| + SkImageFilter* input = fIsExpanded ? noOpCropped.get() : nullptr;
|
|
|
| - paint.setImageFilter(SkBlurImageFilter::Create(fSigmaX, fSigmaY, nullptr, crop))->unref();
|
| + const SkImageFilter::CropRect* crop =
|
| + fIsExpanded ? &cropRectLarge : fIsCropped ? &cropRect : nullptr;
|
| + paint.setImageFilter(SkBlurImageFilter::Create(fSigmaX, fSigmaY, input, crop))->unref();
|
|
|
| for (int i = 0; i < loops; i++) {
|
| canvas->drawBitmap(fCheckerboard, kX, kY, &paint);
|
| @@ -87,34 +114,48 @@ private:
|
| SkString fName;
|
| bool fIsSmall;
|
| bool fIsCropped;
|
| + bool fIsExpanded;
|
| bool fInitialized;
|
| SkBitmap fCheckerboard;
|
| SkScalar fSigmaX, fSigmaY;
|
| typedef Benchmark INHERITED;
|
| };
|
|
|
| -DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_LARGE, 0, false, false);)
|
| -DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_SMALL, 0, false, false);)
|
| -DEF_BENCH(return new BlurImageFilterBench(0, BLUR_SIGMA_LARGE, false, false);)
|
| -DEF_BENCH(return new BlurImageFilterBench(0, BLUR_SIGMA_SMALL, false, false);)
|
| -DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_MINI, BLUR_SIGMA_MINI, true, false);)
|
| -DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_MINI, BLUR_SIGMA_MINI, false, false);)
|
| -DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_SMALL, BLUR_SIGMA_SMALL, true, false);)
|
| -DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_SMALL, BLUR_SIGMA_SMALL, false, false);)
|
| -DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_LARGE, BLUR_SIGMA_LARGE, true, false);)
|
| -DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_LARGE, BLUR_SIGMA_LARGE, false, false);)
|
| -DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_HUGE, BLUR_SIGMA_HUGE, true, false);)
|
| -DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_HUGE, BLUR_SIGMA_HUGE, false, false);)
|
| -
|
| -DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_LARGE, 0, false, true);)
|
| -DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_SMALL, 0, false, true);)
|
| -DEF_BENCH(return new BlurImageFilterBench(0, BLUR_SIGMA_LARGE, false, true);)
|
| -DEF_BENCH(return new BlurImageFilterBench(0, BLUR_SIGMA_SMALL, false, true);)
|
| -DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_MINI, BLUR_SIGMA_MINI, true, true);)
|
| -DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_MINI, BLUR_SIGMA_MINI, false, true);)
|
| -DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_SMALL, BLUR_SIGMA_SMALL, true, true);)
|
| -DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_SMALL, BLUR_SIGMA_SMALL, false, true);)
|
| -DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_LARGE, BLUR_SIGMA_LARGE, true, true);)
|
| -DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_LARGE, BLUR_SIGMA_LARGE, false, true);)
|
| -DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_HUGE, BLUR_SIGMA_HUGE, true, true);)
|
| -DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_HUGE, BLUR_SIGMA_HUGE, false, true);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_LARGE, 0, false, false, false);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_SMALL, 0, false, false, false);)
|
| +DEF_BENCH(return new BlurImageFilterBench(0, BLUR_SIGMA_LARGE, false, false, false);)
|
| +DEF_BENCH(return new BlurImageFilterBench(0, BLUR_SIGMA_SMALL, false, false, false);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_MINI, BLUR_SIGMA_MINI, true, false, false);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_MINI, BLUR_SIGMA_MINI, false, false, false);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_SMALL, BLUR_SIGMA_SMALL, true, false, false);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_SMALL, BLUR_SIGMA_SMALL, false, false, false);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_LARGE, BLUR_SIGMA_LARGE, true, false, false);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_LARGE, BLUR_SIGMA_LARGE, false, false, false);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_HUGE, BLUR_SIGMA_HUGE, true, false, false);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_HUGE, BLUR_SIGMA_HUGE, false, false, false);)
|
| +
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_LARGE, 0, false, true, false);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_SMALL, 0, false, true, false);)
|
| +DEF_BENCH(return new BlurImageFilterBench(0, BLUR_SIGMA_LARGE, false, true, false);)
|
| +DEF_BENCH(return new BlurImageFilterBench(0, BLUR_SIGMA_SMALL, false, true, false);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_MINI, BLUR_SIGMA_MINI, true, true, false);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_MINI, BLUR_SIGMA_MINI, false, true, false);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_SMALL, BLUR_SIGMA_SMALL, true, true, false);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_SMALL, BLUR_SIGMA_SMALL, false, true, false);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_LARGE, BLUR_SIGMA_LARGE, true, true, false);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_LARGE, BLUR_SIGMA_LARGE, false, true, false);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_HUGE, BLUR_SIGMA_HUGE, true, true, false);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_HUGE, BLUR_SIGMA_HUGE, false, true, false);)
|
| +
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_LARGE, 0, false, true, true);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_SMALL, 0, false, true, true);)
|
| +DEF_BENCH(return new BlurImageFilterBench(0, BLUR_SIGMA_LARGE, false, true, true);)
|
| +DEF_BENCH(return new BlurImageFilterBench(0, BLUR_SIGMA_SMALL, false, true, true);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_MINI, BLUR_SIGMA_MINI, true, true, true);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_MINI, BLUR_SIGMA_MINI, false, true, true);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_SMALL, BLUR_SIGMA_SMALL, true, true, true);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_SMALL, BLUR_SIGMA_SMALL, false, true, true);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_LARGE, BLUR_SIGMA_LARGE, true, true, true);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_LARGE, BLUR_SIGMA_LARGE, false, true, true);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_HUGE, BLUR_SIGMA_HUGE, true, true, true);)
|
| +DEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_HUGE, BLUR_SIGMA_HUGE, false, true, true);)
|
|
|