Home | History | Annotate | Download | only in images
      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::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 
     84