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 <aelias@google.com> 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):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@108031
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2012-02-16 Alexandre Elias <aelias@google.com>
+
+ [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 <haraken@chromium.org>
Unreviewed. Rebaselined run-bindings-tests results.
, 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)
{
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++;
}
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;
- setNeedsCommit();
-}
-
-void CCLayerTreeHost::setPageScaleFactorLimits(float minScale, float maxScale)
-{
- if (minScale == m_minPageScale && maxScale == m_maxPageScale)
- return;
-
- m_minPageScale = minScale;
- m_maxPageScale = maxScale;
+ m_pageScaleFactor = pageScaleFactor;
+ m_minPageScaleFactor = minPageScaleFactor;
+ m_maxPageScaleFactor = maxPageScaleFactor;
setNeedsCommit();
}
const IntSize& viewportSize() const { return m_viewportSize; }
- void setPageScale(float);
- float pageScale() const { return m_pageScale; }
-
- void setPageScaleFactorLimits(float minScale, float maxScale);
+ void setPageScaleFactorAndLimits(float pageScaleFactor, float minPageScaleFactor, float maxPageScaleFactor);
TextureManager* contentsTextureManager() const;
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;
+2012-02-16 Alexandre Elias <aelias@google.com>
+
+ [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 <varunjain@google.com>
[Chromium] Add method to WebViewImpl to extract zoom/scroll params for gesture events on touch devices
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;
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;
}
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()
{
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)