diff options
Diffstat (limited to 'gfx/skia/skia/src/lazy/SkDiscardableMemoryPool.h')
-rw-r--r-- | gfx/skia/skia/src/lazy/SkDiscardableMemoryPool.h | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/gfx/skia/skia/src/lazy/SkDiscardableMemoryPool.h b/gfx/skia/skia/src/lazy/SkDiscardableMemoryPool.h new file mode 100644 index 000000000..92ba48bcb --- /dev/null +++ b/gfx/skia/skia/src/lazy/SkDiscardableMemoryPool.h @@ -0,0 +1,69 @@ +/* + * Copyright 2013 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkDiscardableMemoryPool_DEFINED +#define SkDiscardableMemoryPool_DEFINED + +#include "SkDiscardableMemory.h" +#include "SkMutex.h" + +#ifndef SK_LAZY_CACHE_STATS + #ifdef SK_DEBUG + #define SK_LAZY_CACHE_STATS 1 + #else + #define SK_LAZY_CACHE_STATS 0 + #endif +#endif + +/** + * An implementation of Discardable Memory that manages a fixed-size + * budget of memory. When the allocated memory exceeds this size, + * unlocked blocks of memory are purged. If all memory is locked, it + * can exceed the memory-use budget. + */ +class SkDiscardableMemoryPool : public SkDiscardableMemory::Factory { +public: + virtual ~SkDiscardableMemoryPool() { } + + virtual size_t getRAMUsed() = 0; + virtual void setRAMBudget(size_t budget) = 0; + virtual size_t getRAMBudget() = 0; + + /** purges all unlocked DMs */ + virtual void dumpPool() = 0; + + #if SK_LAZY_CACHE_STATS + /** + * These two values are a count of the number of successful and + * failed calls to SkDiscardableMemory::lock() for all DMs managed + * by this pool. + */ + virtual int getCacheHits() = 0; + virtual int getCacheMisses() = 0; + virtual void resetCacheHitsAndMisses() = 0; + #endif + + /** + * This non-global pool can be used for unit tests to verify that + * the pool works. + * Without mutex, will be not be thread safe. + */ + static SkDiscardableMemoryPool* Create( + size_t size, SkBaseMutex* mutex = nullptr); +}; + +/** + * Returns (and creates if needed) a threadsafe global + * SkDiscardableMemoryPool. + */ +SkDiscardableMemoryPool* SkGetGlobalDiscardableMemoryPool(); + +#if !defined(SK_DEFAULT_GLOBAL_DISCARDABLE_MEMORY_POOL_SIZE) +#define SK_DEFAULT_GLOBAL_DISCARDABLE_MEMORY_POOL_SIZE (128 * 1024 * 1024) +#endif + +#endif // SkDiscardableMemoryPool_DEFINED |