11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/*
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2011 Google Inc.
41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */
80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifndef SkImageRefPool_DEFINED
90910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkImageRefPool_DEFINED
100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkTypes.h"
120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkImageRef;
140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkImageRef_GlobalPool;
150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkImageRefPool {
170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic:
180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkImageRefPool();
190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    ~SkImageRefPool();
200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    size_t  getRAMBudget() const { return fRAMBudget; }
220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    void    setRAMBudget(size_t);
230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    size_t  getRAMUsed() const { return fRAMUsed; }
250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    void    setRAMUsed(size_t limit);
260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    void addToHead(SkImageRef*);
280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    void addToTail(SkImageRef*);
290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    void detach(SkImageRef*);
300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    void dump() const;
320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate:
340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    size_t fRAMBudget;
350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    size_t fRAMUsed;
360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    int         fCount;
380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkImageRef* fHead, *fTail;
390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    int computeCount() const;
410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    friend class SkImageRef_GlobalPool;
430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    void justAddedPixels(SkImageRef*);
450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    void canLosePixels(SkImageRef*);
460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    void purgeIfNeeded();
470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project};
480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
51