2011-05-04 Simon Fraser <simon.fraser@apple.com>
[WebKit-https.git] / Source / WebKit2 / WebProcess / WebPage / DrawingAreaImpl.h
index a64aa47..80b2828 100644 (file)
@@ -37,9 +37,10 @@ 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:
@@ -60,37 +61,50 @@ private:
     virtual void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
 
     // CoreIPC message handlers.
-    virtual void updateState(uint64_t stateID, const WebCore::IntSize&, const WebCore::IntSize& scrollOffset);
+    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_stateID;
+    uint64_t m_backingStoreStateID;
 
     Region m_dirtyRegion;
     WebCore::IntRect m_scrollRect;
     WebCore::IntSize m_scrollOffset;
 
-    // Whether we're currently processing a setSize message.
-    bool m_inUpdateState;
+    // 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;