AcceleratedDrawingArea.h [plain text]
#pragma once
#include "DrawingArea.h"
#include <wtf/RunLoop.h>
namespace WebKit {
class LayerTreeHost;
class AcceleratedDrawingArea : public DrawingArea {
public:
AcceleratedDrawingArea(WebPage&, const WebPageCreationParameters&);
virtual ~AcceleratedDrawingArea();
protected:
void setNeedsDisplay() override;
void setNeedsDisplayInRect(const WebCore::IntRect&) override;
void scroll(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollDelta) override;
void pageBackgroundTransparencyChanged() override;
void setLayerTreeStateIsFrozen(bool) override;
bool layerTreeStateIsFrozen() const override { return m_layerTreeStateIsFrozen; }
LayerTreeHost* layerTreeHost() const override { return m_layerTreeHost.get(); }
void forceRepaint() override;
bool forceRepaintAsync(uint64_t callbackID) override;
void setPaintingEnabled(bool) override;
void updatePreferences(const WebPreferencesStore&) override;
void mainFrameContentSizeChanged(const WebCore::IntSize&) override;
WebCore::GraphicsLayerFactory* graphicsLayerFactory() override;
void setRootCompositingLayer(WebCore::GraphicsLayer*) override;
void scheduleCompositingLayerFlush() override;
void scheduleCompositingLayerFlushImmediately() override;
#if USE(COORDINATED_GRAPHICS_MULTIPROCESS)
void didReceiveCoordinatedLayerTreeHostMessage(IPC::Connection&, IPC::Decoder&) override;
#endif
#if USE(TEXTURE_MAPPER_GL) && PLATFORM(GTK) && PLATFORM(X11) && !USE(REDIRECTED_XCOMPOSITE_WINDOW)
void setNativeSurfaceHandleForCompositing(uint64_t) override;
void destroyNativeSurfaceHandleForCompositing(bool&) override;
#endif
void activityStateDidChange(WebCore::ActivityState::Flags, bool , const Vector<uint64_t>& ) override;
void attachViewOverlayGraphicsLayer(WebCore::Frame*, WebCore::GraphicsLayer*) override;
void layerHostDidFlushLayers() override;
void updateBackingStoreState(uint64_t backingStoreStateID, bool respondImmediately, float deviceScaleFactor, const WebCore::IntSize&, const WebCore::IntSize& scrollOffset) override;
void exitAcceleratedCompositingModeSoon();
bool exitAcceleratedCompositingModePending() const { return m_exitCompositingTimer.isActive(); }
virtual void suspendPainting();
virtual void resumePainting();
virtual void sendDidUpdateBackingStoreState();
virtual void didUpdateBackingStoreState() { }
virtual void enterAcceleratedCompositingMode(WebCore::GraphicsLayer*);
virtual void exitAcceleratedCompositingMode() { }
uint64_t m_backingStoreStateID { 0 };
bool m_isPaintingEnabled { true };
bool m_inUpdateBackingStoreState { false };
bool m_shouldSendDidUpdateBackingStoreState { false };
bool m_compositingAccordingToProxyMessages { false };
bool m_layerTreeStateIsFrozen { false };
bool m_wantsToExitAcceleratedCompositingMode { false };
bool m_isPaintingSuspended { false };
RunLoop::Timer<AcceleratedDrawingArea> m_exitCompositingTimer;
RefPtr<LayerTreeHost> m_layerTreeHost;
};
}