LayerTreeHostTextureMapper.h [plain text]
#pragma once
#if USE(GRAPHICS_LAYER_TEXTURE_MAPPER)
#include "CallbackID.h"
#include "LayerTreeContext.h"
#include <WebCore/DisplayRefreshMonitor.h>
#include <WebCore/GLContext.h>
#include <WebCore/GraphicsLayerClient.h>
#include <WebCore/PlatformScreen.h>
#include <WebCore/TextureMapperFPSCounter.h>
#include <WebCore/Timer.h>
#include <wtf/Forward.h>
namespace WebCore {
class GraphicsLayer;
class GraphicsLayerFactory;
class IntRect;
class IntSize;
class Page;
struct ViewportAttributes;
}
namespace WebKit {
class WebPage;
class LayerTreeHost : public WebCore::GraphicsLayerClient {
WTF_MAKE_FAST_ALLOCATED;
public:
explicit LayerTreeHost(WebPage&);
~LayerTreeHost();
const LayerTreeContext& layerTreeContext() const { return m_layerTreeContext; }
void setLayerFlushSchedulingEnabled(bool);
void setShouldNotifyAfterNextScheduledLayerFlush(bool);
void scheduleLayerFlush();
void cancelPendingLayerFlush();
void setRootCompositingLayer(WebCore::GraphicsLayer*);
void setViewOverlayRootLayer(WebCore::GraphicsLayer*);
void setNonCompositedContentsNeedDisplay(const WebCore::IntRect&);
void scrollNonCompositedContents(const WebCore::IntRect&);
void forceRepaint();
bool forceRepaintAsync(CallbackID);
void sizeDidChange(const WebCore::IntSize& newSize);
void pauseRendering();
void resumeRendering();
WebCore::GraphicsLayerFactory* graphicsLayerFactory();
void contentsSizeChanged(const WebCore::IntSize&);
void didChangeViewportAttributes(WebCore::ViewportAttributes&&);
void setIsDiscardable(bool);
void deviceOrPageScaleFactorChanged();
RefPtr<WebCore::DisplayRefreshMonitor> createDisplayRefreshMonitor(WebCore::PlatformDisplayID);
WebCore::PlatformDisplayID displayID() const { return m_displayID; }
private:
void paintContents(const WebCore::GraphicsLayer*, WebCore::GraphicsContext&, const WebCore::FloatRect& rectToPaint, WebCore::GraphicsLayerPaintBehavior) override;
float deviceScaleFactor() const override;
void initialize();
HWND window();
bool enabled();
void compositeLayersToContext();
void flushAndRenderLayers();
bool flushPendingLayerChanges();
void scrollNonCompositedContents(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollOffset);
void layerFlushTimerFired();
bool prepareForRendering();
void applyDeviceScaleFactor();
WebPage& m_webPage;
std::unique_ptr<WebCore::GLContext> m_context;
LayerTreeContext m_layerTreeContext;
WebCore::PlatformDisplayID m_displayID;
RefPtr<WebCore::GraphicsLayer> m_rootLayer;
WebCore::GraphicsLayer* m_rootCompositingLayer { nullptr };
WebCore::GraphicsLayer* m_overlayCompositingLayer { nullptr };
std::unique_ptr<WebCore::TextureMapper> m_textureMapper;
WebCore::TextureMapperFPSCounter m_fpsCounter;
WebCore::Timer m_layerFlushTimer;
};
}
#endif // USE(GRAPHICS_LAYER_TEXTURE_MAPPER)