Title: [108031] trunk/Source
Revision
108031
Author
[email protected]
Date
2012-02-16 21:58:38 -0800 (Thu, 16 Feb 2012)

Log Message

[chromium] Bundle page scale factor and limits in CCLayerTreeHost
https://bugs.webkit.org/show_bug.cgi?id=78762

Setting page scale factor and its limits in separate methods
may cause clamping bugs if one of them makes it to the
impl thread before the other.  Change the API to bundle them together,
which matches the existing impl-side interface.

Patch by Alexandre Elias <[email protected]> on 2012-02-16
Reviewed by James Robinson.

Source/WebCore:

No new tests (API change will disallow this type of bug).

* platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
(WebCore::CCLayerTreeHost::CCLayerTreeHost):
(WebCore::CCLayerTreeHost::finishCommitOnImplThread):
(WebCore::CCLayerTreeHost::setPageScaleFactorAndLimits):
* platform/graphics/chromium/cc/CCLayerTreeHost.h:
(CCLayerTreeHost):

Source/WebKit/chromium:

* src/WebViewImpl.cpp:
(WebKit::WebViewImpl::computePageScaleFactorLimits):
(WebKit::WebViewImpl::setIsAcceleratedCompositingActive):
(WebKit::WebViewImpl::updateLayerTreeViewport):
* tests/CCLayerTreeHostTest.cpp:
(WTF::CCLayerTreeHostTestStartPageScaleAnimation::applyScrollAndScale):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (108030 => 108031)


--- trunk/Source/WebCore/ChangeLog	2012-02-17 05:51:11 UTC (rev 108030)
+++ trunk/Source/WebCore/ChangeLog	2012-02-17 05:58:38 UTC (rev 108031)
@@ -1,3 +1,24 @@
+2012-02-16  Alexandre Elias  <[email protected]>
+
+        [chromium] Bundle page scale factor and limits in CCLayerTreeHost
+        https://bugs.webkit.org/show_bug.cgi?id=78762
+
+        Setting page scale factor and its limits in separate methods
+        may cause clamping bugs if one of them makes it to the
+        impl thread before the other.  Change the API to bundle them together,
+        which matches the existing impl-side interface.
+
+        Reviewed by James Robinson.
+
+        No new tests (API change will disallow this type of bug).
+
+        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
+        (WebCore::CCLayerTreeHost::CCLayerTreeHost):
+        (WebCore::CCLayerTreeHost::finishCommitOnImplThread):
+        (WebCore::CCLayerTreeHost::setPageScaleFactorAndLimits):
+        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
+        (CCLayerTreeHost):
+
 2012-02-16  Kentaro Hara  <[email protected]>
 
         Unreviewed. Rebaselined run-bindings-tests results.

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


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp	2012-02-17 05:51:11 UTC (rev 108030)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp	2012-02-17 05:58:38 UTC (rev 108031)
@@ -69,9 +69,9 @@
     , m_settings(settings)
     , m_visible(true)
     , m_haveWheelEventHandlers(false)
-    , m_pageScale(1)
-    , m_minPageScale(1)
-    , m_maxPageScale(1)
+    , m_pageScaleFactor(1)
+    , m_minPageScaleFactor(1)
+    , m_maxPageScaleFactor(1)
     , m_triggerIdlePaints(true)
     , m_partialTextureUpdateRequests(0)
 {
@@ -179,7 +179,7 @@
     hostImpl->setSourceFrameNumber(frameNumber());
     hostImpl->setHaveWheelEventHandlers(m_haveWheelEventHandlers);
     hostImpl->setViewportSize(viewportSize());
-    hostImpl->setPageScaleFactorAndLimits(pageScale(), m_minPageScale, m_maxPageScale);
+    hostImpl->setPageScaleFactorAndLimits(m_pageScaleFactor, m_minPageScaleFactor, m_maxPageScaleFactor);
 
     m_frameNumber++;
 }
@@ -285,25 +285,17 @@
     setNeedsCommit();
 }
 
-void CCLayerTreeHost::setPageScale(float pageScale)
+void CCLayerTreeHost::setPageScaleFactorAndLimits(float pageScaleFactor, float minPageScaleFactor, float maxPageScaleFactor)
 {
-    if (pageScale == m_pageScale)
+    if (pageScaleFactor == m_pageScaleFactor && minPageScaleFactor == m_minPageScaleFactor && maxPageScaleFactor == m_maxPageScaleFactor)
         return;
 
-    m_pageScale = pageScale;
+    m_pageScaleFactor = pageScaleFactor;
+    m_minPageScaleFactor = minPageScaleFactor;
+    m_maxPageScaleFactor = maxPageScaleFactor;
     setNeedsCommit();
 }
 
-void CCLayerTreeHost::setPageScaleFactorLimits(float minScale, float maxScale)
-{
-    if (minScale == m_minPageScale && maxScale == m_maxPageScale)
-        return;
-
-    m_minPageScale = minScale;
-    m_maxPageScale = maxScale;
-    setNeedsCommit();
-}
-
 void CCLayerTreeHost::setVisible(bool visible)
 {
     if (m_visible == visible)

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


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h	2012-02-17 05:51:11 UTC (rev 108030)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h	2012-02-17 05:58:38 UTC (rev 108031)
@@ -173,11 +173,8 @@
 
     const IntSize& viewportSize() const { return m_viewportSize; }
 
-    void setPageScale(float);
-    float pageScale() const { return m_pageScale; }
+    void setPageScaleFactorAndLimits(float pageScaleFactor, float minPageScaleFactor, float maxPageScaleFactor);
 
-    void setPageScaleFactorLimits(float minScale, float maxScale);
-
     TextureManager* contentsTextureManager() const;
 
     bool visible() const { return m_visible; }
@@ -242,8 +239,8 @@
     typedef HashMap<GraphicsContext3D*, RefPtr<RateLimiter> > RateLimiterMap;
     RateLimiterMap m_rateLimiters;
 
-    float m_pageScale;
-    float m_minPageScale, m_maxPageScale;
+    float m_pageScaleFactor;
+    float m_minPageScaleFactor, m_maxPageScaleFactor;
     bool m_triggerIdlePaints;
 
     TextureList m_deleteTextureAfterCommitList;

Modified: trunk/Source/WebKit/chromium/ChangeLog (108030 => 108031)


--- trunk/Source/WebKit/chromium/ChangeLog	2012-02-17 05:51:11 UTC (rev 108030)
+++ trunk/Source/WebKit/chromium/ChangeLog	2012-02-17 05:58:38 UTC (rev 108031)
@@ -1,3 +1,22 @@
+2012-02-16  Alexandre Elias  <[email protected]>
+
+        [chromium] Bundle page scale factor and limits in CCLayerTreeHost
+        https://bugs.webkit.org/show_bug.cgi?id=78762
+
+        Setting page scale factor and its limits in separate methods
+        may cause clamping bugs if one of them makes it to the
+        impl thread before the other.  Change the API to bundle them together,
+        which matches the existing impl-side interface.
+
+        Reviewed by James Robinson.
+
+        * src/WebViewImpl.cpp:
+        (WebKit::WebViewImpl::computePageScaleFactorLimits):
+        (WebKit::WebViewImpl::setIsAcceleratedCompositingActive):
+        (WebKit::WebViewImpl::updateLayerTreeViewport):
+        * tests/CCLayerTreeHostTest.cpp:
+        (WTF::CCLayerTreeHostTestStartPageScaleAnimation::applyScrollAndScale):
+
 2012-02-16  Varun Jain  <[email protected]>
 
         [Chromium] Add method to WebViewImpl to extract zoom/scroll params for gesture events on touch devices

Modified: trunk/Source/WebKit/chromium/src/WebViewImpl.cpp (108030 => 108031)


--- trunk/Source/WebKit/chromium/src/WebViewImpl.cpp	2012-02-17 05:51:11 UTC (rev 108030)
+++ trunk/Source/WebKit/chromium/src/WebViewImpl.cpp	2012-02-17 05:58:38 UTC (rev 108031)
@@ -2302,12 +2302,12 @@
         m_maximumPageScaleFactor = max(m_minimumPageScaleFactor, m_maximumPageScaleFactor);
     }
     ASSERT(m_minimumPageScaleFactor <= m_maximumPageScaleFactor);
+
+    float clampedScale = clampPageScaleFactorToLimits(pageScaleFactor());
 #if USE(ACCELERATED_COMPOSITING)
     if (m_layerTreeHost)
-        m_layerTreeHost->setPageScaleFactorLimits(m_minimumPageScaleFactor, m_maximumPageScaleFactor);
+        m_layerTreeHost->setPageScaleFactorAndLimits(clampedScale, m_minimumPageScaleFactor, m_maximumPageScaleFactor);
 #endif
-
-    float clampedScale = clampPageScaleFactorToLimits(pageScaleFactor());
     if (clampedScale != pageScaleFactor()) {
         setPageScaleFactorPreservingScrollOffset(clampedScale);
         return true;
@@ -3177,7 +3177,7 @@
         m_layerTreeHost = CCLayerTreeHost::create(this, ccSettings);
         if (m_layerTreeHost) {
             m_layerTreeHost->setHaveWheelEventHandlers(m_haveWheelEventHandlers);
-            m_layerTreeHost->setPageScaleFactorLimits(m_minimumPageScaleFactor, m_maximumPageScaleFactor);
+            m_layerTreeHost->setPageScaleFactorAndLimits(pageScaleFactor(), m_minimumPageScaleFactor, m_maximumPageScaleFactor);
             updateLayerTreeViewport();
             m_client->didActivateCompositor(m_layerTreeHost->compositorIdentifier());
             m_isAcceleratedCompositingActive = true;
@@ -3287,7 +3287,7 @@
     }
     m_nonCompositedContentHost->setViewport(visibleRect.size(), view->contentsSize(), scroll, pageScaleFactor(), layerAdjustX);
     m_layerTreeHost->setViewportSize(visibleRect.size());
-    m_layerTreeHost->setPageScale(pageScaleFactor());
+    m_layerTreeHost->setPageScaleFactorAndLimits(pageScaleFactor(), m_minimumPageScaleFactor, m_maximumPageScaleFactor);
 }
 
 WebGraphicsContext3D* WebViewImpl::graphicsContext3D()

Modified: trunk/Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp (108030 => 108031)


--- trunk/Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp	2012-02-17 05:51:11 UTC (rev 108030)
+++ trunk/Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp	2012-02-17 05:58:38 UTC (rev 108031)
@@ -980,7 +980,7 @@
     {
         IntPoint position = m_layerTreeHost->rootLayer()->scrollPosition();
         m_layerTreeHost->rootLayer()->setScrollPosition(position + scrollDelta);
-        m_layerTreeHost->setPageScale(scale);
+        m_layerTreeHost->setPageScaleFactorAndLimits(scale, 0.5, 2);
     }
 
     virtual void commitCompleteOnCCThread(CCLayerTreeHostImpl* impl)
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to