Index: src/core/SkGlyphCache_Globals.h |
diff --git a/src/core/SkGlyphCache_Globals.h b/src/core/SkGlyphCache_Globals.h |
index 8e0ceb55c4a0939bb3f151b89e03fa12cbc7b629..c3fbb0126dde01cc804170eb32ea05600f10a250 100644 |
--- a/src/core/SkGlyphCache_Globals.h |
+++ b/src/core/SkGlyphCache_Globals.h |
@@ -27,7 +27,7 @@ class SkGlyphCache_Globals { |
public: |
SkGlyphCache_Globals() { |
fHead = NULL; |
- fTotalMemoryUsed = 0; |
+ fTotalMemoryUsed.store(0); |
fCacheSizeLimit = SK_DEFAULT_FONT_CACHE_LIMIT; |
fCacheCount = 0; |
fCacheCountLimit = SK_DEFAULT_FONT_CACHE_COUNT_LIMIT; |
@@ -47,7 +47,8 @@ public: |
SkGlyphCache* internalGetHead() const { return fHead; } |
SkGlyphCache* internalGetTail() const; |
- size_t getTotalMemoryUsed() const { return fTotalMemoryUsed; } |
+ size_t getTotalMemoryUsed() const { return fTotalMemoryUsed.load(); } |
+ void increaseTotalMemoryUsed(size_t increase) { fTotalMemoryUsed.fetch_add(increase);} |
int getCacheCountUsed() const { return fCacheCount; } |
#ifdef SK_DEBUG |
@@ -66,7 +67,7 @@ public: |
// or count limit. |
bool isOverBudget() const { |
return fCacheCount > fCacheCountLimit || |
- fTotalMemoryUsed > fCacheSizeLimit; |
+ fTotalMemoryUsed.load() > fCacheSizeLimit; |
} |
void purgeAll(); // does not change budget |
@@ -75,20 +76,21 @@ public: |
void attachCacheToHead(SkGlyphCache*); |
// can only be called when the mutex is already held |
- void internalDetachCache(SkGlyphCache*); |
- void internalAttachCacheToHead(SkGlyphCache*); |
+ //void internalDetachCache(SkGlyphCache*); |
+ void internalMoveToHead(SkGlyphCache *); |
+ // Checkout budgets, modulated by the specified min-bytes-needed-to-purge, |
+ // and attempt to purge caches to match. |
+ // Returns number of bytes freed. |
+ void internalDetachCache(SkGlyphCache* cache); |
+ size_t internalPurge(size_t minBytesNeeded = 0); |
private: |
SkGlyphCache* fHead; |
- size_t fTotalMemoryUsed; |
+ SkAtomic<size_t> fTotalMemoryUsed; |
size_t fCacheSizeLimit; |
int32_t fCacheCountLimit; |
int32_t fCacheCount; |
- // Checkout budgets, modulated by the specified min-bytes-needed-to-purge, |
- // and attempt to purge caches to match. |
- // Returns number of bytes freed. |
- size_t internalPurge(size_t minBytesNeeded = 0); |
}; |
#endif |