| Index: bench/BlurImageFilterBench.cpp
|
| diff --git a/bench/BlurImageFilterBench.cpp b/bench/BlurImageFilterBench.cpp
|
| index cf93774178bd40b88edee8437869c1c17be7158a..9560263f1d24ffae7900770e6954382dd2b37362 100644
|
| --- a/bench/BlurImageFilterBench.cpp
|
| +++ b/bench/BlurImageFilterBench.cpp
|
| @@ -34,6 +34,30 @@
|
| // of the source (not inset). This is intended to exercise blurring a smaller source bitmap to a
|
| // larger destination.
|
|
|
| +static SkBitmap make_checkerboard(int width, int height) {
|
| + SkBitmap bm;
|
| + bm.allocN32Pixels(width, height);
|
| + SkCanvas canvas(bm);
|
| + canvas.clear(0x00000000);
|
| + SkPaint darkPaint;
|
| + darkPaint.setColor(0xFF804020);
|
| + SkPaint lightPaint;
|
| + lightPaint.setColor(0xFF244484);
|
| + for (int y = 0; y < height; y += 16) {
|
| + for (int x = 0; x < width; x += 16) {
|
| + canvas.save();
|
| + canvas.translate(SkIntToScalar(x), SkIntToScalar(y));
|
| + canvas.drawRect(SkRect::MakeXYWH(0, 0, 8, 8), darkPaint);
|
| + canvas.drawRect(SkRect::MakeXYWH(8, 0, 8, 8), lightPaint);
|
| + canvas.drawRect(SkRect::MakeXYWH(0, 8, 8, 8), lightPaint);
|
| + canvas.drawRect(SkRect::MakeXYWH(8, 8, 8, 8), darkPaint);
|
| + canvas.restore();
|
| + }
|
| + }
|
| +
|
| + return bm;
|
| +}
|
| +
|
| class BlurImageFilterBench : public Benchmark {
|
| public:
|
| BlurImageFilterBench(SkScalar sigmaX, SkScalar sigmaY, bool small, bool cropped,
|
| @@ -59,13 +83,13 @@ protected:
|
|
|
| void onDelayedSetup() override {
|
| if (!fInitialized) {
|
| - make_checkerboard();
|
| + fCheckerboard = make_checkerboard(fIsSmall ? FILTER_WIDTH_SMALL : FILTER_WIDTH_LARGE,
|
| + fIsSmall ? FILTER_HEIGHT_SMALL : FILTER_HEIGHT_LARGE);
|
| fInitialized = true;
|
| }
|
| }
|
|
|
| void onDraw(int loops, SkCanvas* canvas) override {
|
| - SkPaint paint;
|
| static const SkScalar kX = 0;
|
| static const SkScalar kY = 0;
|
| const SkRect bmpRect = SkRect::MakeXYWH(kX, kY,
|
| @@ -73,14 +97,15 @@ protected:
|
| SkIntToScalar(fCheckerboard.height()));
|
| const SkImageFilter::CropRect cropRect(bmpRect.makeInset(10.f, 10.f));
|
| const SkImageFilter::CropRect cropRectLarge(bmpRect);
|
| - sk_sp<SkImageFilter> noOpCropped(SkOffsetImageFilter::Make(0, 0, nullptr, &cropRect));
|
|
|
| - SkImageFilter* input = fIsExpanded ? noOpCropped.get() : nullptr;
|
| + sk_sp<SkImageFilter> input = fIsExpanded
|
| + ? SkOffsetImageFilter::Make(0, 0, nullptr, &cropRect)
|
| + : nullptr;
|
|
|
| const SkImageFilter::CropRect* crop =
|
| fIsExpanded ? &cropRectLarge : fIsCropped ? &cropRect : nullptr;
|
| - SkAutoTUnref<SkImageFilter> blur(SkBlurImageFilter::Create(fSigmaX, fSigmaY, input, crop));
|
| - paint.setImageFilter(blur);
|
| + SkPaint paint;
|
| + paint.setImageFilter(SkBlurImageFilter::Make(fSigmaX, fSigmaY, std::move(input), crop));
|
|
|
| for (int i = 0; i < loops; i++) {
|
| canvas->drawBitmap(fCheckerboard, kX, kY, &paint);
|
| @@ -88,28 +113,6 @@ protected:
|
| }
|
|
|
| private:
|
| - void make_checkerboard() {
|
| - const int w = fIsSmall ? FILTER_WIDTH_SMALL : FILTER_WIDTH_LARGE;
|
| - const int h = fIsSmall ? FILTER_HEIGHT_LARGE : FILTER_HEIGHT_LARGE;
|
| - fCheckerboard.allocN32Pixels(w, h);
|
| - SkCanvas canvas(fCheckerboard);
|
| - canvas.clear(0x00000000);
|
| - SkPaint darkPaint;
|
| - darkPaint.setColor(0xFF804020);
|
| - SkPaint lightPaint;
|
| - lightPaint.setColor(0xFF244484);
|
| - for (int y = 0; y < h; y += 16) {
|
| - for (int x = 0; x < w; x += 16) {
|
| - canvas.save();
|
| - canvas.translate(SkIntToScalar(x), SkIntToScalar(y));
|
| - canvas.drawRect(SkRect::MakeXYWH(0, 0, 8, 8), darkPaint);
|
| - canvas.drawRect(SkRect::MakeXYWH(8, 0, 8, 8), lightPaint);
|
| - canvas.drawRect(SkRect::MakeXYWH(0, 8, 8, 8), lightPaint);
|
| - canvas.drawRect(SkRect::MakeXYWH(8, 8, 8, 8), darkPaint);
|
| - canvas.restore();
|
| - }
|
| - }
|
| - }
|
|
|
| SkString fName;
|
| bool fIsSmall;
|
|
|