From a8bd38e1787417cb472ee5381bd9ce6e126afb41 Mon Sep 17 00:00:00 2001 From: senorblanco Date: Fri, 30 Oct 2015 13:17:20 -0700 Subject: Add cropped-then-expanded test cases to blur_image_filter tests. These are benches similar to the imagefilterscropexpand GM: an input filter is cropped to a smaller size, then the blur is re-expanded out to a larger size. BUG=skbug:4502 Review URL: https://codereview.chromium.org/1412373004 --- bench/BlurImageFilterBench.cpp | 107 ++++++++++++++++++++++++++++------------- 1 file changed, 74 insertions(+), 33 deletions(-) (limited to 'bench/BlurImageFilterBench.cpp') diff --git a/bench/BlurImageFilterBench.cpp b/bench/BlurImageFilterBench.cpp index e4476a11ed..7ed600632a 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 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);) -- cgit v1.2.3