skia2/include/ports/SkAshmemImageCache.h
skia.committer@gmail.com 58433de862 Sanitizing source files in Skia_Periodic_House_Keeping
git-svn-id: http://skia.googlecode.com/svn/trunk@7839 2bbb7eff-a529-9590-31e7-b0007b416f81
2013-02-23 07:02:45 +00:00

73 lines
1.7 KiB
C++

/*
* Copyright 2013 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkAshmemImageCache_DEFINED
#define SkAshmemImageCache_DEFINED
#include "SkImageCache.h"
#include "SkTDArray.h"
#include "SkTypes.h"
class SkAshmemImageCache : public SkImageCache {
public:
/**
* Get a pointer to the single global instance of SkAshmemImageCache.
*/
static SkAshmemImageCache* GetAshmemImageCache();
virtual void* allocAndPinCache(size_t bytes, intptr_t* ID) SK_OVERRIDE;
virtual void* pinCache(intptr_t ID) SK_OVERRIDE;
virtual void releaseCache(intptr_t ID) SK_OVERRIDE;
virtual void throwAwayCache(intptr_t ID) SK_OVERRIDE;
#ifdef SK_DEBUG
SkImageCache::CacheStatus getCacheStatus(intptr_t ID) const SK_OVERRIDE;
virtual ~SkAshmemImageCache();
#endif
private:
struct AshmemRec {
int fFD;
void* fAddr;
size_t fSize;
#ifdef SK_DEBUG
bool fPinned;
static int Compare(const AshmemRec*, const AshmemRec*);
#endif
};
/**
* Constructor is private. The correct way to get this cache is through
* GetAshmemImageCache, so that all callers can get the single global.
*/
SkAshmemImageCache();
#ifdef SK_DEBUG
// Stores a list of AshmemRecs to track deletion.
SkTDArray<AshmemRec*> fRecs;
/**
* Debug only function to add an AshmemRec to the list.
*/
void appendRec(AshmemRec*);
/**
* Return the index of AshmemRec.
*/
int findRec(const AshmemRec*) const;
#endif
/**
* Deletes AshmemRec. In debug, also removes from the list.
*/
void removeRec(AshmemRec*);
};
#endif // SkAshmemImageCache_DEFINED