Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / skia / src / lazy / SkDiscardableMemoryPool.h
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
13 #ifndef SK_LAZY_CACHE_STATS
14     #ifdef SK_DEBUG
15         #define SK_LAZY_CACHE_STATS 1
16     #else
17         #define SK_LAZY_CACHE_STATS 0
18     #endif
19 #endif
20
21 /**
22  *  An implementation of Discardable Memory that manages a fixed-size
23  *  budget of memory.  When the allocated memory exceeds this size,
24  *  unlocked blocks of memory are purged.  If all memory is locked, it
25  *  can exceed the memory-use budget.
26  */
27 class SkDiscardableMemoryPool : public SkDiscardableMemory::Factory {
28 public:
29     virtual ~SkDiscardableMemoryPool() { }
30
31     virtual size_t getRAMUsed() = 0;
32     virtual void setRAMBudget(size_t budget) = 0;
33     virtual size_t getRAMBudget() = 0;
34
35     /** purges all unlocked DMs */
36     virtual void dumpPool() = 0;
37
38     #if SK_LAZY_CACHE_STATS
39     /**
40      * These two values are a count of the number of successful and
41      * failed calls to SkDiscardableMemory::lock() for all DMs managed
42      * by this pool.
43      */
44     virtual int getCacheHits() = 0;
45     virtual int getCacheMisses() = 0;
46     virtual void resetCacheHitsAndMisses() = 0;
47     #endif
48
49     /**
50      *  This non-global pool can be used for unit tests to verify that
51      *  the pool works.
52      *  Without mutex, will be not be thread safe.
53      */
54     static SkDiscardableMemoryPool* Create(
55             size_t size, SkBaseMutex* mutex = NULL);
56 };
57
58 /**
59  *  Returns (and creates if needed) a threadsafe global
60  *  SkDiscardableMemoryPool.
61  */
62 SkDiscardableMemoryPool* SkGetGlobalDiscardableMemoryPool();
63
64 #if !defined(SK_DEFAULT_GLOBAL_DISCARDABLE_MEMORY_POOL_SIZE)
65 #define SK_DEFAULT_GLOBAL_DISCARDABLE_MEMORY_POOL_SIZE (128 * 1024 * 1024)
66 #endif
67
68 #endif  // SkDiscardableMemoryPool_DEFINED