Changeset 202273 in webkit
- Timestamp:
- Jun 21, 2016 4:04:53 AM (8 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r202263 r202273 1 2016-06-21 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK] Web view is not redrawn when reparented in force compositing mode 4 https://bugs.webkit.org/show_bug.cgi?id=158689 5 6 Reviewed by Žan Doberšek. 7 8 When the web view is reparented in accelerated compositing mode, the UI process always exits the accelerated 9 mode when the view is unrealized, because the native surface handle for compositing is destroyed, but it doesn't 10 enter again when the view is realized and a new native surface handle for compositing is used. This happens 11 because the UI and Web processes are not in sync regarding whether the page is in accelerated compositing or 12 not. The Web process never exits accelerated mode when compositing mode is forced, but the UI process doesn't 13 check that setting at all. 14 15 * UIProcess/API/gtk/WebKitWebViewBase.cpp: 16 (webkitWebViewBaseResizeRedirectedWindow): Helper function to ensure the redirected window size is properly updated. 17 (webkitWebViewBaseRealize): Resize the redirected window if the view is already in AC mode when realized. 18 (webkitWebViewRenderAcceleratedCompositingResults): Use webkitWebViewBaseResizeRedirectedWindow(). 19 (webkitWebViewBaseSizeAllocate): Ditto. 20 (webkitWebViewBaseWillEnterAcceleratedCompositingMode): Ditto. 21 * UIProcess/DrawingAreaProxyImpl.cpp: 22 (WebKit::DrawingAreaProxyImpl::alwaysUseCompositing): Return true in force compositing mode. 23 (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode): Update assert. 24 (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode): Do not exit AC mode compositing mode is always enabled. 25 * UIProcess/DrawingAreaProxyImpl.h: 26 (WebKit::DrawingAreaProxyImpl::isInAcceleratedCompositingMode): Return true also in force compositing mode. 27 * UIProcess/gtk/RedirectedXCompositeWindow.cpp: 28 (WebKit::RedirectedXCompositeWindow::surface): Ensure we never return an uninitialized surface to prevent 29 rendering artifacts in in force compositing mode when waiting for the first update on the redirected window. 30 1 31 2016-06-20 Commit Queue <commit-queue@webkit.org> 2 32 -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp
r199811 r202273 355 355 } 356 356 357 #if USE(REDIRECTED_XCOMPOSITE_WINDOW) 358 static void webkitWebViewBaseResizeRedirectedWindow(WebKitWebViewBase* webView) 359 { 360 WebKitWebViewBasePrivate* priv = webView->priv; 361 DrawingAreaProxyImpl* drawingArea = static_cast<DrawingAreaProxyImpl*>(priv->pageProxy->drawingArea()); 362 ASSERT(drawingArea); 363 priv->redirectedWindow->setDeviceScaleFactor(priv->pageProxy->deviceScaleFactor()); 364 priv->redirectedWindow->resize(drawingArea->size()); 365 } 366 #endif 367 357 368 static void webkitWebViewBaseRealize(GtkWidget* widget) 358 369 { … … 371 382 }); 372 383 if (priv->redirectedWindow) { 373 if (DrawingAreaProxyImpl* drawingArea = static_cast<DrawingAreaProxyImpl*>(priv->pageProxy->drawingArea())) 384 if (DrawingAreaProxyImpl* drawingArea = static_cast<DrawingAreaProxyImpl*>(priv->pageProxy->drawingArea())) { 374 385 drawingArea->setNativeSurfaceHandleForCompositing(priv->redirectedWindow->windowID()); 386 if (drawingArea->isInAcceleratedCompositingMode()) 387 webkitWebViewBaseResizeRedirectedWindow(webView); 388 } 375 389 } 376 390 } … … 576 590 return false; 577 591 578 priv->redirectedWindow->setDeviceScaleFactor(webViewBase->priv->pageProxy->deviceScaleFactor()); 579 priv->redirectedWindow->resize(drawingArea->size()); 580 592 webkitWebViewBaseResizeRedirectedWindow(webViewBase); 581 593 if (cairo_surface_t* surface = priv->redirectedWindow->surface()) { 582 594 cairo_save(cr); … … 692 704 #if USE(REDIRECTED_XCOMPOSITE_WINDOW) 693 705 if (priv->redirectedWindow && drawingArea->isInAcceleratedCompositingMode()) 694 priv->redirectedWindow->resize(viewRect.size());706 webkitWebViewBaseResizeRedirectedWindow(webViewBase); 695 707 #endif 696 708 … … 1558 1570 return; 1559 1571 1560 priv->redirectedWindow->setDeviceScaleFactor(webkitWebViewBase->priv->pageProxy->deviceScaleFactor()); 1561 priv->redirectedWindow->resize(drawingArea->size()); 1572 webkitWebViewBaseResizeRedirectedWindow(webkitWebViewBase); 1562 1573 1563 1574 // Clear the redirected window if we don't enter AC mode in the end. -
trunk/Source/WebKit2/UIProcess/DrawingAreaProxyImpl.cpp
r198580 r202273 59 59 } 60 60 61 bool DrawingAreaProxyImpl::alwaysUseCompositing() const 62 { 63 return m_webPageProxy.preferences().acceleratedCompositingEnabled() && m_webPageProxy.preferences().forceCompositingMode(); 64 } 65 61 66 void DrawingAreaProxyImpl::paint(BackingStore::PlatformGraphicsContext context, const IntRect& rect, Region& unpaintedRegion) 62 67 { … … 296 301 void DrawingAreaProxyImpl::enterAcceleratedCompositingMode(const LayerTreeContext& layerTreeContext) 297 302 { 298 ASSERT( !isInAcceleratedCompositingMode());303 ASSERT(alwaysUseCompositing() || !isInAcceleratedCompositingMode()); 299 304 300 305 m_backingStore = nullptr; … … 330 335 ASSERT(isInAcceleratedCompositingMode()); 331 336 332 m_layerTreeContext = LayerTreeContext(); 333 m_webPageProxy.exitAcceleratedCompositingMode(); 337 m_layerTreeContext = LayerTreeContext(); 338 if (!alwaysUseCompositing()) 339 m_webPageProxy.exitAcceleratedCompositingMode(); 334 340 } 335 341 -
trunk/Source/WebKit2/UIProcess/DrawingAreaProxyImpl.h
r197563 r202273 45 45 void paint(BackingStore::PlatformGraphicsContext, const WebCore::IntRect&, WebCore::Region& unpaintedRegion); 46 46 47 bool isInAcceleratedCompositingMode() const { return !m_layerTreeContext.isEmpty(); }47 bool isInAcceleratedCompositingMode() const { return alwaysUseCompositing() || !m_layerTreeContext.isEmpty(); } 48 48 49 49 bool hasReceivedFirstUpdate() const { return m_hasReceivedFirstUpdate; } … … 82 82 void exitAcceleratedCompositingMode(); 83 83 void updateAcceleratedCompositingMode(const LayerTreeContext&); 84 bool alwaysUseCompositing() const; 84 85 85 86 void discardBackingStoreSoon(); -
trunk/Source/WebKit2/UIProcess/gtk/RedirectedXCompositeWindow.cpp
r194496 r202273 264 264 cairoSurfaceSetDeviceScale(newSurface.get(), m_deviceScale, m_deviceScale); 265 265 266 RefPtr<cairo_t> cr = adoptRef(cairo_create(newSurface.get())); 267 cairo_set_source_rgb(cr.get(), 1, 1, 1); 268 cairo_paint(cr.get()); 269 266 270 // Nvidia drivers seem to prepare their redirected window pixmap asynchronously, so for a few fractions 267 271 // of a second after each resize, while doing continuous resizing (which constantly destroys and creates … … 269 273 // pixmap to the new one to properly initialize it. 270 274 if (m_surface) { 271 RefPtr<cairo_t> cr = adoptRef(cairo_create(newSurface.get()));272 cairo_set_source_rgb(cr.get(), 1, 1, 1);273 cairo_paint(cr.get());274 275 cairo_set_source_surface(cr.get(), m_surface.get(), 0, 0); 275 276 cairo_paint(cr.get());
Note: See TracChangeset
for help on using the changeset viewer.