1 #include "SkImageRef_GlobalPool.h" 2 #include "SkImageRefPool.h" 3 #include "SkThread.h" 4 5 extern SkMutex gImageRefMutex; 6 7 static SkImageRefPool gGlobalImageRefPool; 8 9 SkImageRef_GlobalPool::SkImageRef_GlobalPool(SkStream* stream, 10 SkBitmap::Config config, 11 int sampleSize) 12 : SkImageRef(stream, config, sampleSize) { 13 this->mutex()->acquire(); 14 gGlobalImageRefPool.addToHead(this); 15 this->mutex()->release(); 16 } 17 18 SkImageRef_GlobalPool::~SkImageRef_GlobalPool() { 19 this->mutex()->acquire(); 20 gGlobalImageRefPool.detach(this); 21 this->mutex()->release(); 22 } 23 24 bool SkImageRef_GlobalPool::onDecode(SkImageDecoder* codec, SkStream* stream, 25 SkBitmap* bitmap, SkBitmap::Config config, 26 SkImageDecoder::Mode mode) { 27 if (!this->INHERITED::onDecode(codec, stream, bitmap, config, mode)) { 28 return false; 29 } 30 if (mode == SkImageDecoder::kDecodePixels_Mode) { 31 gGlobalImageRefPool.justAddedPixels(this); 32 } 33 return true; 34 } 35 36 void SkImageRef_GlobalPool::onUnlockPixels() { 37 this->INHERITED::onUnlockPixels(); 38 39 gGlobalImageRefPool.canLosePixels(this); 40 } 41 42 SkImageRef_GlobalPool::SkImageRef_GlobalPool(SkFlattenableReadBuffer& buffer) 43 : INHERITED(buffer) { 44 this->mutex()->acquire(); 45 gGlobalImageRefPool.addToHead(this); 46 this->mutex()->release(); 47 } 48 49 SkPixelRef* SkImageRef_GlobalPool::Create(SkFlattenableReadBuffer& buffer) { 50 return SkNEW_ARGS(SkImageRef_GlobalPool, (buffer)); 51 } 52 53 static SkPixelRef::Registrar reg("SkImageRef_GlobalPool", 54 SkImageRef_GlobalPool::Create); 55 56 /////////////////////////////////////////////////////////////////////////////// 57 // global imagerefpool wrappers 58 59 size_t SkImageRef_GlobalPool::GetRAMBudget() { 60 SkAutoMutexAcquire ac(gImageRefMutex); 61 return gGlobalImageRefPool.getRAMBudget(); 62 } 63 64 void SkImageRef_GlobalPool::SetRAMBudget(size_t size) { 65 SkAutoMutexAcquire ac(gImageRefMutex); 66 gGlobalImageRefPool.setRAMBudget(size); 67 } 68 69 size_t SkImageRef_GlobalPool::GetRAMUsed() { 70 SkAutoMutexAcquire ac(gImageRefMutex); 71 return gGlobalImageRefPool.getRAMUsed(); 72 } 73 74 void SkImageRef_GlobalPool::SetRAMUsed(size_t usage) { 75 SkAutoMutexAcquire ac(gImageRefMutex); 76 gGlobalImageRefPool.setRAMUsed(usage); 77 } 78 79 void SkImageRef_GlobalPool::DumpPool() { 80 SkAutoMutexAcquire ac(gImageRefMutex); 81 gGlobalImageRefPool.dump(); 82 } 83