Changeset 126095 in webkit
- Timestamp:
- Aug 20, 2012 4:57:24 PM (12 years ago)
- Location:
- trunk/Source/WebKit/chromium
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/chromium/ChangeLog
r126091 r126095 1 2012-08-20 Adam Barth <abarth@webkit.org> 2 3 WebWidget should be able to paint into a zoomed canvas without aliasing 4 https://bugs.webkit.org/show_bug.cgi?id=92043 5 6 Reviewed by James Robinson. 7 8 If accelerated compositing is enabled, WebWidget::paint reads back from 9 the compositor rather than re-painting the widget. That approach works 10 well if the canvas we're rendering into is at a similar resolution to 11 the pixels in the compositor, but if the canvas has been scaled (e.g., 12 to help the user disambiguate links), then reading back from the 13 compositor will cause aliasing artifacts. 14 15 This patch adds an option to paint to let the embedder request a 16 software re-rendering of the widget to avoid these aliasing artifacts. 17 18 * public/WebWidget.h: 19 (WebKit::WebWidget::paint): 20 * src/WebPagePopupImpl.cpp: 21 (WebKit::WebPagePopupImpl::paint): 22 * src/WebPagePopupImpl.h: 23 (WebPagePopupImpl): 24 * src/WebPopupMenuImpl.cpp: 25 (WebKit::WebPopupMenuImpl::paint): 26 * src/WebPopupMenuImpl.h: 27 * src/WebViewImpl.cpp: 28 (WebKit::canvasBackgroundForTransparencey): 29 (WebKit): 30 (WebKit::WebViewImpl::paint): 31 * src/WebViewImpl.h: 32 (WebViewImpl): 33 1 34 2012-08-20 James Robinson <jamesr@chromium.org> 2 35 -
trunk/Source/WebKit/chromium/public/WebWidget.h
r124670 r126095 91 91 virtual void layout() { } 92 92 93 enum PaintOptions { 94 // Attempt to fulfill the painting request by reading back from the 95 // compositor, assuming we're using a compositor to render. 96 ReadbackFromCompositorIfAvailable, 97 98 // Force the widget to rerender onto the canvas using software. This 99 // mode ignores 3d transforms and ignores GPU-resident content, such 100 // as video, canvas, and WebGL. 101 // 102 // Note: This option exists on OS(ANDROID) and will hopefully be 103 // removed once the link disambiguation feature renders using 104 // the compositor. 105 ForceSoftwareRenderingAndIgnoreGPUResidentContent, 106 }; 107 93 108 // Called to paint the rectangular region within the WebWidget 94 109 // onto the specified canvas at (viewPort.x,viewPort.y). You MUST call … … 98 113 // processed, it should be assumed that another call to layout is 99 114 // warranted before painting again). 100 virtual void paint(WebCanvas*, const WebRect& viewPort ) { }115 virtual void paint(WebCanvas*, const WebRect& viewPort, PaintOptions = ReadbackFromCompositorIfAvailable) { } 101 116 102 117 // In non-threaded compositing mode, triggers compositing of the current -
trunk/Source/WebKit/chromium/src/WebPagePopupImpl.cpp
r125764 r126095 226 226 } 227 227 228 void WebPagePopupImpl::paint(WebCanvas* canvas, const WebRect& rect )228 void WebPagePopupImpl::paint(WebCanvas* canvas, const WebRect& rect, PaintOptions) 229 229 { 230 230 PageWidgetDelegate::paint(m_page.get(), 0, canvas, rect, PageWidgetDelegate::Opaque); -
trunk/Source/WebKit/chromium/src/WebPagePopupImpl.h
r125169 r126095 73 73 virtual void composite(bool) OVERRIDE; 74 74 virtual void layout() OVERRIDE; 75 virtual void paint(WebCanvas*, const WebRect& ) OVERRIDE;75 virtual void paint(WebCanvas*, const WebRect&, PaintOptions = ReadbackFromCompositorIfAvailable) OVERRIDE; 76 76 virtual void resize(const WebSize&) OVERRIDE; 77 77 virtual void close() OVERRIDE; -
trunk/Source/WebKit/chromium/src/WebPopupMenuImpl.cpp
r119423 r126095 194 194 } 195 195 196 void WebPopupMenuImpl::paint(WebCanvas* canvas, const WebRect& rect )196 void WebPopupMenuImpl::paint(WebCanvas* canvas, const WebRect& rect, PaintOptions) 197 197 { 198 198 if (!m_widget) -
trunk/Source/WebKit/chromium/src/WebPopupMenuImpl.h
r114800 r126095 74 74 virtual void animate(double frameBeginTime) OVERRIDE; 75 75 virtual void layout() OVERRIDE; 76 virtual void paint(WebCanvas*, const WebRect& ) OVERRIDE;76 virtual void paint(WebCanvas*, const WebRect&, PaintOptions = ReadbackFromCompositorIfAvailable) OVERRIDE; 77 77 virtual void themeChanged() OVERRIDE; 78 78 virtual void setCompositorSurfaceReady() OVERRIDE; -
trunk/Source/WebKit/chromium/src/WebViewImpl.cpp
r126076 r126095 1687 1687 #endif 1688 1688 1689 void WebViewImpl::paint(WebCanvas* canvas, const WebRect& rect) 1690 { 1691 if (isAcceleratedCompositingActive()) { 1689 void WebViewImpl::paint(WebCanvas* canvas, const WebRect& rect, PaintOptions option) 1690 { 1691 #if !OS(ANDROID) 1692 // ReadbackFromCompositorIfAvailable is the only option available on non-Android. 1693 // Ideally, Android would always use ReadbackFromCompositorIfAvailable as well. 1694 ASSERT(option == ReadbackFromCompositorIfAvailable); 1695 #endif 1696 1697 if (option == ReadbackFromCompositorIfAvailable && isAcceleratedCompositingActive()) { 1692 1698 #if USE(ACCELERATED_COMPOSITING) 1693 1699 // If a canvas was passed in, we use it to grab a copy of the … … 1701 1707 #endif 1702 1708 } else { 1709 FrameView* view = page()->mainFrame()->view(); 1710 PaintBehavior oldPaintBehavior = view->paintBehavior(); 1711 if (isAcceleratedCompositingActive()) { 1712 ASSERT(option == ForceSoftwareRenderingAndIgnoreGPUResidentContent); 1713 view->setPaintBehavior(oldPaintBehavior | PaintBehaviorFlattenCompositingLayers); 1714 } 1715 1703 1716 double paintStart = currentTime(); 1704 1717 PageWidgetDelegate::paint(m_page.get(), pageOverlays(), canvas, rect, isTransparent() ? PageWidgetDelegate::Translucent : PageWidgetDelegate::Opaque); … … 1707 1720 WebKit::Platform::current()->histogramCustomCounts("Renderer4.SoftwarePaintDurationMS", (paintEnd - paintStart) * 1000, 0, 120, 30); 1708 1721 WebKit::Platform::current()->histogramCustomCounts("Renderer4.SoftwarePaintMegapixPerSecond", pixelsPerSec / 1000000, 10, 210, 30); 1722 1723 if (isAcceleratedCompositingActive()) { 1724 ASSERT(option == ForceSoftwareRenderingAndIgnoreGPUResidentContent); 1725 view->setPaintBehavior(oldPaintBehavior); 1726 } 1709 1727 } 1710 1728 } -
trunk/Source/WebKit/chromium/src/WebViewImpl.h
r126076 r126095 144 144 virtual void animate(double); 145 145 virtual void layout(); // Also implements WebLayerTreeViewClient::layout() 146 virtual void paint(WebCanvas*, const WebRect& );146 virtual void paint(WebCanvas*, const WebRect&, PaintOptions = ReadbackFromCompositorIfAvailable); 147 147 virtual void themeChanged(); 148 148 virtual void composite(bool finish);
Note: See TracChangeset
for help on using the changeset viewer.