Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(178)

Side by Side Diff: src/core/SkGlyphCache_Globals.h

Issue 1264103003: Parallel cache - preliminary (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: parallel cache 2 Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/core/SkGlyphCache.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2010 Google Inc. 2 * Copyright 2010 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef SkGlyphCache_Globals_DEFINED 8 #ifndef SkGlyphCache_Globals_DEFINED
9 #define SkGlyphCache_Globals_DEFINED 9 #define SkGlyphCache_Globals_DEFINED
10 10
11 #include "SkGlyphCache.h" 11 #include "SkGlyphCache.h"
12 #include "SkMutex.h" 12 #include "SkMutex.h"
13 #include "SkSpinlock.h" 13 #include "SkSpinlock.h"
14 #include "SkTLS.h" 14 #include "SkTLS.h"
15 15
16 #ifndef SK_DEFAULT_FONT_CACHE_COUNT_LIMIT 16 #ifndef SK_DEFAULT_FONT_CACHE_COUNT_LIMIT
17 #define SK_DEFAULT_FONT_CACHE_COUNT_LIMIT 2048 17 #define SK_DEFAULT_FONT_CACHE_COUNT_LIMIT 2048
18 #endif 18 #endif
19 19
20 #ifndef SK_DEFAULT_FONT_CACHE_LIMIT 20 #ifndef SK_DEFAULT_FONT_CACHE_LIMIT
21 #define SK_DEFAULT_FONT_CACHE_LIMIT (2 * 1024 * 1024) 21 #define SK_DEFAULT_FONT_CACHE_LIMIT (2 * 1024 * 1024)
22 #endif 22 #endif
23 23
24 /////////////////////////////////////////////////////////////////////////////// 24 ///////////////////////////////////////////////////////////////////////////////
25 25
26 class SkGlyphCache_Globals { 26 class SkGlyphCache_Globals {
27 public: 27 public:
28 SkGlyphCache_Globals() { 28 SkGlyphCache_Globals() {
29
29 fHead = nullptr; 30 fHead = nullptr;
30 fTotalMemoryUsed = 0; 31 fTotalMemoryUsed.store(0);
31 fCacheSizeLimit = SK_DEFAULT_FONT_CACHE_LIMIT; 32 fCacheSizeLimit = SK_DEFAULT_FONT_CACHE_LIMIT;
32 fCacheCount = 0; 33 fCacheCount = 0;
33 fCacheCountLimit = SK_DEFAULT_FONT_CACHE_COUNT_LIMIT; 34 fCacheCountLimit = SK_DEFAULT_FONT_CACHE_COUNT_LIMIT;
34 } 35 }
35 36
36 ~SkGlyphCache_Globals() { 37 ~SkGlyphCache_Globals() {
37 SkGlyphCache* cache = fHead; 38 SkGlyphCache* cache = fHead;
38 while (cache) { 39 while (cache) {
39 SkGlyphCache* next = cache->fNext; 40 SkGlyphCache* next = cache->fNext;
40 delete cache; 41 delete cache;
41 cache = next; 42 cache = next;
42 } 43 }
43 } 44 }
44 45
45 SkSpinlock fLock; 46 SkSpinlock fLock;
46 47
47 SkGlyphCache* internalGetHead() const { return fHead; } 48 SkGlyphCache* internalGetHead() const { return fHead; }
48 SkGlyphCache* internalGetTail() const; 49 SkGlyphCache* internalGetTail() const;
49 50
50 size_t getTotalMemoryUsed() const { return fTotalMemoryUsed; } 51 size_t getTotalMemoryUsed() const { return fTotalMemoryUsed.load(); }
52 void increaseTotalMemoryUsed(size_t increase) { fTotalMemoryUsed.fetch_add(i ncrease);}
51 int getCacheCountUsed() const { return fCacheCount; } 53 int getCacheCountUsed() const { return fCacheCount; }
52 54
53 #ifdef SK_DEBUG 55 #ifdef SK_DEBUG
54 void validate() const; 56 void validate() const;
55 #else 57 #else
56 void validate() const {} 58 void validate() const {}
57 #endif 59 #endif
58 60
59 int getCacheCountLimit() const { return fCacheCountLimit; } 61 int getCacheCountLimit() const { return fCacheCountLimit; }
60 int setCacheCountLimit(int limit); 62 int setCacheCountLimit(int limit);
61 63
62 size_t getCacheSizeLimit() const { return fCacheSizeLimit; } 64 size_t getCacheSizeLimit() const { return fCacheSizeLimit; }
63 size_t setCacheSizeLimit(size_t limit); 65 size_t setCacheSizeLimit(size_t limit);
64 66
65 // returns true if this cache is over-budget either due to size limit 67 // returns true if this cache is over-budget either due to size limit
66 // or count limit. 68 // or count limit.
67 bool isOverBudget() const { 69 bool isOverBudget() const {
68 return fCacheCount > fCacheCountLimit || 70 return fCacheCount > fCacheCountLimit ||
69 fTotalMemoryUsed > fCacheSizeLimit; 71 fTotalMemoryUsed.load() > fCacheSizeLimit;
70 } 72 }
71 73
72 void purgeAll(); // does not change budget 74 void purgeAll(); // does not change budget
73 75
74 // call when a glyphcache is available for caching (i.e. not in use) 76 // call when a glyphcache is available for caching (i.e. not in use)
75 void attachCacheToHead(SkGlyphCache*); 77 void internalAttachCacheToHead(SkGlyphCache*);
76 78
77 // can only be called when the mutex is already held 79 // can only be called when the mutex is already held
78 void internalDetachCache(SkGlyphCache*); 80 void internalMoveToHead(SkGlyphCache *);
79 void internalAttachCacheToHead(SkGlyphCache*);
80
81 private:
82 SkGlyphCache* fHead;
83 size_t fTotalMemoryUsed;
84 size_t fCacheSizeLimit;
85 int32_t fCacheCountLimit;
86 int32_t fCacheCount;
87 81
88 // Checkout budgets, modulated by the specified min-bytes-needed-to-purge, 82 // Checkout budgets, modulated by the specified min-bytes-needed-to-purge,
89 // and attempt to purge caches to match. 83 // and attempt to purge caches to match.
90 // Returns number of bytes freed. 84 // Returns number of bytes freed.
85 void internalDetachCache(SkGlyphCache* cache);
91 size_t internalPurge(size_t minBytesNeeded = 0); 86 size_t internalPurge(size_t minBytesNeeded = 0);
87
88 private:
89 SkGlyphCache* fHead;
90 SkAtomic<size_t> fTotalMemoryUsed;
91 size_t fCacheSizeLimit;
92 int32_t fCacheCountLimit;
93 int32_t fCacheCount;
94
92 }; 95 };
93 96
94 #endif 97 #endif
OLDNEW
« no previous file with comments | « src/core/SkGlyphCache.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698