diff options
author | initial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-07-27 00:09:42 +0000 |
---|---|---|
committer | initial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-07-27 00:09:42 +0000 |
commit | ae2c20f398933a9e86c387dcc465ec0f71065ffc (patch) | |
tree | de668b1411e2ee0b4e49b6d8f8b68183134ac990 /skia/images/SkImageRef_GlobalPool.cpp | |
parent | 09911bf300f1a419907a9412154760efd0b7abc3 (diff) | |
download | chromium_src-ae2c20f398933a9e86c387dcc465ec0f71065ffc.zip chromium_src-ae2c20f398933a9e86c387dcc465ec0f71065ffc.tar.gz chromium_src-ae2c20f398933a9e86c387dcc465ec0f71065ffc.tar.bz2 |
Add skia to the repository.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'skia/images/SkImageRef_GlobalPool.cpp')
-rw-r--r-- | skia/images/SkImageRef_GlobalPool.cpp | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/skia/images/SkImageRef_GlobalPool.cpp b/skia/images/SkImageRef_GlobalPool.cpp new file mode 100644 index 0000000..1f0bc43 --- /dev/null +++ b/skia/images/SkImageRef_GlobalPool.cpp @@ -0,0 +1,83 @@ +#include "SkImageRef_GlobalPool.h" +#include "SkImageRefPool.h" +#include "SkThread.h" + +extern SkMutex gImageRefMutex; + +static SkImageRefPool gGlobalImageRefPool; + +SkImageRef_GlobalPool::SkImageRef_GlobalPool(SkStream* stream, + SkBitmap::Config config, + int sampleSize) + : SkImageRef(stream, config, sampleSize) { + this->mutex()->acquire(); + gGlobalImageRefPool.addToHead(this); + this->mutex()->release(); +} + +SkImageRef_GlobalPool::~SkImageRef_GlobalPool() { + this->mutex()->acquire(); + gGlobalImageRefPool.detach(this); + this->mutex()->release(); +} + +bool SkImageRef_GlobalPool::onDecode(SkImageDecoder* codec, SkStream* stream, + SkBitmap* bitmap, SkBitmap::Config config, + SkImageDecoder::Mode mode) { + if (!this->INHERITED::onDecode(codec, stream, bitmap, config, mode)) { + return false; + } + if (mode == SkImageDecoder::kDecodePixels_Mode) { + gGlobalImageRefPool.justAddedPixels(this); + } + return true; +} + +void SkImageRef_GlobalPool::onUnlockPixels() { + this->INHERITED::onUnlockPixels(); + + gGlobalImageRefPool.canLosePixels(this); +} + +SkImageRef_GlobalPool::SkImageRef_GlobalPool(SkFlattenableReadBuffer& buffer) + : INHERITED(buffer) { + this->mutex()->acquire(); + gGlobalImageRefPool.addToHead(this); + this->mutex()->release(); +} + +SkPixelRef* SkImageRef_GlobalPool::Create(SkFlattenableReadBuffer& buffer) { + return SkNEW_ARGS(SkImageRef_GlobalPool, (buffer)); +} + +static SkPixelRef::Registrar::Registrar reg("SkImageRef_GlobalPool", + SkImageRef_GlobalPool::Create); + +/////////////////////////////////////////////////////////////////////////////// +// global imagerefpool wrappers + +size_t SkImageRef_GlobalPool::GetRAMBudget() { + SkAutoMutexAcquire ac(gImageRefMutex); + return gGlobalImageRefPool.getRAMBudget(); +} + +void SkImageRef_GlobalPool::SetRAMBudget(size_t size) { + SkAutoMutexAcquire ac(gImageRefMutex); + gGlobalImageRefPool.setRAMBudget(size); +} + +size_t SkImageRef_GlobalPool::GetRAMUsed() { + SkAutoMutexAcquire ac(gImageRefMutex); + return gGlobalImageRefPool.getRAMUsed(); +} + +void SkImageRef_GlobalPool::SetRAMUsed(size_t usage) { + SkAutoMutexAcquire ac(gImageRefMutex); + gGlobalImageRefPool.setRAMUsed(usage); +} + +void SkImageRef_GlobalPool::DumpPool() { + SkAutoMutexAcquire ac(gImageRefMutex); + gGlobalImageRefPool.dump(); +} + |