BitmapTexturePool.h [plain text]
#ifndef BitmapTexturePool_h
#define BitmapTexturePool_h
#if USE(OPENGL_ES_2)
#define TEXMAP_OPENGL_ES_2
#endif
#include "BitmapTexture.h"
#include "IntRect.h"
#include "IntSize.h"
#include "Timer.h"
#include <wtf/CurrentTime.h>
#if USE(TEXTURE_MAPPER_GL)
#include "GraphicsContext3D.h"
#endif
namespace WebCore {
class TextureMapper;
struct BitmapTexturePoolEntry {
explicit BitmapTexturePoolEntry(PassRefPtr<BitmapTexture> texture)
: m_texture(texture)
{ }
inline void markUsed() { m_timeLastUsed = monotonicallyIncreasingTime(); }
static bool compareTimeLastUsed(const BitmapTexturePoolEntry& a, const BitmapTexturePoolEntry& b)
{
return a.m_timeLastUsed - b.m_timeLastUsed > 0;
}
RefPtr<BitmapTexture> m_texture;
double m_timeLastUsed;
};
class BitmapTexturePool {
WTF_MAKE_NONCOPYABLE(BitmapTexturePool);
WTF_MAKE_FAST_ALLOCATED;
public:
BitmapTexturePool();
#if USE(TEXTURE_MAPPER_GL)
explicit BitmapTexturePool(PassRefPtr<GraphicsContext3D>);
#endif
PassRefPtr<BitmapTexture> acquireTexture(const IntSize&);
private:
void scheduleReleaseUnusedTextures();
void releaseUnusedTexturesTimerFired();
PassRefPtr<BitmapTexture> createTexture();
#if USE(TEXTURE_MAPPER_GL)
RefPtr<GraphicsContext3D> m_context3D;
#endif
Vector<BitmapTexturePoolEntry> m_textures;
Timer m_releaseUnusedTexturesTimer;
};
}
#endif // BitmapTexturePool_h