blob: 6ea42c1195fe979bc375ea8f3583b055012e217a [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001
2/*
3 * Copyright 2011 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
reed@android.com8a1c16f2008-12-17 15:59:43 +00008#include "SkImageRef_GlobalPool.h"
9#include "SkImageRefPool.h"
10#include "SkThread.h"
11
12extern SkMutex gImageRefMutex;
13
14static SkImageRefPool gGlobalImageRefPool;
15
16SkImageRef_GlobalPool::SkImageRef_GlobalPool(SkStream* stream,
17 SkBitmap::Config config,
18 int sampleSize)
19 : SkImageRef(stream, config, sampleSize) {
20 this->mutex()->acquire();
21 gGlobalImageRefPool.addToHead(this);
22 this->mutex()->release();
23}
24
25SkImageRef_GlobalPool::~SkImageRef_GlobalPool() {
26 this->mutex()->acquire();
27 gGlobalImageRefPool.detach(this);
28 this->mutex()->release();
29}
30
31bool SkImageRef_GlobalPool::onDecode(SkImageDecoder* codec, SkStream* stream,
32 SkBitmap* bitmap, SkBitmap::Config config,
33 SkImageDecoder::Mode mode) {
34 if (!this->INHERITED::onDecode(codec, stream, bitmap, config, mode)) {
35 return false;
36 }
37 if (mode == SkImageDecoder::kDecodePixels_Mode) {
38 gGlobalImageRefPool.justAddedPixels(this);
39 }
40 return true;
41}
42
43void SkImageRef_GlobalPool::onUnlockPixels() {
44 this->INHERITED::onUnlockPixels();
45
46 gGlobalImageRefPool.canLosePixels(this);
47}
48
49SkImageRef_GlobalPool::SkImageRef_GlobalPool(SkFlattenableReadBuffer& buffer)
50 : INHERITED(buffer) {
51 this->mutex()->acquire();
52 gGlobalImageRefPool.addToHead(this);
53 this->mutex()->release();
54}
55
56SkPixelRef* SkImageRef_GlobalPool::Create(SkFlattenableReadBuffer& buffer) {
57 return SkNEW_ARGS(SkImageRef_GlobalPool, (buffer));
58}
59
caryclark@google.comd26147a2011-12-15 14:16:43 +000060SK_DEFINE_PIXEL_REF_REGISTRAR(SkImageRef_GlobalPool)
reed@android.com8a1c16f2008-12-17 15:59:43 +000061
62///////////////////////////////////////////////////////////////////////////////
63// global imagerefpool wrappers
64
65size_t SkImageRef_GlobalPool::GetRAMBudget() {
66 SkAutoMutexAcquire ac(gImageRefMutex);
67 return gGlobalImageRefPool.getRAMBudget();
68}
69
70void SkImageRef_GlobalPool::SetRAMBudget(size_t size) {
71 SkAutoMutexAcquire ac(gImageRefMutex);
72 gGlobalImageRefPool.setRAMBudget(size);
73}
74
75size_t SkImageRef_GlobalPool::GetRAMUsed() {
76 SkAutoMutexAcquire ac(gImageRefMutex);
77 return gGlobalImageRefPool.getRAMUsed();
78}
79
80void SkImageRef_GlobalPool::SetRAMUsed(size_t usage) {
81 SkAutoMutexAcquire ac(gImageRefMutex);
82 gGlobalImageRefPool.setRAMUsed(usage);
83}
84
85void SkImageRef_GlobalPool::DumpPool() {
86 SkAutoMutexAcquire ac(gImageRefMutex);
87 gGlobalImageRefPool.dump();
88}