Home | History | Annotate | Download | only in lazy
      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
     69