aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Mike Reed <reed@google.com>2017-07-21 10:54:59 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-07-21 15:18:33 +0000
commit35a5e418b96053bbdebef2cceb33db995f960010 (patch)
tree44a4bc12775022e230ae5b7336f33d4808a6a95e
parent15cac7296e757f1fc86f730f2b5cd1a7dd99e133 (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.cpp6
-rw-r--r--src/core/SkMaskBlurFilter.h3
-rw-r--r--src/effects/SkBlurMask.cpp3
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