blob: 1f0bc4306bf09b97cfc2da06b2154f2a434aee57 [file] [log] [blame]
reed@android.com8a1c16f2008-12-17 15:59:43 +00001#include "SkImageRef_GlobalPool.h"
2#include "SkImageRefPool.h"
3#include "SkThread.h"
4
5extern SkMutex gImageRefMutex;
6
7static SkImageRefPool gGlobalImageRefPool;
8
9SkImageRef_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
18SkImageRef_GlobalPool::~SkImageRef_GlobalPool() {
19 this->mutex()->acquire();
20 gGlobalImageRefPool.detach(this);
21 this->mutex()->release();
22}
23
24bool 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
36void SkImageRef_GlobalPool::onUnlockPixels() {
37 this->INHERITED::onUnlockPixels();
38
39 gGlobalImageRefPool.canLosePixels(this);
40}
41
42SkImageRef_GlobalPool::SkImageRef_GlobalPool(SkFlattenableReadBuffer& buffer)
43 : INHERITED(buffer) {
44 this->mutex()->acquire();
45 gGlobalImageRefPool.addToHead(this);
46 this->mutex()->release();
47}
48
49SkPixelRef* SkImageRef_GlobalPool::Create(SkFlattenableReadBuffer& buffer) {
50 return SkNEW_ARGS(SkImageRef_GlobalPool, (buffer));
51}
52
53static SkPixelRef::Registrar::Registrar reg("SkImageRef_GlobalPool",
54 SkImageRef_GlobalPool::Create);
55
56///////////////////////////////////////////////////////////////////////////////
57// global imagerefpool wrappers
58
59size_t SkImageRef_GlobalPool::GetRAMBudget() {
60 SkAutoMutexAcquire ac(gImageRefMutex);
61 return gGlobalImageRefPool.getRAMBudget();
62}
63
64void SkImageRef_GlobalPool::SetRAMBudget(size_t size) {
65 SkAutoMutexAcquire ac(gImageRefMutex);
66 gGlobalImageRefPool.setRAMBudget(size);
67}
68
69size_t SkImageRef_GlobalPool::GetRAMUsed() {
70 SkAutoMutexAcquire ac(gImageRefMutex);
71 return gGlobalImageRefPool.getRAMUsed();
72}
73
74void SkImageRef_GlobalPool::SetRAMUsed(size_t usage) {
75 SkAutoMutexAcquire ac(gImageRefMutex);
76 gGlobalImageRefPool.setRAMUsed(usage);
77}
78
79void SkImageRef_GlobalPool::DumpPool() {
80 SkAutoMutexAcquire ac(gImageRefMutex);
81 gGlobalImageRefPool.dump();
82}
83