Index: src/core/SkGlyphCache.cpp |
diff --git a/src/core/SkGlyphCache.cpp b/src/core/SkGlyphCache.cpp |
index ec342275cc6f3c6354eb60d0c16eeebcb8d0767b..23f504de1c25ec7e71814c5651a050315125e0e4 100755 |
--- a/src/core/SkGlyphCache.cpp |
+++ b/src/core/SkGlyphCache.cpp |
@@ -425,7 +425,7 @@ size_t SkGlyphCache_Globals::setCacheSizeLimit(size_t newLimit) { |
newLimit = minLimit; |
} |
- SkAutoMutexAcquire ac(fMutex); |
+ SkScopedLock<Lock> ac(*fMutex); |
size_t prevLimit = fCacheSizeLimit; |
fCacheSizeLimit = newLimit; |
@@ -438,7 +438,7 @@ int SkGlyphCache_Globals::setCacheCountLimit(int newCount) { |
newCount = 0; |
} |
- SkAutoMutexAcquire ac(fMutex); |
+ SkScopedLock<Lock> ac(*fMutex); |
int prevCount = fCacheCountLimit; |
fCacheCountLimit = newCount; |
@@ -447,7 +447,7 @@ int SkGlyphCache_Globals::setCacheCountLimit(int newCount) { |
} |
void SkGlyphCache_Globals::purgeAll() { |
- SkAutoMutexAcquire ac(fMutex); |
+ SkScopedLock<Lock> ac(*fMutex); |
this->internalPurge(fTotalMemoryUsed); |
} |
@@ -467,25 +467,25 @@ SkGlyphCache* SkGlyphCache::VisitCache(SkTypeface* typeface, |
SkASSERT(desc); |
SkGlyphCache_Globals& globals = getGlobals(); |
- SkAutoMutexAcquire ac(globals.fMutex); |
SkGlyphCache* cache; |
- bool insideMutex = true; |
- globals.validate(); |
- |
- for (cache = globals.internalGetHead(); cache != NULL; cache = cache->fNext) { |
- if (cache->fDesc->equals(*desc)) { |
- globals.internalDetachCache(cache); |
- goto FOUND_IT; |
+ { |
+ SkScopedLock<SkGlyphCache_Globals::Lock> ac(*globals.fMutex); |
+ |
+ globals.validate(); |
+ |
+ for (cache = globals.internalGetHead(); cache != NULL; cache = cache->fNext) { |
+ if (cache->fDesc->equals(*desc)) { |
+ globals.internalDetachCache(cache); |
+ if (!proc(cache, context)) { |
+ globals.internalAttachCacheToHead(cache); |
+ cache = NULL; |
+ } |
+ return cache; |
+ } |
} |
} |
- /* Release the mutex now, before we create a new entry (which might have |
- side-effects like trying to access the cache/mutex (yikes!) |
- */ |
- ac.release(); // release the mutex now |
- insideMutex = false; // can't use globals anymore |
- |
// Check if we can create a scaler-context before creating the glyphcache. |
// If not, we may have exhausted OS/font resources, so try purging the |
// cache once and try again. |
@@ -501,16 +501,10 @@ SkGlyphCache* SkGlyphCache::VisitCache(SkTypeface* typeface, |
cache = SkNEW_ARGS(SkGlyphCache, (typeface, desc, ctx)); |
} |
-FOUND_IT: |
- |
AutoValidate av(cache); |
if (!proc(cache, context)) { // need to reattach |
- if (insideMutex) { |
- globals.internalAttachCacheToHead(cache); |
- } else { |
- globals.attachCacheToHead(cache); |
- } |
+ globals.attachCacheToHead(cache); |
cache = NULL; |
} |
return cache; |
@@ -524,9 +518,9 @@ void SkGlyphCache::AttachCache(SkGlyphCache* cache) { |
} |
void SkGlyphCache::Dump() { |
- SkGlyphCache_Globals& globals = getGlobals(); |
- SkAutoMutexAcquire ac(globals.fMutex); |
- SkGlyphCache* cache; |
+ SkGlyphCache_Globals& globals = getGlobals(); |
+ SkScopedLock<SkGlyphCache_Globals::Lock> ac(*globals.fMutex); |
+ SkGlyphCache* cache; |
globals.validate(); |
@@ -553,7 +547,7 @@ void SkGlyphCache::Dump() { |
/////////////////////////////////////////////////////////////////////////////// |
void SkGlyphCache_Globals::attachCacheToHead(SkGlyphCache* cache) { |
- SkAutoMutexAcquire ac(fMutex); |
+ SkScopedLock<Lock> ac(*fMutex); |
this->validate(); |
cache->validate(); |