From 69469b570ceb8a5ab7f64778d1b128cd5c472e73 Mon Sep 17 00:00:00 2001 From: "qiankun.miao" Date: Fri, 5 Dec 2014 11:16:25 -0800 Subject: [PATCH] Use size of SkRect as the key for blur mask cache BUG=429409 Review URL: https://codereview.chromium.org/708073002 --- src/core/SkMaskCache.cpp | 18 +++++++++++++----- src/effects/SkBlurMaskFilter.cpp | 4 ++-- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/core/SkMaskCache.cpp b/src/core/SkMaskCache.cpp index e203081..b4b8b4f 100644 --- a/src/core/SkMaskCache.cpp +++ b/src/core/SkMaskCache.cpp @@ -104,19 +104,27 @@ public: , fQuality(quality) { SkASSERT(1 == count || 2 == count); - fRects[0] = SkRect::MakeEmpty(); - fRects[1] = SkRect::MakeEmpty(); + SkIRect ir; + rects[0].roundOut(&ir); + fSizes[0] = SkSize::Make(0, 0); + fSizes[1] = SkSize::Make(0, 0); + fSizes[2] = SkSize::Make(0, 0); + fSizes[3] = SkSize::Make(rects[0].x() - ir.x(), rects[0].y() - ir.y()); for (int i = 0; i < count; i++) { - fRects[i] = rects[i]; + fSizes[i] = SkSize::Make(rects[i].width(), rects[i].height()); } + if (2 == count) { + fSizes[2] = SkSize::Make(rects[0].x() - rects[1].x(), rects[0].y() - rects[1].y()); + } + this->init(&gRectsBlurKeyNamespaceLabel, - sizeof(fSigma) + sizeof(fStyle) + sizeof(fQuality) + sizeof(fRects)); + sizeof(fSigma) + sizeof(fStyle) + sizeof(fQuality) + sizeof(fSizes)); } SkScalar fSigma; int32_t fStyle; int32_t fQuality; - SkRect fRects[2]; + SkSize fSizes[4]; }; struct RectsBlurRec : public SkResourceCache::Rec { diff --git a/src/effects/SkBlurMaskFilter.cpp b/src/effects/SkBlurMaskFilter.cpp index 728ba06..f7174e9 100644 --- a/src/effects/SkBlurMaskFilter.cpp +++ b/src/effects/SkBlurMaskFilter.cpp @@ -551,7 +551,7 @@ SkBlurMaskFilterImpl::filterRectsToNine(const SkRect rects[], int count, } const SkScalar sigma = this->computeXformedSigma(matrix); - if (!find_cached_rects(&patch->fMask, sigma, fBlurStyle, this->getQuality(), rects, count)) { + if (!find_cached_rects(&patch->fMask, sigma, fBlurStyle, this->getQuality(), smallR, count)) { if (count > 1 || !c_analyticBlurNinepatch) { if (!draw_rects_into_mask(smallR, count, &srcM)) { return kFalse_FilterReturn; @@ -568,7 +568,7 @@ SkBlurMaskFilterImpl::filterRectsToNine(const SkRect rects[], int count, return kFalse_FilterReturn; } } - add_cached_rects(patch->fMask, sigma, fBlurStyle, this->getQuality(), rects, count); + add_cached_rects(patch->fMask, sigma, fBlurStyle, this->getQuality(), smallR, count); } patch->fMask.fBounds.offsetTo(0, 0); patch->fOuterRect = dstM.fBounds; -- 2.7.4