blob: 43c72b173985231fb452ba8a82eb16dc0a50a03d [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
djsollen@google.com57f49692011-02-23 20:46:31 +000060static SkPixelRef::Registrar reg("SkImageRef_GlobalPool",
61 SkImageRef_GlobalPool::Create);
reed@android.com8a1c16f2008-12-17 15:59:43 +000062
63///////////////////////////////////////////////////////////////////////////////
64// global imagerefpool wrappers
65
66size_t SkImageRef_GlobalPool::GetRAMBudget() {
67 SkAutoMutexAcquire ac(gImageRefMutex);
68 return gGlobalImageRefPool.getRAMBudget();
69}
70
71void SkImageRef_GlobalPool::SetRAMBudget(size_t size) {
72 SkAutoMutexAcquire ac(gImageRefMutex);
73 gGlobalImageRefPool.setRAMBudget(size);
74}
75
76size_t SkImageRef_GlobalPool::GetRAMUsed() {
77 SkAutoMutexAcquire ac(gImageRefMutex);
78 return gGlobalImageRefPool.getRAMUsed();
79}
80
81void SkImageRef_GlobalPool::SetRAMUsed(size_t usage) {
82 SkAutoMutexAcquire ac(gImageRefMutex);
83 gGlobalImageRefPool.setRAMUsed(usage);
84}
85
86void SkImageRef_GlobalPool::DumpPool() {
87 SkAutoMutexAcquire ac(gImageRefMutex);
88 gGlobalImageRefPool.dump();
89}