AcceleratedCompositingContext.h [plain text]
#ifndef AcceleratedCompositingContext_h
#define AcceleratedCompositingContext_h
#if USE(TEXTURE_MAPPER_GL)
#include <WebCore/FloatRect.h>
#include <WebCore/GLContext.h>
#include <WebCore/GraphicsLayer.h>
#include <WebCore/GraphicsLayerClient.h>
#include <WebCore/IntRect.h>
#include <WebCore/IntSize.h>
#include <WebCore/TextureMapperFPSCounter.h>
#include <WebCore/Timer.h>
class WebView;
class AcceleratedCompositingContext : public WebCore::GraphicsLayerClient {
WTF_MAKE_NONCOPYABLE(AcceleratedCompositingContext);
public:
explicit AcceleratedCompositingContext(WebView&);
virtual ~AcceleratedCompositingContext();
void setRootCompositingLayer(WebCore::GraphicsLayer*);
void setNonCompositedContentsNeedDisplay(const WebCore::IntRect&);
void scheduleLayerFlush();
void resizeRootLayer(const WebCore::IntSize&);
bool enabled();
virtual void paintContents(const WebCore::GraphicsLayer*, WebCore::GraphicsContext&, WebCore::GraphicsLayerPaintingPhase, const WebCore::FloatRect& rectToPaint);
void initialize();
enum CompositePurpose { ForResize, NotForResize };
void compositeLayersToContext(CompositePurpose = NotForResize);
void flushAndRenderLayers();
bool flushPendingLayerChanges();
bool flushPendingLayerChangesSoon();
void scrollNonCompositedContents(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollOffset);
static bool acceleratedCompositingAvailable();
private:
WebView& m_webView;
std::unique_ptr<WebCore::GLContext> m_context;
HWND m_window;
std::unique_ptr<WebCore::GraphicsLayer> m_rootLayer;
std::unique_ptr<WebCore::GraphicsLayer> m_nonCompositedContentLayer;
std::unique_ptr<WebCore::TextureMapper> m_textureMapper;
WebCore::TextureMapperFPSCounter m_fpsCounter;
class LayerFlushTimer : public WebCore::TimerBase {
public:
LayerFlushTimer(AcceleratedCompositingContext& context)
: m_context(context)
{
}
private:
virtual void fired()
{
m_context.layerFlushTimerFired();
}
AcceleratedCompositingContext& m_context;
} m_layerFlushTimer;
void layerFlushTimerFired();
void stopAnyPendingLayerFlush();
bool prepareForRendering();
bool startedAnimation(WebCore::GraphicsLayer*);
};
#endif // TEXTURE_MAPPER_GL
#endif // AcceleratedCompositingContext_h