gfx/skia/trunk/src/lazy/SkDiscardableMemoryPool.h

branch
TOR_BUG_3246
changeset 7
129ffea94266
equal deleted inserted replaced
-1:000000000000 0:6ba366534b5f
1 /*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8 #ifndef SkDiscardableMemoryPool_DEFINED
9 #define SkDiscardableMemoryPool_DEFINED
10
11 #include "SkDiscardableMemory.h"
12 #include "SkTInternalLList.h"
13 #include "SkThread.h"
14
15 class SkPoolDiscardableMemory;
16
17 #ifdef SK_DEBUG
18 #define LAZY_CACHE_STATS 1
19 #elif !defined(LAZY_CACHE_STATS)
20 #define LAZY_CACHE_STATS 0
21 #endif
22
23 /**
24 * This non-global pool can be used for unit tests to verify that the
25 * pool works.
26 */
27 class SkDiscardableMemoryPool : public SkDiscardableMemory::Factory {
28 public:
29 /**
30 * Without mutex, will be not be thread safe.
31 */
32 SkDiscardableMemoryPool(size_t budget, SkBaseMutex* mutex = NULL);
33 virtual ~SkDiscardableMemoryPool();
34
35 virtual SkDiscardableMemory* create(size_t bytes) SK_OVERRIDE;
36
37 size_t getRAMUsed();
38 void setRAMBudget(size_t budget);
39
40 /** purges all unlocked DMs */
41 void dumpPool();
42
43 #if LAZY_CACHE_STATS
44 int fCacheHits;
45 int fCacheMisses;
46 #endif // LAZY_CACHE_STATS
47
48 private:
49 SkBaseMutex* fMutex;
50 size_t fBudget;
51 size_t fUsed;
52 SkTInternalLList<SkPoolDiscardableMemory> fList;
53
54 /** Function called to free memory if needed */
55 void dumpDownTo(size_t budget);
56 /** called by SkDiscardableMemoryPool upon destruction */
57 void free(SkPoolDiscardableMemory* dm);
58 /** called by SkDiscardableMemoryPool::lock() */
59 bool lock(SkPoolDiscardableMemory* dm);
60 /** called by SkDiscardableMemoryPool::unlock() */
61 void unlock(SkPoolDiscardableMemory* dm);
62
63 friend class SkPoolDiscardableMemory;
64
65 typedef SkDiscardableMemory::Factory INHERITED;
66 };
67
68 /**
69 * Returns (and creates if needed) a threadsafe global
70 * SkDiscardableMemoryPool.
71 */
72 SkDiscardableMemoryPool* SkGetGlobalDiscardableMemoryPool();
73
74 #if !defined(SK_DEFAULT_GLOBAL_DISCARDABLE_MEMORY_POOL_SIZE)
75 #define SK_DEFAULT_GLOBAL_DISCARDABLE_MEMORY_POOL_SIZE (128 * 1024 * 1024)
76 #endif
77
78 #endif // SkDiscardableMemoryPool_DEFINED

mercurial