Changeset 117535 in webkit
- Timestamp:
- May 17, 2012 8:36:12 PM (12 years ago)
- Location:
- trunk/Source
- Files:
-
- 20 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/Platform/ChangeLog
r117529 r117535 1 2012-05-17 Dana Jansens <danakj@chromium.org> 2 3 [chromium] Scale all compositor output by the defaultDeviceScaleFactor 4 https://bugs.webkit.org/show_bug.cgi?id=86051 5 6 Reviewed by James Robinson. 7 8 * chromium/public/WebLayerTreeView.h: 9 (WebKit::WebLayerTreeView::Settings::Settings): 10 (Settings): 11 1 12 2012-05-17 Ami Fischman <fischman@chromium.org> 2 13 -
trunk/Source/Platform/chromium/public/WebLayerTreeView.h
r117521 r117535 60 60 , defaultTileSize(WebSize(256, 256)) 61 61 , maxUntiledLayerSize(WebSize(512, 512)) 62 , deviceScaleFactor(1) 62 63 { 63 64 } … … 73 74 WebSize defaultTileSize; 74 75 WebSize maxUntiledLayerSize; 76 float deviceScaleFactor; 75 77 #if WEBKIT_IMPLEMENTATION 76 78 operator WebCore::CCSettings() const; -
trunk/Source/WebCore/ChangeLog
r117534 r117535 1 2012-05-17 Dana Jansens <danakj@chromium.org> 2 3 [chromium] Scale all compositor output by the defaultDeviceScaleFactor 4 https://bugs.webkit.org/show_bug.cgi?id=86051 5 6 Reviewed by James Robinson. 7 8 On initialization, give the defaultDeviceScaleFactor to the compositor 9 to have it scale all output from WebCore's layout size to physical 10 pixels. This allows us to scale up to high-dpi devices without using 11 fixed-layout, so we can leave the WebCore frame size in layout pixels, 12 while drawing the frame into a larger physical pixel size. 13 14 CCLayerTreeHost becomes aware of the deviceScaleFactor and scales all 15 output by this factor by scaling the viewport and all drawing 16 transforms. 17 18 Anything that works in physical pixels (content space), uses the 19 deviceViewportSize() in place of the viewportSize(), since when 20 deviceScaleFactor != 1 in CCLayerTreeHost, the WebCore viewport 21 is no longer physical pixels. 22 23 Scroll positions are in layout pixels, and must be scaled to/from 24 content space within the compositor. 25 26 Unit tests: CCLayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers 27 28 * platform/graphics/chromium/LayerRendererChromium.h: 29 (LayerRendererChromiumClient): 30 (WebCore::LayerRendererChromium::viewportSize): 31 (WebCore::LayerRendererChromium::viewportWidth): 32 (WebCore::LayerRendererChromium::viewportHeight): 33 (LayerRendererChromium): 34 * platform/graphics/chromium/cc/CCLayerTreeHost.cpp: 35 (WebCore::CCLayerTreeHost::initializeLayerRenderer): 36 (WebCore::CCLayerTreeHost::setViewportSize): 37 (WebCore::CCLayerTreeHost::updateLayers): 38 (WebCore::CCLayerTreeHost::paintLayerContents): 39 * platform/graphics/chromium/cc/CCLayerTreeHost.h: 40 (WebCore::CCSettings::CCSettings): 41 (CCSettings): 42 (CCLayerTreeHost): 43 (WebCore::CCLayerTreeHost::deviceViewportSize): 44 * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp: 45 (WebCore::CCLayerTreeHostImpl::calculateRenderSurfaceLayerList): 46 (WebCore::CCLayerTreeHostImpl::calculateRenderPasses): 47 (WebCore::CCLayerTreeHostImpl::setViewportSize): 48 (WebCore::CCLayerTreeHostImpl::updateMaxScrollPosition): 49 (WebCore::CCLayerTreeHostImpl::scrollBegin): 50 (WebCore::CCLayerTreeHostImpl::computePinchZoomDeltas): 51 * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h: 52 (WebCore::CCLayerTreeHostImpl::viewportSize): 53 (CCLayerTreeHostImpl): 54 1 55 2012-05-17 Hayato Ito <hayato@chromium.org> 2 56 -
trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h
r116779 r117535 67 67 class LayerRendererChromiumClient { 68 68 public: 69 virtual const IntSize& viewportSize() const = 0;69 virtual const IntSize& deviceViewportSize() const = 0; 70 70 virtual const CCSettings& settings() const = 0; 71 71 virtual void didLoseContext() = 0; … … 91 91 bool contextSupportsMapSub() const { return m_capabilities.usingMapSub; } 92 92 93 const IntSize& viewportSize() { return m_client->viewportSize(); }94 int viewportWidth() { return viewportSize().width(); }95 int viewportHeight() { return viewportSize().height(); }96 97 93 void viewportChanged(); 98 94 … … 151 147 152 148 private: 149 const IntSize& viewportSize() { return m_client->deviceViewportSize(); } 150 int viewportWidth() { return viewportSize().width(); } 151 int viewportHeight() { return viewportSize().height(); } 152 153 153 void drawQuad(const CCDrawQuad*, const FloatRect& surfaceDamageRect); 154 154 void drawCheckerboardQuad(const CCCheckerboardDrawQuad*); -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp
r117521 r117535 144 144 m_settings.maxPartialTextureUpdates = min(m_settings.maxPartialTextureUpdates, m_proxy->maxPartialTextureUpdates()); 145 145 146 m_contentsTextureManager = TextureManager::create(TextureManager::highLimitBytes( viewportSize()),147 TextureManager::reclaimLimitBytes( viewportSize()),146 m_contentsTextureManager = TextureManager::create(TextureManager::highLimitBytes(deviceViewportSize()), 147 TextureManager::reclaimLimitBytes(deviceViewportSize()), 148 148 m_proxy->layerRendererCapabilities().maxTextureSize); 149 149 … … 368 368 369 369 m_viewportSize = viewportSize; 370 371 m_deviceViewportSize = viewportSize; 372 m_deviceViewportSize.scale(m_settings.deviceScaleFactor); 373 370 374 setNeedsCommit(); 371 375 } … … 484 488 if (!rootLayer->renderSurface()) 485 489 rootLayer->createRenderSurface(); 486 rootLayer->renderSurface()->setContentRect(IntRect(IntPoint(0, 0), viewportSize()));487 488 IntRect rootClipRect(IntPoint(), viewportSize());490 rootLayer->renderSurface()->setContentRect(IntRect(IntPoint(0, 0), deviceViewportSize())); 491 492 IntRect rootClipRect(IntPoint(), deviceViewportSize()); 489 493 rootLayer->setClipRect(rootClipRect); 490 494 … … 495 499 rootRenderSurface->clearLayerList(); 496 500 497 TransformationMatrix identityMatrix;498 501 { 499 502 TRACE_EVENT("CCLayerTreeHost::updateLayers::calcDrawEtc", this, 0); 500 CCLayerTreeHostCommon::calculateDrawTransformsAndVisibility(rootLayer, rootLayer, identityMatrix, identityMatrix, updateList, rootRenderSurface->layerList(), layerRendererCapabilities().maxTextureSize); 503 TransformationMatrix identityMatrix; 504 TransformationMatrix deviceScaleTransform; 505 deviceScaleTransform.scale(m_settings.deviceScaleFactor); 506 CCLayerTreeHostCommon::calculateDrawTransformsAndVisibility(rootLayer, rootLayer, deviceScaleTransform, identityMatrix, updateList, rootRenderSurface->layerList(), layerRendererCapabilities().maxTextureSize); 501 507 } 502 508 … … 576 582 577 583 bool recordMetricsForFrame = true; // FIXME: In the future, disable this when about:tracing is off. 578 CCOcclusionTracker occlusionTracker(IntRect(IntPoint(), viewportSize()), recordMetricsForFrame);584 CCOcclusionTracker occlusionTracker(IntRect(IntPoint(), deviceViewportSize()), recordMetricsForFrame); 579 585 occlusionTracker.setMinimumTrackingSize(CCOcclusionTracker::preferredMinimumTrackingSize()); 580 586 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h
r117521 r117535 86 86 , maxPartialTextureUpdates(std::numeric_limits<size_t>::max()) 87 87 , defaultTileSize(IntSize(256, 256)) 88 , maxUntiledLayerSize(IntSize(512, 512)) { } 88 , maxUntiledLayerSize(IntSize(512, 512)) 89 , deviceScaleFactor(1) 90 { } 89 91 90 92 bool acceleratePainting; … … 101 103 IntSize defaultTileSize; 102 104 IntSize maxUntiledLayerSize; 105 float deviceScaleFactor; 103 106 }; 104 107 … … 214 217 215 218 const IntSize& viewportSize() const { return m_viewportSize; } 219 // Gives the viewport size in device/content space. 220 const IntSize& deviceViewportSize() const { return m_deviceViewportSize; } 216 221 217 222 void setPageScaleFactorAndLimits(float pageScaleFactor, float minPageScaleFactor, float maxPageScaleFactor); … … 282 287 283 288 IntSize m_viewportSize; 289 IntSize m_deviceViewportSize; 284 290 bool m_visible; 285 291 typedef HashMap<GraphicsContext3D*, RefPtr<RateLimiter> > RateLimiterMap; -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp
r117171 r117535 252 252 m_rootLayerImpl->createRenderSurface(); 253 253 m_rootLayerImpl->renderSurface()->clearLayerList(); 254 m_rootLayerImpl->renderSurface()->setContentRect(IntRect(IntPoint(), viewportSize()));255 256 m_rootLayerImpl->setClipRect(IntRect(IntPoint(), viewportSize()));254 m_rootLayerImpl->renderSurface()->setContentRect(IntRect(IntPoint(), deviceViewportSize())); 255 256 m_rootLayerImpl->setClipRect(IntRect(IntPoint(), deviceViewportSize())); 257 257 258 258 { 259 TRACE_EVENT("CCLayerTreeHostImpl::calcDrawEtc", this, 0); 259 260 TransformationMatrix identityMatrix; 260 TRACE_EVENT("CCLayerTreeHostImpl::calcDrawEtc", this, 0); 261 CCLayerTreeHostCommon::calculateDrawTransformsAndVisibility(m_rootLayerImpl.get(), m_rootLayerImpl.get(), identityMatrix, identityMatrix, renderSurfaceLayerList, m_rootLayerImpl->renderSurface()->layerList(), &m_layerSorter, layerRendererCapabilities().maxTextureSize); 261 TransformationMatrix deviceScaleTransform; 262 deviceScaleTransform.scale(m_settings.deviceScaleFactor); 263 CCLayerTreeHostCommon::calculateDrawTransformsAndVisibility(m_rootLayerImpl.get(), m_rootLayerImpl.get(), deviceScaleTransform, identityMatrix, renderSurfaceLayerList, m_rootLayerImpl->renderSurface()->layerList(), &m_layerSorter, layerRendererCapabilities().maxTextureSize); 262 264 } 263 265 } … … 296 298 scissorRect = enclosingIntRect(m_rootDamageRect); 297 299 else 298 scissorRect = IntRect(IntPoint(), viewportSize());300 scissorRect = IntRect(IntPoint(), deviceViewportSize()); 299 301 300 302 bool recordMetricsForFrame = true; // FIXME: In the future, disable this when about:tracing is off. … … 553 555 554 556 m_viewportSize = viewportSize; 557 558 m_deviceViewportSize = viewportSize; 559 m_deviceViewportSize.scale(m_settings.deviceScaleFactor); 560 555 561 updateMaxScrollPosition(); 556 562 … … 629 635 } 630 636 viewBounds.scale(1 / m_pageScaleDelta); 631 637 viewBounds.scale(m_settings.deviceScaleFactor); 638 639 // maxScroll is computed in physical pixels, but scroll positions are in layout pixels. 632 640 IntSize maxScroll = contentSize() - expandedIntSize(viewBounds); 641 maxScroll.scale(1 / m_settings.deviceScaleFactor); 633 642 // The viewport may be larger than the contents in some cases, such as 634 643 // having a vertical scrollbar but no horizontal overflow. … … 658 667 } 659 668 660 IntPoint scrollLayerContentPoint(m_scrollLayerImpl->screenSpaceTransform().inverse().mapPoint(viewportPoint)); 661 if (m_scrollLayerImpl->nonFastScrollableRegion().contains(scrollLayerContentPoint)) { 669 IntPoint deviceViewportPoint = viewportPoint; 670 deviceViewportPoint.scale(m_settings.deviceScaleFactor, m_settings.deviceScaleFactor); 671 672 // The inverse of the screen space transform takes us from physical pixels to layout pixels. 673 IntPoint scrollLayerPoint(m_scrollLayerImpl->screenSpaceTransform().inverse().mapPoint(deviceViewportPoint)); 674 675 if (m_scrollLayerImpl->nonFastScrollableRegion().contains(scrollLayerPoint)) { 662 676 TRACE_EVENT("scrollBegin Failed nonFastScrollableRegion", this, 0); 663 677 return ScrollFailed; … … 758 772 scrollEnd.scale(m_minPageScale / scaleBegin); 759 773 scrollEnd -= anchor; 760 scrollEnd = scrollEnd.shrunkTo(roundedIntSize(scaledContentsSize - m_ viewportSize)).expandedTo(FloatSize(0, 0));774 scrollEnd = scrollEnd.shrunkTo(roundedIntSize(scaledContentsSize - m_deviceViewportSize)).expandedTo(FloatSize(0, 0)); 761 775 scrollEnd.scale(1 / pageScaleDeltaToSend); 776 scrollEnd.scale(m_settings.deviceScaleFactor); 762 777 763 778 makeScrollAndScaleSet(scrollInfo, roundedIntSize(scrollEnd), m_minPageScale); -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h
r116779 r117535 106 106 107 107 // LayerRendererChromiumClient implementation 108 virtual const IntSize& viewportSize() const OVERRIDE { return m_viewportSize; }108 virtual const IntSize& deviceViewportSize() const OVERRIDE { return m_deviceViewportSize; } 109 109 virtual const CCSettings& settings() const OVERRIDE { return m_settings; } 110 110 virtual void didLoseContext() OVERRIDE; … … 145 145 void setSourceFrameNumber(int frameNumber) { m_sourceFrameNumber = frameNumber; } 146 146 147 const IntSize& viewportSize() const { return m_viewportSize; } 147 148 void setViewportSize(const IntSize&); 148 149 150 float pageScale() const { return m_pageScale; } 149 151 void setPageScaleFactorAndLimits(float pageScale, float minPageScale, float maxPageScale); 150 float pageScale() const { return m_pageScale; }151 152 152 153 PassOwnPtr<CCScrollAndScaleSet> processScrollDeltas(); … … 170 171 void animatePageScale(double monotonicTime); 171 172 void animateGestures(double monotonicTime); 173 174 // Exposed for testing. 175 void calculateRenderSurfaceLayerList(CCLayerList&); 172 176 173 177 // Virtual for testing. … … 188 192 void updateMaxScrollPosition(); 189 193 void trackDamageForAllSurfaces(CCLayerImpl* rootDrawLayer, const CCLayerList& renderSurfaceLayerList); 190 void calculateRenderSurfaceLayerList(CCLayerList&);191 194 192 195 // Returns false if the frame should not be displayed. This function should … … 206 209 CCSettings m_settings; 207 210 IntSize m_viewportSize; 211 IntSize m_deviceViewportSize; 208 212 bool m_visible; 209 213 -
trunk/Source/WebKit/chromium/ChangeLog
r117521 r117535 1 2012-05-17 Dana Jansens <danakj@chromium.org> 2 3 [chromium] Scale all compositor output by the defaultDeviceScaleFactor 4 https://bugs.webkit.org/show_bug.cgi?id=86051 5 6 Reviewed by James Robinson. 7 8 Add the applyDefaultDeviceScaleInCompositor setting. When enabled, we 9 apply the scale factor during compositing instead of applying it through 10 the pageScaleFactor. 11 12 NonCompositedContentHost is the GraphicLayerClient for the GraphicsLayer 13 containing the document's body. It needs to report the page/device scale 14 that should be used when scaling the contents of the GraphicsLayer, and 15 when changes occur to them such that its contentsSize or contentsScale 16 is affected. 17 18 Store the deviceScaleFactor being used in the compositor. The remainder 19 of the deviceScaleFactor() is being applied to the pageScale. 20 21 * public/WebSettings.h: 22 * src/NonCompositedContentHost.cpp: 23 (WebKit::NonCompositedContentHost::NonCompositedContentHost): 24 (WebKit::NonCompositedContentHost::setViewport): 25 * src/NonCompositedContentHost.h: 26 (NonCompositedContentHost): 27 * src/WebLayerTreeView.cpp: 28 (WebKit::WebLayerTreeView::Settings::operator CCSettings): 29 * src/WebSettingsImpl.cpp: 30 (WebKit::WebSettingsImpl::setApplyDefaultDeviceScaleFactorInCompositor): 31 (WebKit): 32 * src/WebSettingsImpl.h: 33 (WebSettingsImpl): 34 (WebKit::WebSettingsImpl::applyDefaultDeviceScaleFactorInCompositor): 35 * src/WebViewImpl.cpp: 36 (WebKit::WebViewImpl::WebViewImpl): 37 (WebKit::WebViewImpl::setPageScaleFactor): 38 (WebKit::WebViewImpl::setDeviceScaleFactor): 39 (WebKit::WebViewImpl::enableFixedLayoutMode): 40 (WebKit::WebViewImpl::computePageScaleFactorLimits): 41 (WebKit::WebViewImpl::setIsAcceleratedCompositingActive): 42 (WebKit::WebViewImpl::updateLayerTreeViewport): 43 * src/WebViewImpl.h: 44 * tests/CCLayerTreeHostTest.cpp: 45 (MockLayerTreeHostImpl): 46 (WTF::MockLayerTreeHost::createLayerTreeHostImpl): 47 (CCLayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers): 48 (WTF::CCLayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers::CCLayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers): 49 (WTF::CCLayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers::beginTest): 50 (WTF::CCLayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers::commitCompleteOnCCThread): 51 (WTF::CCLayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers::afterTest): 52 (WTF): 53 (WTF::TEST_F): 54 * tests/LayerRendererChromiumTest.cpp: 55 * tests/WebFrameTest.cpp: 56 (WebKit::TEST_F): 57 1 58 2012-05-17 Vangelis Kokkevis <vangelis@chromium.org> 2 59 -
trunk/Source/WebKit/chromium/public/WebSettings.h
r117521 r117535 65 65 virtual void setMinimumLogicalFontSize(int) = 0; 66 66 virtual void setDefaultDeviceScaleFactor(int) = 0; 67 virtual void setApplyDefaultDeviceScaleFactorInCompositor(bool) = 0; 67 68 virtual void setDefaultTextEncodingName(const WebString&) = 0; 68 69 virtual void setJavaScriptEnabled(bool) = 0; -
trunk/Source/WebKit/chromium/src/NonCompositedContentHost.cpp
r113871 r117535 40 40 : m_contentPaint(contentPaint) 41 41 , m_showDebugBorders(false) 42 , m_deviceScaleFactor(1.0) 42 43 { 43 44 m_graphicsLayer = WebCore::GraphicsLayer::create(this); … … 93 94 } 94 95 95 void NonCompositedContentHost::setViewport(const WebCore::IntSize& viewportSize, const WebCore::IntSize& contentsSize, const WebCore::IntPoint& scrollPosition, float pageScale, int layerAdjustX)96 void NonCompositedContentHost::setViewport(const WebCore::IntSize& viewportSize, const WebCore::IntSize& contentsSize, const WebCore::IntPoint& scrollPosition, float deviceScale, int layerAdjustX) 96 97 { 97 98 if (!scrollLayer()) … … 106 107 // assumed to be scrollable. 107 108 scrollLayer()->setScrollable(true); 109 m_deviceScaleFactor = deviceScale; 110 m_graphicsLayer->deviceOrPageScaleFactorChanged(); 108 111 m_graphicsLayer->setSize(contentsSize); 109 112 … … 119 122 } else if (visibleRectChanged) 120 123 m_graphicsLayer->setNeedsDisplay(); 121 122 if (m_graphicsLayer->pageScaleFactor() != pageScale)123 m_graphicsLayer->deviceOrPageScaleFactorChanged();124 124 125 125 WebCore::LayerChromium* clipLayer = scrollLayer()->parent(); -
trunk/Source/WebKit/chromium/src/NonCompositedContentHost.h
r105757 r117535 58 58 void setBackgroundColor(const WebCore::Color&); 59 59 void setScrollLayer(WebCore::GraphicsLayer*); 60 void setViewport(const WebCore::IntSize& viewportSize, const WebCore::IntSize& contentsSize, const WebCore::IntPoint& scrollPosition, float pageScale, int layerAdjustX);60 void setViewport(const WebCore::IntSize& viewportSize, const WebCore::IntSize& contentsSize, const WebCore::IntPoint& scrollPosition, float deviceScale, int layerAdjustX); 61 61 void protectVisibleTileTextures(); 62 62 WebCore::GraphicsLayer* topLevelRootLayer() const { return m_graphicsLayer.get(); } … … 74 74 virtual bool showDebugBorders(const WebCore::GraphicsLayer*) const; 75 75 virtual bool showRepaintCounter(const WebCore::GraphicsLayer*) const; 76 // The deviceScaleFactor given to the GraphicsLayer can be non-1 when the 77 // contents are scaled in the compositor instead of by the pageScaleFactor. 78 // However, the pageScaleFactor is always baked into the GraphicsLayer's 79 // size, so it is always 1 for the GraphicsLayer. 80 virtual float deviceScaleFactor() const OVERRIDE { return m_deviceScaleFactor; } 76 81 77 82 WebCore::LayerChromium* scrollLayer(); … … 82 87 int m_layerAdjustX; 83 88 bool m_showDebugBorders; 89 float m_deviceScaleFactor; 84 90 }; 85 91 -
trunk/Source/WebKit/chromium/src/WebLayerTreeView.cpp
r117521 r117535 51 51 settings.defaultTileSize = defaultTileSize; 52 52 settings.maxUntiledLayerSize = maxUntiledLayerSize; 53 settings.deviceScaleFactor = deviceScaleFactor; 53 54 54 55 // FIXME: showFPSCounter / showPlatformLayerTree / maxPartialTextureUpdates aren't supported currently. -
trunk/Source/WebKit/chromium/src/WebSettingsImpl.cpp
r117521 r117535 52 52 , m_showPaintRects(false) 53 53 , m_viewportEnabled(false) 54 , m_applyDefaultDeviceScaleFactorInCompositor(false) 54 55 , m_defaultTileSize(WebSize(256, 256)) 55 56 , m_maxUntiledLayerSize(WebSize(512, 512)) … … 118 119 } 119 120 121 void WebSettingsImpl::setApplyDefaultDeviceScaleFactorInCompositor(bool applyDefaultDeviceScaleFactorInCompositor) 122 { 123 m_applyDefaultDeviceScaleFactorInCompositor = applyDefaultDeviceScaleFactorInCompositor; 124 } 125 120 126 void WebSettingsImpl::setDefaultTextEncodingName(const WebString& encoding) 121 127 { -
trunk/Source/WebKit/chromium/src/WebSettingsImpl.h
r117521 r117535 56 56 virtual void setMinimumLogicalFontSize(int); 57 57 virtual void setDefaultDeviceScaleFactor(int); 58 virtual void setApplyDefaultDeviceScaleFactorInCompositor(bool); 58 59 virtual void setDefaultTextEncodingName(const WebString&); 59 60 virtual void setJavaScriptEnabled(bool); … … 147 148 bool showPlatformLayerTree() const { return m_showPlatformLayerTree; } 148 149 bool showPaintRects() const { return m_showPaintRects; } 150 bool applyDefaultDeviceScaleFactorInCompositor() const { return m_applyDefaultDeviceScaleFactorInCompositor; } 149 151 WebSize defaultTileSize() const { return m_defaultTileSize; } 150 152 WebSize maxUntiledLayerSize() const { return m_maxUntiledLayerSize; } … … 156 158 bool m_showPaintRects; 157 159 bool m_viewportEnabled; 160 bool m_applyDefaultDeviceScaleFactorInCompositor; 158 161 WebSize m_defaultTileSize; 159 162 WebSize m_maxUntiledLayerSize; -
trunk/Source/WebKit/chromium/src/WebViewImpl.cpp
r117521 r117535 397 397 , m_recreatingGraphicsContext(false) 398 398 , m_compositorSurfaceReady(false) 399 , m_deviceScaleInCompositor(1) 399 400 #endif 400 401 #if ENABLE(INPUT_SPEECH) … … 2362 2363 scaleFactor = 1; 2363 2364 2365 if (m_deviceScaleInCompositor != 1) { 2366 // Don't allow page scaling when compositor scaling is being used, 2367 // as they are currently incompatible. 2368 ASSERT(scaleFactor == 1); 2369 } 2370 2364 2371 scaleFactor = clampPageScaleFactorToLimits(scaleFactor); 2365 2372 WebPoint clampedOrigin = clampOffsetAtScale(origin, scaleFactor); … … 2382 2389 2383 2390 page()->setDeviceScaleFactor(scaleFactor); 2391 2392 if (m_deviceScaleInCompositor != 1) { 2393 // Don't allow page scaling when compositor scaling is being used, 2394 // as they are currently incompatible. This means the deviceScale 2395 // needs to match the one in the compositor. 2396 ASSERT(scaleFactor == m_deviceScaleInCompositor); 2397 } 2384 2398 } 2385 2399 … … 2409 2423 #if USE(ACCELERATED_COMPOSITING) 2410 2424 // Also notify the base layer, which RenderLayerCompositor does not see. 2411 if (m_nonCompositedContentHost) { 2412 m_nonCompositedContentHost->topLevelRootLayer()->deviceOrPageScaleFactorChanged(); 2425 if (m_nonCompositedContentHost) 2413 2426 updateLayerTreeViewport(); 2414 }2415 2427 #endif 2416 2428 } … … 2446 2458 return false; 2447 2459 2448 m_minimumPageScaleFactor = min(max(m_pageDefinedMinimumPageScaleFactor, minPageScaleFactor), maxPageScaleFactor) * deviceScaleFactor();2449 m_maximumPageScaleFactor = max(min(m_pageDefinedMaximumPageScaleFactor, maxPageScaleFactor), minPageScaleFactor) * deviceScaleFactor();2460 m_minimumPageScaleFactor = min(max(m_pageDefinedMinimumPageScaleFactor, minPageScaleFactor), maxPageScaleFactor) * (deviceScaleFactor() / m_deviceScaleInCompositor); 2461 m_maximumPageScaleFactor = max(min(m_pageDefinedMaximumPageScaleFactor, maxPageScaleFactor), minPageScaleFactor) * (deviceScaleFactor() / m_deviceScaleInCompositor); 2450 2462 2451 2463 int viewWidthNotIncludingScrollbars = page()->mainFrame()->view()->visibleContentRect(false).width(); … … 3396 3408 m_nonCompositedContentHost->setShowDebugBorders(page()->settings()->showDebugBorders()); 3397 3409 3410 if (m_webSettings->applyDefaultDeviceScaleFactorInCompositor() && page()->settings()->defaultDeviceScaleFactor() != 1) { 3411 ASSERT(page()->settings()->defaultDeviceScaleFactor()); 3412 3413 m_deviceScaleInCompositor = page()->settings()->defaultDeviceScaleFactor(); 3414 layerTreeViewSettings.deviceScaleFactor = m_deviceScaleInCompositor; 3415 setDeviceScaleFactor(m_deviceScaleInCompositor); 3416 // When applying a scale factor in the compositor, we disallow page 3417 // scaling as they are currently incompatible. 3418 setPageScaleFactorLimits(1, 1); 3419 } 3420 3398 3421 m_layerTreeView.initialize(this, m_rootLayer, layerTreeViewSettings); 3399 3422 if (!m_layerTreeView.isNull()) { … … 3539 3562 layerAdjustX = -view->contentsSize().width() + view->visibleContentRect(false).width(); 3540 3563 } 3541 m_nonCompositedContentHost->setViewport(visibleRect.size(), view->contentsSize(), scroll, pageScaleFactor(), layerAdjustX); 3564 3565 // This part of the deviceScale will be used to scale the contents of 3566 // the NCCH's GraphicsLayer. 3567 float deviceScale = m_deviceScaleInCompositor; 3568 m_nonCompositedContentHost->setViewport(visibleRect.size(), view->contentsSize(), scroll, deviceScale, layerAdjustX); 3569 3542 3570 m_layerTreeView.setViewportSize(size()); 3543 3571 m_layerTreeView.setPageScaleFactorAndLimits(pageScaleFactor(), m_minimumPageScaleFactor, m_maximumPageScaleFactor); -
trunk/Source/WebKit/chromium/src/WebViewImpl.h
r117460 r117535 779 779 bool m_recreatingGraphicsContext; 780 780 bool m_compositorSurfaceReady; 781 float m_deviceScaleInCompositor; 781 782 #endif 782 783 static const WebInputEvent* m_currentInputEvent; -
trunk/Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp
r117171 r117535 59 59 using namespace WTF; 60 60 61 #define EXPECT_EQ_RECT(a, b) \ 62 EXPECT_EQ(a.x(), b.x()); \ 63 EXPECT_EQ(a.y(), b.y()); \ 64 EXPECT_EQ(a.width(), b.width()); \ 65 EXPECT_EQ(a.height(), b.height()); 66 61 67 namespace { 62 68 … … 114 120 } 115 121 122 // Make these public. 123 typedef Vector<CCLayerImpl*> CCLayerList; 124 using CCLayerTreeHostImpl::calculateRenderSurfaceLayerList; 125 116 126 protected: 117 127 virtual void animateLayers(double monotonicTime, double wallClockTime) … … 157 167 { 158 168 // For these tests, we will enable threaded animations. 159 CCSettings settings;160 settings.threadedAnimationEnabled = true;161 return MockLayerTreeHostImpl::create(m_testHooks, settings, client);169 CCSettings copySettings = settings(); 170 copySettings.threadedAnimationEnabled = true; 171 return MockLayerTreeHostImpl::create(m_testHooks, copySettings, client); 162 172 } 163 173 … … 1744 1754 void notifySyncRequired() { } 1745 1755 }; 1756 1757 class CCLayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers : public CCLayerTreeHostTest { 1758 public: 1759 1760 CCLayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers() 1761 : m_rootLayer(ContentLayerChromium::create(&m_delegate)) 1762 , m_childLayer(ContentLayerChromium::create(&m_delegate)) 1763 { 1764 m_settings.deviceScaleFactor = 1.5; 1765 } 1766 1767 virtual void beginTest() 1768 { 1769 // The device viewport should be scaled by the device scale factor. 1770 m_layerTreeHost->setViewportSize(IntSize(40, 40)); 1771 EXPECT_EQ(IntSize(40, 40), m_layerTreeHost->viewportSize()); 1772 EXPECT_EQ(IntSize(60, 60), m_layerTreeHost->deviceViewportSize()); 1773 1774 m_rootLayer->addChild(m_childLayer); 1775 1776 m_rootLayer->setIsDrawable(true); 1777 m_rootLayer->setBounds(IntSize(30, 30)); 1778 m_rootLayer->setAnchorPoint(FloatPoint(0, 0)); 1779 1780 m_childLayer->setIsDrawable(true); 1781 m_childLayer->setPosition(IntPoint(2, 2)); 1782 m_childLayer->setBounds(IntSize(10, 10)); 1783 m_childLayer->setAnchorPoint(FloatPoint(0, 0)); 1784 1785 m_layerTreeHost->setRootLayer(m_rootLayer); 1786 } 1787 1788 virtual void commitCompleteOnCCThread(CCLayerTreeHostImpl* impl) 1789 { 1790 // Get access to protected methods. 1791 MockLayerTreeHostImpl* mockImpl = static_cast<MockLayerTreeHostImpl*>(impl); 1792 1793 // Should only do one commit. 1794 EXPECT_EQ(0, impl->sourceFrameNumber()); 1795 // Device scale factor should come over to impl. 1796 EXPECT_NEAR(impl->settings().deviceScaleFactor, 1.5, 0.00001); 1797 1798 // Both layers are on impl. 1799 ASSERT_EQ(1u, impl->rootLayer()->children().size()); 1800 1801 // Device viewport is scaled. 1802 EXPECT_EQ(IntSize(40, 40), impl->viewportSize()); 1803 EXPECT_EQ(IntSize(60, 60), impl->deviceViewportSize()); 1804 1805 CCLayerImpl* root = impl->rootLayer(); 1806 CCLayerImpl* child = impl->rootLayer()->children()[0].get(); 1807 1808 // Positions remain in layout pixels. 1809 EXPECT_EQ(IntPoint(0, 0), root->position()); 1810 EXPECT_EQ(IntPoint(2, 2), child->position()); 1811 1812 // Compute all the layer transforms for the frame. 1813 MockLayerTreeHostImpl::CCLayerList renderSurfaceLayerList; 1814 mockImpl->calculateRenderSurfaceLayerList(renderSurfaceLayerList); 1815 1816 // Both layers should be drawing into the root render surface. 1817 ASSERT_EQ(1u, renderSurfaceLayerList.size()); 1818 ASSERT_EQ(root->renderSurface(), renderSurfaceLayerList[0]->renderSurface()); 1819 ASSERT_EQ(2u, root->renderSurface()->layerList().size()); 1820 1821 // The root render surface is the size of the viewport. 1822 EXPECT_EQ_RECT(IntRect(0, 0, 60, 60), root->renderSurface()->contentRect()); 1823 1824 TransformationMatrix scaleTransform; 1825 scaleTransform.scale(impl->settings().deviceScaleFactor); 1826 1827 // The root layer is scaled by 2x. 1828 TransformationMatrix rootScreenSpaceTransform = scaleTransform; 1829 TransformationMatrix rootDrawTransform = scaleTransform; 1830 rootDrawTransform.translate(root->bounds().width() * 0.5, root->bounds().height() * 0.5); 1831 1832 EXPECT_EQ(rootDrawTransform, root->drawTransform()); 1833 EXPECT_EQ(rootScreenSpaceTransform, root->screenSpaceTransform()); 1834 1835 // The child is at position 2,2, so translate by 2,2 before applying the scale by 2x. 1836 TransformationMatrix childScreenSpaceTransform = scaleTransform; 1837 childScreenSpaceTransform.translate(2, 2); 1838 TransformationMatrix childDrawTransform = scaleTransform; 1839 childDrawTransform.translate(2, 2); 1840 childDrawTransform.translate(child->bounds().width() * 0.5, child->bounds().height() * 0.5); 1841 1842 EXPECT_EQ(childDrawTransform, child->drawTransform()); 1843 EXPECT_EQ(childScreenSpaceTransform, child->screenSpaceTransform()); 1844 1845 endTest(); 1846 } 1847 1848 virtual void afterTest() 1849 { 1850 m_rootLayer.clear(); 1851 m_childLayer.clear(); 1852 } 1853 1854 private: 1855 MockContentLayerDelegate m_delegate; 1856 RefPtr<ContentLayerChromium> m_rootLayer; 1857 RefPtr<ContentLayerChromium> m_childLayer; 1858 }; 1859 1860 TEST_F(CCLayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers, runMultiThread) 1861 { 1862 runTest(true); 1863 } 1746 1864 1747 1865 // Verify atomicity of commits and reuse of textures. … … 1998 2116 } 1999 2117 2000 #define EXPECT_EQ_RECT(a, b) \2001 EXPECT_EQ(a.x(), b.x()); \2002 EXPECT_EQ(a.y(), b.y()); \2003 EXPECT_EQ(a.width(), b.width()); \2004 EXPECT_EQ(a.height(), b.height());2005 2006 2118 class TestLayerChromium : public LayerChromium { 2007 2119 public: -
trunk/Source/WebKit/chromium/tests/LayerRendererChromiumTest.cpp
r116779 r117535 72 72 73 73 // LayerRendererChromiumClient methods. 74 virtual const IntSize& viewportSize() const OVERRIDE { static IntSize fakeSize; return fakeSize; }74 virtual const IntSize& deviceViewportSize() const OVERRIDE { static IntSize fakeSize; return fakeSize; } 75 75 virtual const CCSettings& settings() const OVERRIDE { static CCSettings fakeSettings; return fakeSettings; } 76 76 virtual void didLoseContext() OVERRIDE { } -
trunk/Source/WebKit/chromium/tests/WebFrameTest.cpp
r117170 r117535 31 31 #include "config.h" 32 32 33 #include "WebFrame.h" 34 35 #include "Frame.h" 33 36 #include "FrameTestHelpers.h" 34 37 #include "ResourceError.h" … … 36 39 #include "WebFindOptions.h" 37 40 #include "WebFormElement.h" 38 #include "WebFrame.h"39 41 #include "WebFrameClient.h" 40 42 #include "WebRange.h" … … 234 236 235 237 EXPECT_EQ(2, webView->deviceScaleFactor()); 238 239 // Device scale factor should be a component of page scale factor in fixed-layout, so a scale of 1 becomes 2. 240 webView->setPageScaleFactorLimits(1, 2); 241 EXPECT_EQ(2, webView->pageScaleFactor()); 242 243 // Force the layout to happen before leaving the test. 244 webView->mainFrame()->contentAsText(1024).utf8(); 236 245 } 237 246 #endif 238 247 239 248 #if ENABLE(GESTURE_EVENTS) 240 TEST_F(WebFrameTest, FAILS_DivAutoZoomParamsTest)249 TEST_F(WebFrameTest, DivAutoZoomParamsTest) 241 250 { 242 251 registerMockedHttpURLLoad("get_scale_for_auto_zoom_into_div_test.html"); … … 298 307 EXPECT_FLOAT_EQ(3, scale); 299 308 300 301 309 // Test for Non-doubletap scaling 302 310 webViewImpl->setPageScaleFactor(1, WebPoint(0, 0)); … … 306 314 webViewImpl->computeScaleAndScrollForHitRect(WebRect(250, 250, 10, 10), WebViewImpl::FindInPage, scale, scroll); 307 315 EXPECT_NEAR(pageWidth / divWidth, scale, 0.1); 316 317 // Drop any pending fake mouse events from zooming before leaving the test. 318 webViewImpl->page()->mainFrame()->eventHandler()->clear(); 308 319 } 309 320 #endif
Note: See TracChangeset
for help on using the changeset viewer.