2011-05-04 Simon Fraser <simon.fraser@apple.com>
[WebKit-https.git] / Source / WebKit2 / WebProcess / WebPage / DrawingAreaImpl.h
index 2bd5562..80b2828 100644 (file)
@@ -37,9 +37,12 @@ class UpdateInfo;
 
 class DrawingAreaImpl : public DrawingArea {
 public:
-    static PassRefPtr<DrawingAreaImpl> create(WebPage*, const WebPageCreationParameters&);
+    static PassOwnPtr<DrawingAreaImpl> create(WebPage*, const WebPageCreationParameters&);
     virtual ~DrawingAreaImpl();
 
+    void setLayerHostNeedsDisplay();
+    void layerHostDidFlushLayers();
+
 private:
     DrawingAreaImpl(WebPage*, const WebPageCreationParameters&);
 
@@ -47,36 +50,63 @@ private:
     virtual void setNeedsDisplay(const WebCore::IntRect&);
     virtual void scroll(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollOffset);
     virtual void forceRepaint();
-    virtual void attachCompositingContext();
-    virtual void detachCompositingContext();
+
+    virtual void didInstallPageOverlay();
+    virtual void didUninstallPageOverlay();
+    virtual void setPageOverlayNeedsDisplay(const WebCore::IntRect&);
+    
     virtual void setRootCompositingLayer(WebCore::GraphicsLayer*);
     virtual void scheduleCompositingLayerSync();
     virtual void syncCompositingLayers();
     virtual void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
 
     // CoreIPC message handlers.
-    virtual void setSize(const WebCore::IntSize&);
+    virtual void updateBackingStoreState(uint64_t backingStoreStateID, bool respondImmediately, const WebCore::IntSize&, const WebCore::IntSize& scrollOffset);
     virtual void didUpdate();
     virtual void suspendPainting();
     virtual void resumePainting();
 
+    void sendDidUpdateBackingStoreState();
+
+    void enterAcceleratedCompositingMode(WebCore::GraphicsLayer*);
+    void exitAcceleratedCompositingModeSoon();
+    bool exitAcceleratedCompositingModePending() const { return m_exitCompositingTimer.isActive(); }
+    void exitAcceleratedCompositingMode();
+
     void scheduleDisplay();
+    void displayTimerFired();
     void display();
     void display(UpdateInfo&);
 
+    uint64_t m_backingStoreStateID;
+
     Region m_dirtyRegion;
     WebCore::IntRect m_scrollRect;
     WebCore::IntSize m_scrollOffset;
-    
+
+    // Whether we're currently processing an UpdateBackingStoreState message.
+    bool m_inUpdateBackingStoreState;
+
+    // When true, we should send an UpdateBackingStoreState message instead of any other messages
+    // we normally send to the UI process.
+    bool m_shouldSendDidUpdateBackingStoreState;
+
     // Whether we're waiting for a DidUpdate message. Used for throttling paints so that the 
     // web process won't paint more frequent than the UI process can handle.
     bool m_isWaitingForDidUpdate;
+    
+    // True between sending the 'enter compositing' messages, and the 'exit compositing' message.
+    bool m_compositingAccordingToProxyMessages;
 
     // Whether painting is suspended. We'll still keep track of the dirty region but we 
     // won't paint until painting has resumed again.
     bool m_isPaintingSuspended;
+    bool m_alwaysUseCompositing;
+
+    double m_lastDisplayTime;
 
     RunLoop::Timer<DrawingAreaImpl> m_displayTimer;
+    RunLoop::Timer<DrawingAreaImpl> m_exitCompositingTimer;
 
     // The layer tree host that handles accelerated compositing.
     RefPtr<LayerTreeHost> m_layerTreeHost;