Diff
Modified: trunk/Source/Platform/ChangeLog (120543 => 120544)
--- trunk/Source/Platform/ChangeLog 2012-06-17 01:05:07 UTC (rev 120543)
+++ trunk/Source/Platform/ChangeLog 2012-06-17 03:55:36 UTC (rev 120544)
@@ -1,3 +1,17 @@
+2012-06-16 Robert Kroeger <[email protected]>
+
+ [chromium] Make the deviceScaleFactor dynamically adjustable.
+ https://bugs.webkit.org/show_bug.cgi?id=88916
+
+ Reviewed by James Robinson.
+
+ * chromium/public/WebLayerTreeView.h: Plumb setDeviceScaleFactor and
+ deviceScaleFactor functions.
+ (WebKit::WebLayerTreeView::Settings::Settings): Remove deviceScaleFactor from
+ settings as it is now dynamic.
+ (Settings):
+ (WebLayerTreeView):
+
2012-06-14 Ian Vollick <[email protected]>
[chromium] Certain settings in CCSettings could be global
Modified: trunk/Source/Platform/chromium/public/WebLayerTreeView.h (120543 => 120544)
--- trunk/Source/Platform/chromium/public/WebLayerTreeView.h 2012-06-17 01:05:07 UTC (rev 120543)
+++ trunk/Source/Platform/chromium/public/WebLayerTreeView.h 2012-06-17 03:55:36 UTC (rev 120544)
@@ -57,7 +57,6 @@
, refreshRate(0)
, defaultTileSize(WebSize(256, 256))
, maxUntiledLayerSize(WebSize(512, 512))
- , deviceScaleFactor(1)
{
}
@@ -69,7 +68,6 @@
double refreshRate;
WebSize defaultTileSize;
WebSize maxUntiledLayerSize;
- float deviceScaleFactor;
#if WEBKIT_IMPLEMENTATION
operator WebCore::CCLayerTreeSettings() const;
#endif
@@ -109,6 +107,9 @@
WEBKIT_EXPORT void setViewportSize(const WebSize&);
WEBKIT_EXPORT WebSize viewportSize() const;
+ WEBKIT_EXPORT void setDeviceScaleFactor(float);
+ WEBKIT_EXPORT float deviceScaleFactor() const;
+
// Sets the background color for the viewport.
WEBKIT_EXPORT void setBackgroundColor(WebColor);
Modified: trunk/Source/WebCore/ChangeLog (120543 => 120544)
--- trunk/Source/WebCore/ChangeLog 2012-06-17 01:05:07 UTC (rev 120543)
+++ trunk/Source/WebCore/ChangeLog 2012-06-17 03:55:36 UTC (rev 120544)
@@ -1,3 +1,39 @@
+2012-06-16 Robert Kroeger <[email protected]>
+
+ [chromium] Make the deviceScaleFactor dynamically adjustable.
+ https://bugs.webkit.org/show_bug.cgi?id=88916
+
+ Reviewed by James Robinson.
+
+ * platform/graphics/chromium/cc/CCLayerTreeHost.cpp: Removed use of static
+ deviceScaleFactor from settings with dyanmic m_deviceScaleFactor
+ (WebCore::CCLayerTreeHost::CCLayerTreeHost):
+ (WebCore::CCLayerTreeHost::finishCommitOnImplThread):
+ (WebCore::CCLayerTreeHost::setViewportSize):
+ (WebCore::CCLayerTreeHost::updateLayers):
+ (WebCore::CCLayerTreeHost::setDeviceScaleFactor): Added function to
+ set deviceScaleFactor.
+ (WebCore):
+ * platform/graphics/chromium/cc/CCLayerTreeHost.h:
+ (WebCore::CCSettings::CCSettings): Removed static deviceScaleFactor
+ (CCSettings):
+ (CCLayerTreeHost): Added dynamic m_deviceScaleFactor in its place.
+ (WebCore::CCLayerTreeHost::deviceScaleFactor):
+ * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp: Same as above.
+ (WebCore::CCLayerTreeHostImpl::CCLayerTreeHostImpl):
+ (WebCore::CCLayerTreeHostImpl::calculateRenderSurfaceLayerList):
+ (WebCore::CCLayerTreeHostImpl::setViewportSize):
+ (WebCore::CCLayerTreeHostImpl::setDeviceScaleFactor): Added function to
+ set deviceScaleFactor.
+ (WebCore):
+ (WebCore::CCLayerTreeHostImpl::updateMaxScrollPosition):
+ (WebCore::CCLayerTreeHostImpl::scrollBegin):
+ (WebCore::CCLayerTreeHostImpl::computePinchZoomDeltas):
+ * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h: Added dynamic
+ m_deviceScaleFactor instance variable.
+ (WebCore::CCLayerTreeHostImpl::deviceScaleFactor):
+ (CCLayerTreeHostImpl):
+
2012-06-16 Sheriff Bot <[email protected]>
Unreviewed, rolling out r120536.
Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp (120543 => 120544)
--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp 2012-06-17 01:05:07 UTC (rev 120543)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp 2012-06-17 03:55:36 UTC (rev 120544)
@@ -78,6 +78,7 @@
, m_numTimesRecreateShouldFail(0)
, m_numFailedRecreateAttempts(0)
, m_settings(settings)
+ , m_deviceScaleFactor(1)
, m_visible(true)
, m_memoryAllocationBytes(0)
, m_memoryAllocationIsForDisplay(false)
@@ -251,6 +252,7 @@
hostImpl->setSourceFrameNumber(frameNumber());
hostImpl->setViewportSize(viewportSize());
+ hostImpl->setDeviceScaleFactor(deviceScaleFactor());
hostImpl->setPageScaleFactorAndLimits(m_pageScaleFactor, m_minPageScaleFactor, m_maxPageScaleFactor);
hostImpl->setBackgroundColor(m_backgroundColor);
hostImpl->setHasTransparentBackground(m_hasTransparentBackground);
@@ -385,7 +387,7 @@
m_viewportSize = viewportSize;
m_deviceViewportSize = viewportSize;
- m_deviceViewportSize.scale(m_settings.deviceScaleFactor);
+ m_deviceViewportSize.scale(m_deviceScaleFactor);
setNeedsCommit();
}
@@ -519,7 +521,7 @@
TRACE_EVENT("CCLayerTreeHost::updateLayers::calcDrawEtc", this, 0);
WebTransformationMatrix identityMatrix;
WebTransformationMatrix deviceScaleTransform;
- deviceScaleTransform.scale(m_settings.deviceScaleFactor);
+ deviceScaleTransform.scale(m_deviceScaleFactor);
CCLayerTreeHostCommon::calculateDrawTransforms(rootLayer, rootLayer, deviceScaleTransform, identityMatrix, updateList, rootRenderSurface->layerList(), layerRendererCapabilities().maxTextureSize);
FloatRect rootScissorRect(FloatPoint(0, 0), viewportSize());
@@ -707,6 +709,17 @@
m_deleteTextureAfterCommitList.append(texture);
}
+void CCLayerTreeHost::setDeviceScaleFactor(float deviceScaleFactor)
+{
+ if (deviceScaleFactor == m_deviceScaleFactor)
+ return;
+ m_deviceScaleFactor = deviceScaleFactor;
+
+ m_deviceViewportSize = m_viewportSize;
+ m_deviceViewportSize.scale(m_deviceScaleFactor);
+ setNeedsCommit();
+}
+
void CCLayerTreeHost::animateLayers(double monotonicTime)
{
if (!CCSettings::acceleratedAnimationEnabled() || !m_needsAnimateLayers)
Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h (120543 => 120544)
--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h 2012-06-17 01:05:07 UTC (rev 120543)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h 2012-06-17 03:55:36 UTC (rev 120544)
@@ -86,7 +86,6 @@
, maxPartialTextureUpdates(std::numeric_limits<size_t>::max())
, defaultTileSize(IntSize(256, 256))
, maxUntiledLayerSize(IntSize(512, 512))
- , deviceScaleFactor(1)
{ }
bool acceleratePainting;
@@ -100,7 +99,6 @@
size_t maxPartialTextureUpdates;
IntSize defaultTileSize;
IntSize maxUntiledLayerSize;
- float deviceScaleFactor;
};
// Provides information on an Impl's rendering capabilities back to the CCLayerTreeHost
@@ -246,6 +244,9 @@
bool requestPartialTextureUpdate();
void deleteTextureAfterCommit(PassOwnPtr<ManagedTexture>);
+ void setDeviceScaleFactor(float);
+ float deviceScaleFactor() const { return m_deviceScaleFactor; }
+
protected:
CCLayerTreeHost(CCLayerTreeHostClient*, const CCLayerTreeSettings&);
bool initialize();
@@ -292,6 +293,7 @@
IntSize m_viewportSize;
IntSize m_deviceViewportSize;
+ float m_deviceScaleFactor;
bool m_visible;
Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp (120543 => 120544)
--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp 2012-06-17 01:05:07 UTC (rev 120543)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp 2012-06-17 03:55:36 UTC (rev 120544)
@@ -119,6 +119,7 @@
, m_currentlyScrollingLayerImpl(0)
, m_scrollingLayerIdFromPreviousTree(-1)
, m_settings(settings)
+ , m_deviceScaleFactor(1)
, m_visible(true)
, m_sourceFrameCanBeDrawn(true)
, m_headsUpDisplay(CCHeadsUpDisplay::create())
@@ -252,7 +253,7 @@
TRACE_EVENT0("cc", "CCLayerTreeHostImpl::calcDrawEtc");
WebTransformationMatrix identityMatrix;
WebTransformationMatrix deviceScaleTransform;
- deviceScaleTransform.scale(m_settings.deviceScaleFactor);
+ deviceScaleTransform.scale(m_deviceScaleFactor);
CCLayerTreeHostCommon::calculateDrawTransforms(m_rootLayerImpl.get(), m_rootLayerImpl.get(), deviceScaleTransform, identityMatrix, renderSurfaceLayerList, m_rootLayerImpl->renderSurface()->layerList(), &m_layerSorter, layerRendererCapabilities().maxTextureSize);
if (layerRendererCapabilities().usingPartialSwap || settings().showSurfaceDamageRects)
@@ -603,7 +604,7 @@
m_viewportSize = viewportSize;
m_deviceViewportSize = viewportSize;
- m_deviceViewportSize.scale(m_settings.deviceScaleFactor);
+ m_deviceViewportSize.scale(m_deviceScaleFactor);
updateMaxScrollPosition();
@@ -639,6 +640,20 @@
applyPageScaleDeltaToScrollLayers(layerImpl->children()[i].get(), pageScaleDelta);
}
+void CCLayerTreeHostImpl::setDeviceScaleFactor(float newDeviceScaleFactor)
+{
+ if (newDeviceScaleFactor == deviceScaleFactor())
+ return;
+ m_deviceScaleFactor = newDeviceScaleFactor;
+
+ m_deviceViewportSize = viewportSize();
+ m_deviceViewportSize.scale(m_deviceScaleFactor);
+ updateMaxScrollPosition();
+ if (m_layerRenderer)
+ m_layerRenderer->viewportChanged();
+}
+
+
void CCLayerTreeHostImpl::setPageScaleFactorAndLimits(float pageScale, float minPageScale, float maxPageScale)
{
if (!pageScale)
@@ -691,11 +706,11 @@
viewBounds = clipLayer->bounds();
}
viewBounds.scale(1 / m_pageScaleDelta);
- viewBounds.scale(m_settings.deviceScaleFactor);
+ viewBounds.scale(m_deviceScaleFactor);
// maxScroll is computed in physical pixels, but scroll positions are in layout pixels.
IntSize maxScroll = contentSize() - expandedIntSize(viewBounds);
- maxScroll.scale(1 / m_settings.deviceScaleFactor);
+ maxScroll.scale(1 / m_deviceScaleFactor);
// The viewport may be larger than the contents in some cases, such as
// having a vertical scrollbar but no horizontal overflow.
maxScroll.clampNegativeToZero();
@@ -738,7 +753,7 @@
return ScrollIgnored;
IntPoint deviceViewportPoint = viewportPoint;
- deviceViewportPoint.scale(m_settings.deviceScaleFactor, m_settings.deviceScaleFactor);
+ deviceViewportPoint.scale(m_deviceScaleFactor, m_deviceScaleFactor);
// First find out which layer was hit from the saved list of visible layers
// in the most recent frame.
@@ -886,7 +901,7 @@
scrollEnd -= anchor;
scrollEnd = scrollEnd.shrunkTo(roundedIntSize(scaledContentsSize - m_deviceViewportSize)).expandedTo(FloatSize(0, 0));
scrollEnd.scale(1 / pageScaleDeltaToSend);
- scrollEnd.scale(m_settings.deviceScaleFactor);
+ scrollEnd.scale(m_deviceScaleFactor);
makeScrollAndScaleSet(scrollInfo, roundedIntSize(scrollEnd), m_minPageScale);
}
Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h (120543 => 120544)
--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h 2012-06-17 01:05:07 UTC (rev 120543)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h 2012-06-17 03:55:36 UTC (rev 120544)
@@ -153,6 +153,9 @@
const IntSize& viewportSize() const { return m_viewportSize; }
void setViewportSize(const IntSize&);
+ float deviceScaleFactor() const { return m_deviceScaleFactor; }
+ void setDeviceScaleFactor(float);
+
float pageScale() const { return m_pageScale; }
void setPageScaleFactorAndLimits(float pageScale, float minPageScale, float maxPageScale);
@@ -225,6 +228,7 @@
CCLayerTreeSettings m_settings;
IntSize m_viewportSize;
IntSize m_deviceViewportSize;
+ float m_deviceScaleFactor;
bool m_visible;
bool m_sourceFrameCanBeDrawn;
Modified: trunk/Source/WebKit/chromium/ChangeLog (120543 => 120544)
--- trunk/Source/WebKit/chromium/ChangeLog 2012-06-17 01:05:07 UTC (rev 120543)
+++ trunk/Source/WebKit/chromium/ChangeLog 2012-06-17 03:55:36 UTC (rev 120544)
@@ -1,3 +1,25 @@
+2012-06-16 Robert Kroeger <[email protected]>
+
+ [chromium] Make the deviceScaleFactor dynamically adjustable.
+ https://bugs.webkit.org/show_bug.cgi?id=88916
+
+ Reviewed by James Robinson.
+
+ * src/WebLayerTreeView.cpp:
+ (WebKit::WebLayerTreeView::Settings::operator CCSettings): Removed unused
+ static deviceScaleFactor.
+ (WebKit::WebLayerTreeView::setDeviceScaleFactor):
+ (WebKit):
+ (WebKit::WebLayerTreeView::deviceScaleFactor):
+ * src/WebViewImpl.cpp:
+ (WebKit::WebViewImpl::setDeviceScaleFactor): Push the dynamic deviceScaleFactor
+ to the compositor as required.
+ (WebKit::WebViewImpl::setIsAcceleratedCompositingActive):
+ * tests/CCLayerTreeHostTest.cpp: Tests use dynamic setDeviceScaleFactor.
+ (WTF::CCLayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers::CCLayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers):
+ (WTF::CCLayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers::beginTest):
+ (WTF::CCLayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers::commitCompleteOnCCThread):
+
2012-06-16 Sheriff Bot <[email protected]>
Unreviewed, rolling out r120536.
Modified: trunk/Source/WebKit/chromium/src/WebLayerTreeView.cpp (120543 => 120544)
--- trunk/Source/WebKit/chromium/src/WebLayerTreeView.cpp 2012-06-17 01:05:07 UTC (rev 120543)
+++ trunk/Source/WebKit/chromium/src/WebLayerTreeView.cpp 2012-06-17 03:55:36 UTC (rev 120544)
@@ -48,7 +48,6 @@
settings.refreshRate = refreshRate;
settings.defaultTileSize = defaultTileSize;
settings.maxUntiledLayerSize = maxUntiledLayerSize;
- settings.deviceScaleFactor = deviceScaleFactor;
// FIXME: showFPSCounter / showPlatformLayerTree / maxPartialTextureUpdates aren't supported currently.
return settings;
@@ -99,6 +98,16 @@
return WebSize(m_private->layerTreeHost()->viewportSize());
}
+void WebLayerTreeView::setDeviceScaleFactor(const float deviceScaleFactor)
+{
+ m_private->layerTreeHost()->setDeviceScaleFactor(deviceScaleFactor);
+}
+
+float WebLayerTreeView::deviceScaleFactor() const
+{
+ return m_private->layerTreeHost()->deviceScaleFactor();
+}
+
void WebLayerTreeView::setBackgroundColor(WebColor color)
{
m_private->layerTreeHost()->setBackgroundColor(color);
Modified: trunk/Source/WebKit/chromium/src/WebViewImpl.cpp (120543 => 120544)
--- trunk/Source/WebKit/chromium/src/WebViewImpl.cpp 2012-06-17 01:05:07 UTC (rev 120543)
+++ trunk/Source/WebKit/chromium/src/WebViewImpl.cpp 2012-06-17 03:55:36 UTC (rev 120544)
@@ -2486,6 +2486,10 @@
// needs to match the one in the compositor.
ASSERT(scaleFactor == m_deviceScaleInCompositor);
}
+ if (!m_layerTreeView.isNull() && m_webSettings->applyDefaultDeviceScaleFactorInCompositor()) {
+ m_deviceScaleInCompositor = page()->deviceScaleFactor();
+ m_layerTreeView.setDeviceScaleFactor(m_deviceScaleInCompositor);
+ }
}
bool WebViewImpl::isFixedLayoutModeEnabled() const
@@ -3466,16 +3470,15 @@
m_nonCompositedContentHost->setShowDebugBorders(page()->settings()->showDebugBorders());
m_nonCompositedContentHost->setOpaque(!isTransparent());
- if (m_webSettings->applyDefaultDeviceScaleFactorInCompositor() && page()->deviceScaleFactor() != 1) {
- ASSERT(page()->deviceScaleFactor());
+ m_layerTreeView.initialize(this, m_rootLayer, layerTreeViewSettings);
+ if (!m_layerTreeView.isNull()) {
+ if (m_webSettings->applyDefaultDeviceScaleFactorInCompositor() && page()->deviceScaleFactor() != 1) {
+ ASSERT(page()->deviceScaleFactor());
- m_deviceScaleInCompositor = page()->deviceScaleFactor();
- layerTreeViewSettings.deviceScaleFactor = m_deviceScaleInCompositor;
- setDeviceScaleFactor(m_deviceScaleInCompositor);
- }
+ m_deviceScaleInCompositor = page()->deviceScaleFactor();
+ setDeviceScaleFactor(m_deviceScaleInCompositor);
+ }
- m_layerTreeView.initialize(this, m_rootLayer, layerTreeViewSettings);
- if (!m_layerTreeView.isNull()) {
m_layerTreeView.setPageScaleFactorAndLimits(pageScaleFactor(), m_minimumPageScaleFactor, m_maximumPageScaleFactor);
if (m_compositorSurfaceReady)
m_layerTreeView.setSurfaceReady();
Modified: trunk/Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp (120543 => 120544)
--- trunk/Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp 2012-06-17 01:05:07 UTC (rev 120543)
+++ trunk/Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp 2012-06-17 03:55:36 UTC (rev 120544)
@@ -1275,13 +1275,13 @@
: m_rootLayer(ContentLayerChromium::create(&m_delegate))
, m_childLayer(ContentLayerChromium::create(&m_delegate))
{
- m_settings.deviceScaleFactor = 1.5;
}
virtual void beginTest()
{
// The device viewport should be scaled by the device scale factor.
m_layerTreeHost->setViewportSize(IntSize(40, 40));
+ m_layerTreeHost->setDeviceScaleFactor(1.5);
EXPECT_EQ(IntSize(40, 40), m_layerTreeHost->viewportSize());
EXPECT_EQ(IntSize(60, 60), m_layerTreeHost->deviceViewportSize());
@@ -1307,7 +1307,7 @@
// Should only do one commit.
EXPECT_EQ(0, impl->sourceFrameNumber());
// Device scale factor should come over to impl.
- EXPECT_NEAR(impl->settings().deviceScaleFactor, 1.5, 0.00001);
+ EXPECT_NEAR(impl->deviceScaleFactor(), 1.5, 0.00001);
// Both layers are on impl.
ASSERT_EQ(1u, impl->rootLayer()->children().size());
@@ -1336,7 +1336,7 @@
EXPECT_EQ_RECT(IntRect(0, 0, 60, 60), root->renderSurface()->contentRect());
WebTransformationMatrix scaleTransform;
- scaleTransform.scale(impl->settings().deviceScaleFactor);
+ scaleTransform.scale(impl->deviceScaleFactor());
// The root layer is scaled by 2x.
WebTransformationMatrix rootScreenSpaceTransform = scaleTransform;