From 35a5e418b96053bbdebef2cceb33db995f960010 Mon Sep 17 00:00:00 2001 From: Mike Reed Date: Fri, 21 Jul 2017 10:54:59 -0400 Subject: check for no blur and exit early Bug: skia: Change-Id: I98c07c5fd77ec67398dd4df12fb6a24aa4ca7731 Reviewed-on: https://skia-review.googlesource.com/25567 Commit-Queue: Mike Reed Reviewed-by: Mike Klein Reviewed-by: Florin Malita --- src/core/SkMaskBlurFilter.cpp | 6 +++++- src/core/SkMaskBlurFilter.h | 3 +++ src/effects/SkBlurMask.cpp | 3 +++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/core/SkMaskBlurFilter.cpp b/src/core/SkMaskBlurFilter.cpp index 0f0286354c..85ed3364ee 100644 --- a/src/core/SkMaskBlurFilter.cpp +++ b/src/core/SkMaskBlurFilter.cpp @@ -70,6 +70,10 @@ SkMaskBlurFilter::SkMaskBlurFilter(double sigmaW, double sigmaH) , fBuffer2{skstd::make_unique_default(bufferSize(2))} { } +bool SkMaskBlurFilter::hasNoBlur() const { + return fInfoW.weight() <= 1 && fInfoH.weight() <= 1; +} + SkIPoint SkMaskBlurFilter::blur(const SkMask& src, SkMask* dst) const { uint64_t weightW = fInfoW.weight(); @@ -146,7 +150,7 @@ SkIPoint SkMaskBlurFilter::blur(const SkMask& src, SkMask* dst) const { } } else { // Copy to dst. No Blur. - + SkASSERT(!"don't call me"); for (size_t y = 0; y < srcH; y++) { std::memcpy(&dst->fImage[y * dst->fRowBytes], &src.fImage[y * src.fRowBytes], dstW); } diff --git a/src/core/SkMaskBlurFilter.h b/src/core/SkMaskBlurFilter.h index 9becadca39..c530488efb 100644 --- a/src/core/SkMaskBlurFilter.h +++ b/src/core/SkMaskBlurFilter.h @@ -46,6 +46,9 @@ public: // height sigmaH. SkMaskBlurFilter(double sigmaW, double sigmaH); + // returns true iff the sigmas will result in an identity mask (no blurring) + bool hasNoBlur() const; + // Given a src SkMask, generate dst SkMask returning the border width and height. SkIPoint blur(const SkMask& src, SkMask* dst) const; diff --git a/src/effects/SkBlurMask.cpp b/src/effects/SkBlurMask.cpp index fe59ab8269..937087e728 100644 --- a/src/effects/SkBlurMask.cpp +++ b/src/effects/SkBlurMask.cpp @@ -590,6 +590,9 @@ bool SkBlurMask::BoxBlur(SkMask* dst, const SkMask& src, } #else SkMaskBlurFilter blurFilter{sigma, sigma}; + if (blurFilter.hasNoBlur()) { + return false; + } border = blurFilter.blur(src, dst); #endif // SK_SUPPORT_LEGACY_MASK_BLUR -- cgit v1.2.3