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 15class SkImageRef_GlobalPool : public SkImageRef { 16public: 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 54protected: 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 63private: 64 typedef SkImageRef INHERITED; 65}; 66 67#endif 68