Home | History | Annotate | Download | only in images
      1 
      2 /*
      3  * Copyright 2008 The Android Open Source Project
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 
      9 
     10 #ifndef SkImageRef_GlobalPool_DEFINED
     11 #define SkImageRef_GlobalPool_DEFINED
     12 
     13 #include "SkImageRef.h"
     14 
     15 class SkImageRef_GlobalPool : public SkImageRef {
     16 public:
     17     // if pool is null, use the global pool
     18     SkImageRef_GlobalPool(SkStream*, SkBitmap::Config, int sampleSize = 1);
     19     virtual ~SkImageRef_GlobalPool();
     20 
     21     // overrides
     22     virtual Factory getFactory() const {
     23         return Create;
     24     }
     25     static SkPixelRef* Create(SkFlattenableReadBuffer&);
     26 
     27     SK_DECLARE_PIXEL_REF_REGISTRAR()
     28 
     29     // API to control the global pool
     30 
     31     /** Return the amount specified as the budget for the cache (in bytes).
     32      */
     33     static size_t GetRAMBudget();
     34 
     35     /** Set a new budget value for the cache.
     36      */
     37     static void SetRAMBudget(size_t);
     38 
     39     /** Return how much ram is currently in use by the global cache.
     40      */
     41     static size_t GetRAMUsed();
     42 
     43     /** Free up (approximately) enough such that the amount used by the cache
     44      is <= the specified amount. Since some images may be "in use", the
     45      amount actually freed may not always result in a ram usage value <=
     46      to the requested amount. In addition, because of the
     47      chunky nature of the cache, the resulting usage may be < the requested
     48      amount.
     49      */
     50     static void SetRAMUsed(size_t usageInBytes);
     51 
     52     static void DumpPool();
     53 
     54 protected:
     55     virtual bool onDecode(SkImageDecoder* codec, SkStream* stream,
     56                           SkBitmap* bitmap, SkBitmap::Config config,
     57                           SkImageDecoder::Mode mode);
     58 
     59     virtual void onUnlockPixels();
     60 
     61     SkImageRef_GlobalPool(SkFlattenableReadBuffer&);
     62 
     63 private:
     64     typedef SkImageRef INHERITED;
     65 };
     66 
     67 #endif
     68