Title: [100751] trunk/Source
Revision
100751
Author
[email protected]
Date
2011-11-18 04:43:44 -0800 (Fri, 18 Nov 2011)

Log Message

[chromium] Pass screen refresh rate into compositor.
https://bugs.webkit.org/show_bug.cgi?id=71040

Patch by Iain Merrick <[email protected]> on 2011-11-18
Reviewed by Tony Gentilcore.

Source/WebCore:

Covered by CCLayerTreeHostTest.

* platform/PlatformScreen.h:
* platform/chromium/PlatformScreenChromium.cpp:
(WebCore::screenRefreshRate):
* platform/chromium/PlatformSupport.h:
* platform/graphics/chromium/cc/CCLayerTreeHost.h:
(WebCore::CCSettings::CCSettings):
* platform/graphics/chromium/cc/CCThreadProxy.cpp:
(WebCore::CCThreadProxy::initializeImplOnImplThread):

Source/WebKit/chromium:

* public/WebScreenInfo.h:
(WebKit::WebScreenInfo::WebScreenInfo):
* src/PlatformSupport.cpp:
(WebCore::PlatformSupport::screenRefreshRate):
* src/WebViewImpl.cpp:
(WebKit::WebViewImpl::setIsAcceleratedCompositingActive):
* tests/CCLayerTreeHostTest.cpp:
(WTF::CCLayerTreeHostTest::runTest):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (100750 => 100751)


--- trunk/Source/WebCore/ChangeLog	2011-11-18 12:30:45 UTC (rev 100750)
+++ trunk/Source/WebCore/ChangeLog	2011-11-18 12:43:44 UTC (rev 100751)
@@ -1,3 +1,21 @@
+2011-11-18  Iain Merrick  <[email protected]>
+
+        [chromium] Pass screen refresh rate into compositor.
+        https://bugs.webkit.org/show_bug.cgi?id=71040
+
+        Reviewed by Tony Gentilcore.
+
+        Covered by CCLayerTreeHostTest.
+
+        * platform/PlatformScreen.h:
+        * platform/chromium/PlatformScreenChromium.cpp:
+        (WebCore::screenRefreshRate):
+        * platform/chromium/PlatformSupport.h:
+        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
+        (WebCore::CCSettings::CCSettings):
+        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
+        (WebCore::CCThreadProxy::initializeImplOnImplThread):
+
 2011-11-18  Alexandru Chiculita  <[email protected]>
 
         [CSSShaders] Implement the computed style for mesh parameters of the custom() filter

Modified: trunk/Source/WebCore/platform/PlatformScreen.h (100750 => 100751)


--- trunk/Source/WebCore/platform/PlatformScreen.h	2011-11-18 12:30:45 UTC (rev 100750)
+++ trunk/Source/WebCore/platform/PlatformScreen.h	2011-11-18 12:43:44 UTC (rev 100751)
@@ -54,6 +54,11 @@
     FloatRect screenRect(Widget*);
     FloatRect screenAvailableRect(Widget*);
 
+#if PLATFORM(CHROMIUM)
+    // Measured in frames per second. 0 if the refresh rate is unknown, or not applicable.
+    double screenRefreshRate(Widget*);
+#endif
+
 #if PLATFORM(MAC)
     NSScreen *screenForWindow(NSWindow *);
 

Modified: trunk/Source/WebCore/platform/chromium/PlatformScreenChromium.cpp (100750 => 100751)


--- trunk/Source/WebCore/platform/chromium/PlatformScreenChromium.cpp	2011-11-18 12:30:45 UTC (rev 100750)
+++ trunk/Source/WebCore/platform/chromium/PlatformScreenChromium.cpp	2011-11-18 12:43:44 UTC (rev 100751)
@@ -61,4 +61,9 @@
     return PlatformSupport::screenAvailableRect(widget);
 }
 
+double screenRefreshRate(Widget* widget)
+{
+    return PlatformSupport::screenRefreshRate(widget);
+}
+
 } // namespace WebCore

Modified: trunk/Source/WebCore/platform/chromium/PlatformSupport.h (100750 => 100751)


--- trunk/Source/WebCore/platform/chromium/PlatformSupport.h	2011-11-18 12:30:45 UTC (rev 100750)
+++ trunk/Source/WebCore/platform/chromium/PlatformSupport.h	2011-11-18 12:43:44 UTC (rev 100751)
@@ -239,6 +239,7 @@
     static bool screenIsMonochrome(Widget*);
     static IntRect screenRect(Widget*);
     static IntRect screenAvailableRect(Widget*);
+    static double screenRefreshRate(Widget*);
 
     // SharedTimers -------------------------------------------------------
     static void setSharedTimerFiredFunction(void (*func)());

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


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h	2011-11-18 12:30:45 UTC (rev 100750)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h	2011-11-18 12:43:44 UTC (rev 100751)
@@ -73,13 +73,15 @@
             , compositeOffscreen(false)
             , enableCompositorThread(false)
             , showFPSCounter(false)
-            , showPlatformLayerTree(false) { }
+            , showPlatformLayerTree(false)
+            , refreshRate(0) { }
 
     bool acceleratePainting;
     bool compositeOffscreen;
     bool enableCompositorThread;
     bool showFPSCounter;
     bool showPlatformLayerTree;
+    double refreshRate;
 };
 
 // Provides information on an Impl's rendering capabilities back to the CCLayerTreeHost

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


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp	2011-11-18 12:30:45 UTC (rev 100750)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp	2011-11-18 12:43:44 UTC (rev 100751)
@@ -515,7 +515,8 @@
     TRACE_EVENT("CCThreadProxy::initializeImplOnImplThread", this, 0);
     ASSERT(isImplThread());
     m_layerTreeHostImpl = m_layerTreeHost->createLayerTreeHostImpl(this);
-    const double displayRefreshIntervalMs = 1000.0 / 60.0;
+    ASSERT(m_layerTreeHostImpl->settings().refreshRate > 0);
+    const double displayRefreshIntervalMs = 1000.0 / m_layerTreeHostImpl->settings().refreshRate;
     OwnPtr<CCFrameRateController> frameRateController = adoptPtr(new CCFrameRateController(CCDelayBasedTimeSource::create(displayRefreshIntervalMs, CCProxy::implThread())));
     m_schedulerOnImplThread = CCScheduler::create(this, frameRateController.release());
     m_schedulerOnImplThread->setVisible(m_layerTreeHostImpl->visible());

Modified: trunk/Source/WebKit/chromium/ChangeLog (100750 => 100751)


--- trunk/Source/WebKit/chromium/ChangeLog	2011-11-18 12:30:45 UTC (rev 100750)
+++ trunk/Source/WebKit/chromium/ChangeLog	2011-11-18 12:43:44 UTC (rev 100751)
@@ -1,3 +1,19 @@
+2011-11-18  Iain Merrick  <[email protected]>
+
+        [chromium] Pass screen refresh rate into compositor.
+        https://bugs.webkit.org/show_bug.cgi?id=71040
+
+        Reviewed by Tony Gentilcore.
+
+        * public/WebScreenInfo.h:
+        (WebKit::WebScreenInfo::WebScreenInfo):
+        * src/PlatformSupport.cpp:
+        (WebCore::PlatformSupport::screenRefreshRate):
+        * src/WebViewImpl.cpp:
+        (WebKit::WebViewImpl::setIsAcceleratedCompositingActive):
+        * tests/CCLayerTreeHostTest.cpp:
+        (WTF::CCLayerTreeHostTest::runTest):
+
 2011-11-17  Vincent Scheib  <[email protected]>
 
         Pointer Lock: Page Settings unecessary

Modified: trunk/Source/WebKit/chromium/public/WebScreenInfo.h (100750 => 100751)


--- trunk/Source/WebKit/chromium/public/WebScreenInfo.h	2011-11-18 12:30:45 UTC (rev 100750)
+++ trunk/Source/WebKit/chromium/public/WebScreenInfo.h	2011-11-18 12:43:44 UTC (rev 100751)
@@ -63,10 +63,14 @@
     //   some of the rectangle's coordinates may be negative values".
     WebRect availableRect;
 
+    // Measured in frames per second. 0 if the rate is unknown or not applicable.
+    double refreshRate;
+
     WebScreenInfo()
         : depth(0)
         , depthPerComponent(0)
-        , isMonochrome(false) { }
+        , isMonochrome(false)
+        , refreshRate(0) { }
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/chromium/src/PlatformSupport.cpp (100750 => 100751)


--- trunk/Source/WebKit/chromium/src/PlatformSupport.cpp	2011-11-18 12:30:45 UTC (rev 100750)
+++ trunk/Source/WebKit/chromium/src/PlatformSupport.cpp	2011-11-18 12:43:44 UTC (rev 100751)
@@ -1058,6 +1058,14 @@
     return client->screenInfo().availableRect;
 }
 
+double PlatformSupport::screenRefreshRate(Widget* widget)
+{
+    WebWidgetClient* client = toWebWidgetClient(widget);
+    if (!client)
+        return 0;
+    return client->screenInfo().refreshRate;
+}
+
 bool PlatformSupport::popupsAllowed(NPP npp)
 {
     // FIXME: Give the embedder a way to control this.

Modified: trunk/Source/WebKit/chromium/src/WebViewImpl.cpp (100750 => 100751)


--- trunk/Source/WebKit/chromium/src/WebViewImpl.cpp	2011-11-18 12:30:45 UTC (rev 100750)
+++ trunk/Source/WebKit/chromium/src/WebViewImpl.cpp	2011-11-18 12:43:44 UTC (rev 100751)
@@ -86,6 +86,7 @@
 #include "PlatformContextSkia.h"
 #include "PlatformKeyboardEvent.h"
 #include "PlatformMouseEvent.h"
+#include "PlatformScreen.h"
 #include "PlatformThemeChromiumLinux.h"
 #include "PlatformWheelEvent.h"
 #include "PopupContainer.h"
@@ -2745,12 +2746,18 @@
     } else {
         TRACE_EVENT("WebViewImpl::setIsAcceleratedCompositingActive(true)", this, 0);
 
+        static const double defaultRefreshRate = 60.0;
+
         WebCore::CCSettings ccSettings;
         ccSettings.acceleratePainting = page()->settings()->acceleratedDrawingEnabled();
         ccSettings.compositeOffscreen = settings()->compositeToTextureEnabled();
         ccSettings.enableCompositorThread = settings()->useThreadedCompositor();
         ccSettings.showFPSCounter = settings()->showFPSCounter();
         ccSettings.showPlatformLayerTree = settings()->showPlatformLayerTree();
+        ccSettings.refreshRate = screenRefreshRate(page()->mainFrame()->view());
+        ASSERT(ccSettings.refreshRate >= 0);
+        if (!ccSettings.refreshRate)
+            ccSettings.refreshRate = defaultRefreshRate;
 
         m_nonCompositedContentHost = NonCompositedContentHost::create(WebViewImplContentPainter::create(this));
         m_layerTreeHost = CCLayerTreeHost::create(this, ccSettings);

Modified: trunk/Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp (100750 => 100751)


--- trunk/Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp	2011-11-18 12:30:45 UTC (rev 100750)
+++ trunk/Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp	2011-11-18 12:43:44 UTC (rev 100751)
@@ -363,6 +363,7 @@
     virtual void runTest(bool threaded)
     {
         m_settings.enableCompositorThread = threaded;
+        m_settings.refreshRate = 100.0;
         webkit_support::PostDelayedTask(CCLayerTreeHostTest::onBeginTest, static_cast<void*>(this), 0);
         m_timeoutTask = new TimeoutTask(this);
         webkit_support::PostDelayedTask(m_timeoutTask, 5000); // webkit_support takes ownership of the task
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to