diff options
author | 2017-07-21 10:54:59 -0400 | |
---|---|---|
committer | 2017-07-21 15:18:33 +0000 | |
commit | 35a5e418b96053bbdebef2cceb33db995f960010 (patch) | |
tree | 44a4bc12775022e230ae5b7336f33d4808a6a95e | |
parent | 15cac7296e757f1fc86f730f2b5cd1a7dd99e133 (diff) |
check for no blur and exit early
Bug: skia:
Change-Id: I98c07c5fd77ec67398dd4df12fb6a24aa4ca7731
Reviewed-on: https://skia-review.googlesource.com/25567
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Reviewed-by: Florin Malita <fmalita@chromium.org>
-rw-r--r-- | src/core/SkMaskBlurFilter.cpp | 6 | ||||
-rw-r--r-- | src/core/SkMaskBlurFilter.h | 3 | ||||
-rw-r--r-- | src/effects/SkBlurMask.cpp | 3 |
3 files changed, 11 insertions, 1 deletions
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<uint32_t[]>(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 |