From bd7746da97e389c1068333117407b213b378f9db Mon Sep 17 00:00:00 2001 From: mtklein Date: Wed, 9 Jul 2014 07:52:32 -0700 Subject: Remove ability for Release code to call getRefCnt() or getWeakRefCnt(). These getRefCnt() methods are not thread safe, so Skia code should not be calling them. unique() is fine. SkDEBUG code (SkASSERTs) can still call getRefCnt() / getWeakRefCnt(). This adds tools/RefCntIs.{h,cpp}, which lets tests make their assertions in both debug and release modes. BUG=skia:2726 Committed: https://skia.googlesource.com/skia/+/4ae94ffce5ecf1b71cb5e295b68bf4ec9e697443 R=senorblanco@chromium.org, mtklein@google.com, reed@google.com Author: mtklein@chromium.org Review URL: https://codereview.chromium.org/378643003 --- src/core/SkImageFilter.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/core') diff --git a/src/core/SkImageFilter.cpp b/src/core/SkImageFilter.cpp index 8402a55a22..64603b4cb5 100644 --- a/src/core/SkImageFilter.cpp +++ b/src/core/SkImageFilter.cpp @@ -361,7 +361,10 @@ static uint32_t compute_hash(const uint32_t* data, int count) { class CacheImpl : public SkImageFilter::Cache { public: - explicit CacheImpl(int minChildren) : fMinChildren(minChildren) {} + explicit CacheImpl(int minChildren) : fMinChildren(minChildren) { + SkASSERT(fMinChildren <= 2); + } + virtual ~CacheImpl(); bool get(const SkImageFilter* key, SkBitmap* result, SkIPoint* offset) SK_OVERRIDE; void set(const SkImageFilter* key, const SkBitmap& result, const SkIPoint& offset) SK_OVERRIDE; @@ -404,7 +407,10 @@ void CacheImpl::remove(const SkImageFilter* key) { } void CacheImpl::set(const SkImageFilter* key, const SkBitmap& result, const SkIPoint& offset) { - if (key->getRefCnt() >= fMinChildren) { + if (fMinChildren < 2 || !key->unique()) { + // We take !key->unique() as a signal that there are probably at least 2 refs on the key, + // meaning this filter probably has at least two children and is worth caching when + // fMinChildren is 2. If fMinChildren is less than two, we'll just always cache. fData.add(new Value(key, result, offset)); } } -- cgit v1.2.3