
/*
 * Copyright 2011 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */
#ifndef SkImageRefPool_DEFINED
#define SkImageRefPool_DEFINED

#include "SkTypes.h"

class SkImageRef;
class SkImageRef_GlobalPool;

class SkImageRefPool {
public:
    SkImageRefPool();
    ~SkImageRefPool();

    size_t  getRAMBudget() const { return fRAMBudget; }
    void    setRAMBudget(size_t);

    size_t  getRAMUsed() const { return fRAMUsed; }
    void    setRAMUsed(size_t limit);

    void addToHead(SkImageRef*);
    void addToTail(SkImageRef*);
    void detach(SkImageRef*);

    void dump() const;

private:
    size_t fRAMBudget;
    size_t fRAMUsed;

    int         fCount;
    SkImageRef* fHead, *fTail;

    int computeCount() const;

    friend class SkImageRef_GlobalPool;

    void justAddedPixels(SkImageRef*);
    void canLosePixels(SkImageRef*);
    void purgeIfNeeded();
};

#endif
