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