17982fd38da85dbe918666aa14183007063498fe6scroggo@google.com/*
27982fd38da85dbe918666aa14183007063498fe6scroggo@google.com * Copyright 2013 Google Inc.
37982fd38da85dbe918666aa14183007063498fe6scroggo@google.com *
47982fd38da85dbe918666aa14183007063498fe6scroggo@google.com * Use of this source code is governed by a BSD-style license that can be
57982fd38da85dbe918666aa14183007063498fe6scroggo@google.com * found in the LICENSE file.
67982fd38da85dbe918666aa14183007063498fe6scroggo@google.com */
77982fd38da85dbe918666aa14183007063498fe6scroggo@google.com
87982fd38da85dbe918666aa14183007063498fe6scroggo@google.com#ifndef SkPurgeableImageCache_DEFINED
97982fd38da85dbe918666aa14183007063498fe6scroggo@google.com#define SkPurgeableImageCache_DEFINED
107982fd38da85dbe918666aa14183007063498fe6scroggo@google.com
117982fd38da85dbe918666aa14183007063498fe6scroggo@google.com#include "SkImageCache.h"
127982fd38da85dbe918666aa14183007063498fe6scroggo@google.com
137982fd38da85dbe918666aa14183007063498fe6scroggo@google.com#ifdef SK_DEBUG
147982fd38da85dbe918666aa14183007063498fe6scroggo@google.com    #include "SkTDArray.h"
157982fd38da85dbe918666aa14183007063498fe6scroggo@google.com#endif
167982fd38da85dbe918666aa14183007063498fe6scroggo@google.com
177982fd38da85dbe918666aa14183007063498fe6scroggo@google.com/**
187982fd38da85dbe918666aa14183007063498fe6scroggo@google.com *  Implementation for SkImageCache that uses system defined purgeable memory.
197982fd38da85dbe918666aa14183007063498fe6scroggo@google.com */
207982fd38da85dbe918666aa14183007063498fe6scroggo@google.comclass SkPurgeableImageCache : public SkImageCache {
217982fd38da85dbe918666aa14183007063498fe6scroggo@google.com
227982fd38da85dbe918666aa14183007063498fe6scroggo@google.compublic:
238a88bbd8fc321b3402816621ec4971d721197840commit-bot@chromium.org    SK_DECLARE_INST_COUNT(SkPurgeableImageCache)
248a88bbd8fc321b3402816621ec4971d721197840commit-bot@chromium.org
257982fd38da85dbe918666aa14183007063498fe6scroggo@google.com    static SkImageCache* Create();
267982fd38da85dbe918666aa14183007063498fe6scroggo@google.com
27b253071936aa652bfd64bcfbb10a45521df133bcreed@google.com    virtual void* allocAndPinCache(size_t bytes, ID*) SK_OVERRIDE;
28b253071936aa652bfd64bcfbb10a45521df133bcreed@google.com    virtual void* pinCache(ID, SkImageCache::DataStatus*) SK_OVERRIDE;
29b253071936aa652bfd64bcfbb10a45521df133bcreed@google.com    virtual void releaseCache(ID) SK_OVERRIDE;
30b253071936aa652bfd64bcfbb10a45521df133bcreed@google.com    virtual void throwAwayCache(ID) SK_OVERRIDE;
317982fd38da85dbe918666aa14183007063498fe6scroggo@google.com
327982fd38da85dbe918666aa14183007063498fe6scroggo@google.com#ifdef SK_DEBUG
33b253071936aa652bfd64bcfbb10a45521df133bcreed@google.com    virtual MemoryStatus getMemoryStatus(ID) const SK_OVERRIDE;
347982fd38da85dbe918666aa14183007063498fe6scroggo@google.com    virtual void purgeAllUnpinnedCaches() SK_OVERRIDE;
357982fd38da85dbe918666aa14183007063498fe6scroggo@google.com    virtual ~SkPurgeableImageCache();
367982fd38da85dbe918666aa14183007063498fe6scroggo@google.com#endif
377982fd38da85dbe918666aa14183007063498fe6scroggo@google.com
387982fd38da85dbe918666aa14183007063498fe6scroggo@google.comprivate:
397982fd38da85dbe918666aa14183007063498fe6scroggo@google.com    SkPurgeableImageCache();
407982fd38da85dbe918666aa14183007063498fe6scroggo@google.com
417982fd38da85dbe918666aa14183007063498fe6scroggo@google.com#ifdef SK_DEBUG
42b253071936aa652bfd64bcfbb10a45521df133bcreed@google.com    SkTDArray<ID> fRecs;
43b253071936aa652bfd64bcfbb10a45521df133bcreed@google.com    int findRec(ID) const;
447982fd38da85dbe918666aa14183007063498fe6scroggo@google.com#endif
45b253071936aa652bfd64bcfbb10a45521df133bcreed@google.com    void removeRec(ID);
467982fd38da85dbe918666aa14183007063498fe6scroggo@google.com};
477982fd38da85dbe918666aa14183007063498fe6scroggo@google.com#endif // SkPurgeableImageCache_DEFINED
48