DrawingAreaCoordinatedGraphics.h [plain text]
#pragma once
#include "DrawingArea.h"
#include <WebCore/Region.h>
#include <wtf/RunLoop.h>
namespace WebCore {
class GraphicsContext;
}
namespace WebKit {
class ShareableBitmap;
class UpdateInfo;
class DrawingAreaCoordinatedGraphics final : public DrawingArea {
public:
DrawingAreaCoordinatedGraphics(WebPage&, const WebPageCreationParameters&);
virtual ~DrawingAreaCoordinatedGraphics();
private:
void setNeedsDisplay() override;
void setNeedsDisplayInRect(const WebCore::IntRect&) override;
void scroll(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollDelta) override;
void forceRepaint() override;
bool forceRepaintAsync(CallbackID) override;
void setLayerTreeStateIsFrozen(bool) override;
bool layerTreeStateIsFrozen() const override { return m_layerTreeStateIsFrozen; }
void updatePreferences(const WebPreferencesStore&) override;
void enablePainting() override;
void mainFrameContentSizeChanged(const WebCore::IntSize&) override;
#if USE(COORDINATED_GRAPHICS) || USE(TEXTURE_MAPPER)
void deviceOrPageScaleFactorChanged() override;
void didChangeViewportAttributes(WebCore::ViewportAttributes&&) override;
#endif
bool supportsAsyncScrolling() const override;
WebCore::GraphicsLayerFactory* graphicsLayerFactory() override;
void setRootCompositingLayer(WebCore::GraphicsLayer*) override;
void scheduleRenderingUpdate() override;
void scheduleImmediateRenderingUpdate() override { scheduleRenderingUpdate(); };
#if USE(COORDINATED_GRAPHICS)
void layerHostDidFlushLayers() override;
#endif
RefPtr<WebCore::DisplayRefreshMonitor> createDisplayRefreshMonitor(WebCore::PlatformDisplayID) override;
void activityStateDidChange(OptionSet<WebCore::ActivityState::Flag>, ActivityStateChangeID, const Vector<CallbackID>& ) override;
void attachViewOverlayGraphicsLayer(WebCore::GraphicsLayer*) override;
void updateBackingStoreState(uint64_t backingStoreStateID, bool respondImmediately, float deviceScaleFactor, const WebCore::IntSize&, const WebCore::IntSize& scrollOffset) override;
void didUpdate() override;
void sendDidUpdateBackingStoreState();
void exitAcceleratedCompositingModeSoon();
bool exitAcceleratedCompositingModePending() const { return m_exitCompositingTimer.isActive(); }
void discardPreviousLayerTreeHost();
void suspendPainting();
void resumePainting();
void enterAcceleratedCompositingMode(WebCore::GraphicsLayer*);
void exitAcceleratedCompositingMode();
void scheduleDisplay();
void displayTimerFired();
void display();
void display(UpdateInfo&);
uint64_t m_backingStoreStateID { 0 };
bool m_isPaintingEnabled { false };
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<DrawingAreaCoordinatedGraphics> m_exitCompositingTimer;
std::unique_ptr<LayerTreeHost> m_layerTreeHost;
std::unique_ptr<LayerTreeHost> m_previousLayerTreeHost;
RunLoop::Timer<DrawingAreaCoordinatedGraphics> m_discardPreviousLayerTreeHostTimer;
WebCore::Region m_dirtyRegion;
WebCore::IntRect m_scrollRect;
WebCore::IntSize m_scrollOffset;
bool m_isWaitingForDidUpdate { false };
bool m_alwaysUseCompositing { false };
bool m_supportsAsyncScrolling { true };
bool m_forceRepaintAfterBackingStoreStateUpdate { false };
RunLoop::Timer<DrawingAreaCoordinatedGraphics> m_displayTimer;
};
}