/* * 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. */ static sk_sp<SkDiscardableMemoryPool> Make(size_t size); }; /** * 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