Title: [97922] trunk/Source
Revision
97922
Author
[email protected]
Date
2011-10-19 19:23:32 -0700 (Wed, 19 Oct 2011)

Log Message

[chromium] Route requestAnimationFrame through CCProxy in threaded mode
https://bugs.webkit.org/show_bug.cgi?id=70160

Reviewed by James Robinson.

Source/WebCore:

* platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
(WebCore::CCLayerTreeHost::setNeedsAnimate):
* platform/graphics/chromium/cc/CCLayerTreeHost.h:
* platform/graphics/chromium/cc/CCProxy.h:
* platform/graphics/chromium/cc/CCScheduler.cpp:
(WebCore::CCScheduler::requestAnimate):
* platform/graphics/chromium/cc/CCScheduler.h:
* platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
(WebCore::CCSingleThreadProxy::setNeedsAnimate):
* platform/graphics/chromium/cc/CCSingleThreadProxy.h:
* platform/graphics/chromium/cc/CCThreadProxy.cpp:
(WebCore::CCThreadProxy::setNeedsAnimate):
(WebCore::CCThreadProxy::setNeedsAnimateOnCCThread):
* platform/graphics/chromium/cc/CCThreadProxy.h:

Source/WebKit/chromium:

* src/ChromeClientImpl.cpp:
(WebKit::ChromeClientImpl::scheduleAnimation):
* src/WebViewImpl.cpp:
(WebKit::WebViewImpl::scheduleAnimation):
* src/WebViewImpl.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (97921 => 97922)


--- trunk/Source/WebCore/ChangeLog	2011-10-20 02:15:07 UTC (rev 97921)
+++ trunk/Source/WebCore/ChangeLog	2011-10-20 02:23:32 UTC (rev 97922)
@@ -1,3 +1,25 @@
+2011-10-19  Nat Duca  <[email protected]>
+
+        [chromium] Route requestAnimationFrame through CCProxy in threaded mode
+        https://bugs.webkit.org/show_bug.cgi?id=70160
+
+        Reviewed by James Robinson.
+
+        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
+        (WebCore::CCLayerTreeHost::setNeedsAnimate):
+        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
+        * platform/graphics/chromium/cc/CCProxy.h:
+        * platform/graphics/chromium/cc/CCScheduler.cpp:
+        (WebCore::CCScheduler::requestAnimate):
+        * platform/graphics/chromium/cc/CCScheduler.h:
+        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
+        (WebCore::CCSingleThreadProxy::setNeedsAnimate):
+        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
+        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
+        (WebCore::CCThreadProxy::setNeedsAnimate):
+        (WebCore::CCThreadProxy::setNeedsAnimateOnCCThread):
+        * platform/graphics/chromium/cc/CCThreadProxy.h:
+
 2011-10-19  Kent Tamura  <[email protected]>
 
         Reject invalid MIME type strings for a file selection dialog parameter

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp (97921 => 97922)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp	2011-10-20 02:15:07 UTC (rev 97921)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp	2011-10-20 02:23:32 UTC (rev 97922)
@@ -195,6 +195,12 @@
         setNeedsCommitThenRedraw();
 }
 
+void CCLayerTreeHost::setNeedsAnimate()
+{
+    ASSERT(m_settings.enableCompositorThread);
+    m_proxy->setNeedsAnimate();
+}
+
 void CCLayerTreeHost::setNeedsCommitThenRedraw()
 {
     if (m_settings.enableCompositorThread) {

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h (97921 => 97922)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h	2011-10-20 02:15:07 UTC (rev 97921)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h	2011-10-20 02:23:32 UTC (rev 97922)
@@ -134,6 +134,7 @@
     // Test-only hook
     void loseCompositorContext(int numTimes);
 
+    void setNeedsAnimate();
     void setNeedsCommitThenRedraw();
     void setNeedsRedraw();
 

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCProxy.h (97921 => 97922)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCProxy.h	2011-10-20 02:15:07 UTC (rev 97921)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCProxy.h	2011-10-20 02:23:32 UTC (rev 97922)
@@ -64,6 +64,7 @@
 
     virtual const LayerRendererCapabilities& layerRendererCapabilities() const = 0;
 
+    virtual void setNeedsAnimate() = 0;
     virtual void setNeedsCommit() = 0;
     virtual void setNeedsCommitThenRedraw() = 0;
     virtual void setNeedsRedraw() = 0;

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCScheduler.cpp (97921 => 97922)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCScheduler.cpp	2011-10-20 02:15:07 UTC (rev 97921)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCScheduler.cpp	2011-10-20 02:23:32 UTC (rev 97922)
@@ -36,6 +36,12 @@
     ASSERT(m_client);
 }
 
+void CCScheduler::requestAnimate()
+{
+    // Stub through to requestCommit for now.
+    requestCommit();
+}
+
 void CCScheduler::requestCommit()
 {
     if (m_commitPending)
@@ -66,4 +72,3 @@
 }
 
 }
-

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCScheduler.h (97921 => 97922)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCScheduler.h	2011-10-20 02:15:07 UTC (rev 97921)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCScheduler.h	2011-10-20 02:23:32 UTC (rev 97922)
@@ -49,6 +49,7 @@
         return adoptPtr(new CCScheduler(client));
     }
 
+    void requestAnimate();
     void requestCommit();
     void requestRedraw();
 

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp (97921 => 97922)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp	2011-10-20 02:15:07 UTC (rev 97921)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp	2011-10-20 02:23:32 UTC (rev 97922)
@@ -138,6 +138,12 @@
     m_timesRecreateShouldFail = numTimes - 1;
 }
 
+void CCSingleThreadProxy::setNeedsAnimate()
+{
+    // CCThread-only feature
+    ASSERT_NOT_REACHED();
+}
+
 void CCSingleThreadProxy::setNeedsCommit()
 {
     ASSERT(CCProxy::isMainThread());

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.h (97921 => 97922)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.h	2011-10-20 02:15:07 UTC (rev 97921)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.h	2011-10-20 02:23:32 UTC (rev 97922)
@@ -48,6 +48,7 @@
     virtual int compositorIdentifier() const { return m_compositorIdentifier; }
     virtual const LayerRendererCapabilities& layerRendererCapabilities() const;
     virtual void loseCompositorContext(int numTimes);
+    virtual void setNeedsAnimate();
     virtual void setNeedsCommit();
     virtual void setNeedsCommitThenRedraw();
     virtual void setNeedsRedraw();

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp (97921 => 97922)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp	2011-10-20 02:15:07 UTC (rev 97921)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp	2011-10-20 02:23:32 UTC (rev 97922)
@@ -239,6 +239,18 @@
     ASSERT_NOT_REACHED();
 }
 
+void CCThreadProxy::setNeedsAnimate()
+{
+    ASSERT(isMainThread());
+    if (m_commitRequested)
+        return;
+
+    TRACE_EVENT("CCThreadProxy::setNeedsAnimation", this, 0);
+    m_commitRequested = true;
+    s_ccThread->postTask(createCCThreadTask(this, &CCThreadProxy::setNeedsAnimateOnCCThread));
+}
+
+
 void CCThreadProxy::setNeedsCommit()
 {
     ASSERT(isMainThread());
@@ -257,6 +269,13 @@
     setNeedsCommit();
 }
 
+void CCThreadProxy::setNeedsAnimateOnCCThread()
+{
+    ASSERT(isImplThread());
+    TRACE_EVENT("CCThreadProxy::setNeedsCommitOnCCThread", this, 0);
+    m_schedulerOnCCThread->requestAnimate();
+}
+
 void CCThreadProxy::setNeedsCommitOnCCThread()
 {
     ASSERT(isImplThread());

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.h (97921 => 97922)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.h	2011-10-20 02:15:07 UTC (rev 97921)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.h	2011-10-20 02:23:32 UTC (rev 97922)
@@ -60,6 +60,7 @@
     virtual int compositorIdentifier() const;
     virtual const LayerRendererCapabilities& layerRendererCapabilities() const;
     virtual void loseCompositorContext(int numTimes);
+    virtual void setNeedsAnimate();
     virtual void setNeedsCommit();
     virtual void setNeedsCommitThenRedraw();
     virtual void setNeedsRedraw();
@@ -83,12 +84,14 @@
     void finishAllRenderingOnCCThread(CCCompletionEvent*);
     void initializeImplOnCCThread(CCCompletionEvent*);
     void initializeLayerRendererOnCCThread(GraphicsContext3D*, CCCompletionEvent*, bool* initializeSucceeded, LayerRendererCapabilities*, int* compositorIdentifier);
+    void setNeedsAnimateOnCCThread();
     void setNeedsCommitOnCCThread();
     void setNeedsRedrawOnCCThread();
     void setNeedsCommitThenRedrawOnCCThread();
     void layerTreeHostClosedOnCCThread(CCCompletionEvent*);
 
     // Accessed on main thread only.
+    bool m_animationRequested;
     bool m_commitRequested;
     bool m_redrawAfterCommit;
     CCLayerTreeHost* m_layerTreeHost;

Modified: trunk/Source/WebKit/chromium/ChangeLog (97921 => 97922)


--- trunk/Source/WebKit/chromium/ChangeLog	2011-10-20 02:15:07 UTC (rev 97921)
+++ trunk/Source/WebKit/chromium/ChangeLog	2011-10-20 02:23:32 UTC (rev 97922)
@@ -1,3 +1,16 @@
+2011-10-19  Nat Duca  <[email protected]>
+
+        [chromium] Route requestAnimationFrame through CCProxy in threaded mode
+        https://bugs.webkit.org/show_bug.cgi?id=70160
+
+        Reviewed by James Robinson.
+
+        * src/ChromeClientImpl.cpp:
+        (WebKit::ChromeClientImpl::scheduleAnimation):
+        * src/WebViewImpl.cpp:
+        (WebKit::WebViewImpl::scheduleAnimation):
+        * src/WebViewImpl.h:
+
 2011-10-19  Nico Weber  <[email protected]>
 
         [chromium/mac] Use clang as compiler!

Modified: trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp (97921 => 97922)


--- trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp	2011-10-20 02:15:07 UTC (rev 97921)
+++ trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp	2011-10-20 02:23:32 UTC (rev 97922)
@@ -535,7 +535,7 @@
 #if ENABLE(REQUEST_ANIMATION_FRAME)
 void ChromeClientImpl::scheduleAnimation()
 {
-    m_webView->client()->scheduleAnimation();
+    m_webView->scheduleAnimation();
 }
 #endif
 

Modified: trunk/Source/WebKit/chromium/src/WebViewImpl.cpp (97921 => 97922)


--- trunk/Source/WebKit/chromium/src/WebViewImpl.cpp	2011-10-20 02:15:07 UTC (rev 97921)
+++ trunk/Source/WebKit/chromium/src/WebViewImpl.cpp	2011-10-20 02:23:32 UTC (rev 97922)
@@ -2608,6 +2608,19 @@
     m_nonCompositedContentHost->invalidateRect(dirtyRect);
     setRootLayerNeedsDisplay();
 }
+#if ENABLE(REQUEST_ANIMATION_FRAME)
+void WebViewImpl::scheduleAnimation()
+{
+    if (isAcceleratedCompositingActive()) {
+        if (settings()->useThreadedCompositor()) {
+            ASSERT(m_layerTreeHost);
+            m_layerTreeHost->setNeedsAnimate();
+        } else
+            m_client->scheduleAnimation();
+    } else
+            m_client->scheduleAnimation();
+}
+#endif
 
 class WebViewImplContentPainter : public LayerPainterChromium {
     WTF_MAKE_NONCOPYABLE(WebViewImplContentPainter);

Modified: trunk/Source/WebKit/chromium/src/WebViewImpl.h (97921 => 97922)


--- trunk/Source/WebKit/chromium/src/WebViewImpl.h	2011-10-20 02:15:07 UTC (rev 97921)
+++ trunk/Source/WebKit/chromium/src/WebViewImpl.h	2011-10-20 02:23:32 UTC (rev 97922)
@@ -384,8 +384,10 @@
     void setRootLayerNeedsDisplay();
     void scrollRootLayerRect(const WebCore::IntSize& scrollDelta, const WebCore::IntRect& clipRect);
     void invalidateRootLayerRect(const WebCore::IntRect&);
-    void doUpdateAndComposite();
 #endif
+#if ENABLE(REQUEST_ANIMATION_FRAME)
+    void scheduleAnimation();
+#endif
 
     // Returns the onscreen 3D context used by the compositor. This is
     // used by the renderer's code to set up resource sharing between
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to