Title: [100438] trunk/Source
Revision
100438
Author
[email protected]
Date
2011-11-16 06:04:57 -0800 (Wed, 16 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-16
Reviewed by Tony Gentilcore.

Source/WebCore:

* 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):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (100437 => 100438)


--- trunk/Source/WebCore/ChangeLog	2011-11-16 14:03:42 UTC (rev 100437)
+++ trunk/Source/WebCore/ChangeLog	2011-11-16 14:04:57 UTC (rev 100438)
@@ -1,3 +1,19 @@
+2011-11-16  Iain Merrick  <[email protected]>
+
+        [chromium] Pass screen refresh rate into compositor.
+        https://bugs.webkit.org/show_bug.cgi?id=71040
+
+        Reviewed by Tony Gentilcore.
+
+        * 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-15  Andrey Kosyakov  <[email protected]>
 
         Web Inspector: [Extensions API] drop ExtensionSidebarPane.onUpdated, use callbacks instead

Modified: trunk/Source/WebCore/platform/PlatformScreen.h (100437 => 100438)


--- trunk/Source/WebCore/platform/PlatformScreen.h	2011-11-16 14:03:42 UTC (rev 100437)
+++ trunk/Source/WebCore/platform/PlatformScreen.h	2011-11-16 14:04:57 UTC (rev 100438)
@@ -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 (100437 => 100438)


--- trunk/Source/WebCore/platform/chromium/PlatformScreenChromium.cpp	2011-11-16 14:03:42 UTC (rev 100437)
+++ trunk/Source/WebCore/platform/chromium/PlatformScreenChromium.cpp	2011-11-16 14:04:57 UTC (rev 100438)
@@ -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 (100437 => 100438)


--- trunk/Source/WebCore/platform/chromium/PlatformSupport.h	2011-11-16 14:03:42 UTC (rev 100437)
+++ trunk/Source/WebCore/platform/chromium/PlatformSupport.h	2011-11-16 14:04:57 UTC (rev 100438)
@@ -234,6 +234,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 (100437 => 100438)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h	2011-11-16 14:03:42 UTC (rev 100437)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h	2011-11-16 14:04:57 UTC (rev 100438)
@@ -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 (100437 => 100438)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp	2011-11-16 14:03:42 UTC (rev 100437)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp	2011-11-16 14:04:57 UTC (rev 100438)
@@ -502,7 +502,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 (100437 => 100438)


--- trunk/Source/WebKit/chromium/ChangeLog	2011-11-16 14:03:42 UTC (rev 100437)
+++ trunk/Source/WebKit/chromium/ChangeLog	2011-11-16 14:04:57 UTC (rev 100438)
@@ -1,3 +1,17 @@
+2011-11-16  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):
+
 2011-11-15  Sheriff Bot  <[email protected]>
 
         Unreviewed, rolling out r100340.

Modified: trunk/Source/WebKit/chromium/public/WebScreenInfo.h (100437 => 100438)


--- trunk/Source/WebKit/chromium/public/WebScreenInfo.h	2011-11-16 14:03:42 UTC (rev 100437)
+++ trunk/Source/WebKit/chromium/public/WebScreenInfo.h	2011-11-16 14:04:57 UTC (rev 100438)
@@ -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 (100437 => 100438)


--- trunk/Source/WebKit/chromium/src/PlatformSupport.cpp	2011-11-16 14:03:42 UTC (rev 100437)
+++ trunk/Source/WebKit/chromium/src/PlatformSupport.cpp	2011-11-16 14:04:57 UTC (rev 100438)
@@ -1056,6 +1056,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 (100437 => 100438)


--- trunk/Source/WebKit/chromium/src/WebViewImpl.cpp	2011-11-16 14:03:42 UTC (rev 100437)
+++ trunk/Source/WebKit/chromium/src/WebViewImpl.cpp	2011-11-16 14:04:57 UTC (rev 100438)
@@ -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"
@@ -2728,12 +2729,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);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to