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(const SkImageInfo&, SkStreamRewindable*,
     19                           int sampleSize = 1);
     20     virtual ~SkImageRef_GlobalPool();
     21 
     22     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkImageRef_GlobalPool)
     23 
     24     // API to control the global pool
     25 
     26     /** Return the amount specified as the budget for the cache (in bytes).
     27      */
     28     static size_t GetRAMBudget();
     29 
     30     /** Set a new budget value for the cache.
     31      */
     32     static void SetRAMBudget(size_t);
     33 
     34     /** Return how much ram is currently in use by the global cache.
     35      */
     36     static size_t GetRAMUsed();
     37 
     38     /** Free up (approximately) enough such that the amount used by the cache
     39      is <= the specified amount. Since some images may be "in use", the
     40      amount actually freed may not always result in a ram usage value <=
     41      to the requested amount. In addition, because of the
     42      chunky nature of the cache, the resulting usage may be < the requested
     43      amount.
     44      */
     45     static void SetRAMUsed(size_t usageInBytes);
     46 
     47     static void DumpPool();
     48 
     49 protected:
     50     virtual bool onDecode(SkImageDecoder* codec, SkStreamRewindable* stream,
     51                           SkBitmap* bitmap, SkBitmap::Config config,
     52                           SkImageDecoder::Mode mode);
     53 
     54     virtual void onUnlockPixels();
     55 
     56     SkImageRef_GlobalPool(SkFlattenableReadBuffer&);
     57 
     58 private:
     59     typedef SkImageRef INHERITED;
     60 };
     61 
     62 #endif
     63