From 61010772e59638ff97acb3200a4ec88aa55037a6 Mon Sep 17 00:00:00 2001 From: mtklein Date: Wed, 25 Feb 2015 08:27:41 -0800 Subject: [PATCH] Revert of fAddedToCache doesn't need to be atomic. (patchset #1 id:1 of https://codereview.chromium.org/960573002/) Reason for revert: Yes it does. notifyAddedToCache() must be thread-safe. Original issue's description: > fAddedToCache doesn't need to be atomic. > > It's only ever read or set from non-threadsafe methods. > > BUG=skia: > > Committed: https://skia.googlesource.com/skia/+/fbe0edfec4fed2a09e12b049d527d280f16e75b3 TBR=reed@google.com,mtklein@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=skia: Review URL: https://codereview.chromium.org/959763002 --- include/core/SkPixelRef.h | 4 ++-- src/core/SkPixelRef.cpp | 9 +++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/include/core/SkPixelRef.h b/include/core/SkPixelRef.h index daf6af1..01303e5 100644 --- a/include/core/SkPixelRef.h +++ b/include/core/SkPixelRef.h @@ -248,7 +248,7 @@ public: // Call when this pixelref is part of the key to a resourcecache entry. This allows the cache // to know automatically those entries can be purged when this pixelref is changed or deleted. void notifyAddedToCache() { - fAddedToCache = true; + fAddedToCache.store(true); } protected: @@ -321,7 +321,7 @@ private: mutable SkAtomic fGenerationID; mutable SkAtomic fUniqueGenerationID; - bool fAddedToCache; + SkAtomic fAddedToCache; #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK const uint32_t fStableID; #endif diff --git a/src/core/SkPixelRef.cpp b/src/core/SkPixelRef.cpp index 24ee473..560748c 100644 --- a/src/core/SkPixelRef.cpp +++ b/src/core/SkPixelRef.cpp @@ -100,7 +100,7 @@ SkPixelRef::SkPixelRef(const SkImageInfo& info) this->needsNewGenID(); fIsImmutable = false; fPreLocked = false; - fAddedToCache = false; + fAddedToCache.store(false); } @@ -116,7 +116,7 @@ SkPixelRef::SkPixelRef(const SkImageInfo& info, SkBaseMutex* mutex) this->needsNewGenID(); fIsImmutable = false; fPreLocked = false; - fAddedToCache = false; + fAddedToCache.store(false); } SkPixelRef::~SkPixelRef() { @@ -227,9 +227,10 @@ void SkPixelRef::callGenIDChangeListeners() { fGenIDChangeListeners[i]->onChange(); } - if (fAddedToCache) { + // TODO: SkAtomic could add "old_value = atomic.xchg(new_value)" to make this clearer. + if (fAddedToCache.load()) { SkNotifyBitmapGenIDIsStale(this->getGenerationID()); - fAddedToCache = false; + fAddedToCache.store(false); } } // Listeners get at most one shot, so whether these triggered or not, blow them away. -- 2.7.4