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);) |