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

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     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  */
     8 #ifndef SkDiscardableMemoryPool_DEFINED
     9 #define SkDiscardableMemoryPool_DEFINED
    11 #include "SkDiscardableMemory.h"
    12 #include "SkTInternalLList.h"
    13 #include "SkThread.h"
    15 class SkPoolDiscardableMemory;
    17 #ifdef SK_DEBUG
    18     #define LAZY_CACHE_STATS 1
    19 #elif !defined(LAZY_CACHE_STATS)
    20     #define LAZY_CACHE_STATS 0
    21 #endif
    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();
    35     virtual SkDiscardableMemory* create(size_t bytes) SK_OVERRIDE;
    37     size_t getRAMUsed();
    38     void setRAMBudget(size_t budget);
    40     /** purges all unlocked DMs */
    41     void dumpPool();
    43     #if LAZY_CACHE_STATS
    44     int          fCacheHits;
    45     int          fCacheMisses;
    46     #endif  // LAZY_CACHE_STATS
    48 private:
    49     SkBaseMutex* fMutex;
    50     size_t       fBudget;
    51     size_t       fUsed;
    52     SkTInternalLList<SkPoolDiscardableMemory> fList;
    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);
    63     friend class SkPoolDiscardableMemory;
    65     typedef SkDiscardableMemory::Factory INHERITED;
    66 };
    68 /**
    69  *  Returns (and creates if needed) a threadsafe global
    70  *  SkDiscardableMemoryPool.
    71  */
    72 SkDiscardableMemoryPool* SkGetGlobalDiscardableMemoryPool();
    74 #if !defined(SK_DEFAULT_GLOBAL_DISCARDABLE_MEMORY_POOL_SIZE)
    75 #define SK_DEFAULT_GLOBAL_DISCARDABLE_MEMORY_POOL_SIZE (128 * 1024 * 1024)
    76 #endif
    78 #endif  // SkDiscardableMemoryPool_DEFINED

mercurial