[chromium] Plumb WebViewImpl's compositor scheduling suppression out to WebWidgetClient
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 26 Feb 2013 00:44:28 +0000 (00:44 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 26 Feb 2013 00:44:28 +0000 (00:44 +0000)
https://bugs.webkit.org/show_bug.cgi?id=110640

Patch by James Robinson <jamesr@chromium.org> on 2013-02-25
Reviewed by Adrienne Walker.

This plumbs the WebViewImpl::m_suppressInvalidations logic out to the WebWidgetClient so
it can be implemented by the embedder. The existing logic is left in place for now,
once the embedder side has landed WebViewImpl will be purely a pass-through.

* public/WebWidgetClient.h:
(WebWidgetClient):
(WebKit::WebWidgetClient::suppressCompositorScheduling):
* src/WebViewImpl.cpp:
(WebKit::WebViewImpl::suppressInvalidations):
(WebKit::WebViewImpl::setRootGraphicsLayer):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@143985 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit/chromium/ChangeLog
Source/WebKit/chromium/public/WebWidgetClient.h
Source/WebKit/chromium/src/WebViewImpl.cpp

index 33aca65..301ae63 100644 (file)
@@ -1,3 +1,21 @@
+2013-02-25  James Robinson  <jamesr@chromium.org>
+
+        [chromium] Plumb WebViewImpl's compositor scheduling suppression out to WebWidgetClient
+        https://bugs.webkit.org/show_bug.cgi?id=110640
+
+        Reviewed by Adrienne Walker.
+
+        This plumbs the WebViewImpl::m_suppressInvalidations logic out to the WebWidgetClient so
+        it can be implemented by the embedder. The existing logic is left in place for now,
+        once the embedder side has landed WebViewImpl will be purely a pass-through.
+
+        * public/WebWidgetClient.h:
+        (WebWidgetClient):
+        (WebKit::WebWidgetClient::suppressCompositorScheduling):
+        * src/WebViewImpl.cpp:
+        (WebKit::WebViewImpl::suppressInvalidations):
+        (WebKit::WebViewImpl::setRootGraphicsLayer):
+
 2013-02-25  Sheriff Bot  <webkit.review.bot@gmail.com>
 
         Unreviewed, rolling out r143936.
index fa9d3d8..48fe588 100644 (file)
@@ -75,6 +75,12 @@ public:
     // WebWidgetClient.
     virtual WebLayerTreeView* layerTreeView() { return 0; }
 
+    // Sometimes the WebWidget enters a state where it will generate a sequence
+    // of invalidations that should not, by themselves, trigger the compositor
+    // to schedule a new frame. This call indicates to the embedder that it
+    // should suppress compositor scheduling temporarily.
+    virtual void suppressCompositorScheduling(bool enable) { }
+
     // Indicates to the embedder that the compositor is about to begin a
     // frame. This is primarily to signal to flow control mechanisms that a
     // frame is beginning, not to perform actual painting work.
index ad3ed41..49a66c9 100644 (file)
@@ -4002,6 +4002,7 @@ bool WebViewImpl::tabsToLinks() const
 void WebViewImpl::suppressInvalidations(bool enable)
 {
     m_suppressInvalidations = enable;
+    m_client->suppressCompositorScheduling(enable);
 }
 
 #if USE(ACCELERATED_COMPOSITING)
@@ -4012,6 +4013,7 @@ bool WebViewImpl::allowsAcceleratedCompositing()
 
 void WebViewImpl::setRootGraphicsLayer(GraphicsLayer* layer)
 {
+    m_client->suppressCompositorScheduling(true);
     TemporaryChange<bool> change(m_suppressInvalidations, true);
 
     m_rootGraphicsLayer = layer;
@@ -4036,9 +4038,7 @@ void WebViewImpl::setRootGraphicsLayer(GraphicsLayer* layer)
             m_layerTreeView->clearRootLayer();
     }
 
-    IntRect damagedRect(0, 0, m_size.width, m_size.height);
-    if (!m_isAcceleratedCompositingActive && !m_suppressInvalidations)
-        m_client->didInvalidateRect(damagedRect);
+    m_client->suppressCompositorScheduling(false);
 }
 
 void WebViewImpl::scheduleCompositingLayerSync()