From 2d79b3a01d86951871b3a2e97302efc6b2880c70 Mon Sep 17 00:00:00 2001 From: "simon.fraser@apple.com" Date: Wed, 7 May 2014 18:49:26 +0000 Subject: [PATCH] WebKit1 is flashy when compositing layers come and go https://bugs.webkit.org/show_bug.cgi?id=132655 Source/WebKit/mac: Reviewed by Sam Weinig. In r166117 I removed code to flush compositing layers in FrameView::paintContents(), which caused problems when painting iframes. However, this removed a flush that WebKit1 relied on to flush compositing layers when painting, which caused flashing when compositing layers come and go, and broke WebView snapshotting in some cases. Fix by adding back compositing layer flushing, but this time in WebKit1's -viewWillDraw code path. This allows removal of some flushing in DumpRenderTree. * WebView/WebHTMLView.mm: (-[WebHTMLView viewWillDraw]): * WebView/WebView.mm: (-[WebView _flushCompositingChanges]): * WebView/WebViewInternal.h: * WebView/WebViewPrivate.h: Tools: Reviewed by Sam Weinig. Revert the change from r166117. * DumpRenderTree/mac/DumpRenderTree.mm: (updateDisplay): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@168434 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- Source/WebKit/mac/ChangeLog | 23 +++++++++++++++++++++++ Source/WebKit/mac/WebView/WebHTMLView.mm | 4 +++- Source/WebKit/mac/WebView/WebView.mm | 18 +++++++++--------- Source/WebKit/mac/WebView/WebViewInternal.h | 1 + Source/WebKit/mac/WebView/WebViewPrivate.h | 1 - Tools/ChangeLog | 13 +++++++++++++ Tools/DumpRenderTree/mac/DumpRenderTree.mm | 2 -- 7 files changed, 49 insertions(+), 13 deletions(-) diff --git a/Source/WebKit/mac/ChangeLog b/Source/WebKit/mac/ChangeLog index 3704300..6218256 100644 --- a/Source/WebKit/mac/ChangeLog +++ b/Source/WebKit/mac/ChangeLog @@ -1,3 +1,26 @@ +2014-05-07 Simon Fraser + + WebKit1 is flashy when compositing layers come and go + https://bugs.webkit.org/show_bug.cgi?id=132655 + + Reviewed by Sam Weinig. + + In r166117 I removed code to flush compositing layers in FrameView::paintContents(), + which caused problems when painting iframes. However, this removed a flush + that WebKit1 relied on to flush compositing layers when painting, which caused + flashing when compositing layers come and go, and broke WebView snapshotting + in some cases. + + Fix by adding back compositing layer flushing, but this time in WebKit1's + -viewWillDraw code path. This allows removal of some flushing in DumpRenderTree. + + * WebView/WebHTMLView.mm: + (-[WebHTMLView viewWillDraw]): + * WebView/WebView.mm: + (-[WebView _flushCompositingChanges]): + * WebView/WebViewInternal.h: + * WebView/WebViewPrivate.h: + 2014-05-07 Manuel Rego Casasnovas [CSS Grid Layout] Remove runtime feature diff --git a/Source/WebKit/mac/WebView/WebHTMLView.mm b/Source/WebKit/mac/WebView/WebHTMLView.mm index 6e95a00..d342046 100644 --- a/Source/WebKit/mac/WebView/WebHTMLView.mm +++ b/Source/WebKit/mac/WebView/WebHTMLView.mm @@ -1394,8 +1394,10 @@ static NSURL* uniqueURLWithRelativePart(NSString *relativePart) // On window close we will be called when the datasource is nil, then hit an assert in _topHTMLView // So check if the dataSource is nil before calling [self _isTopHTMLView], this can be removed // once the FIXME in _isTopHTMLView is fixed. - if (_private->dataSource && [self _isTopHTMLView]) + if (_private->dataSource && [self _isTopHTMLView]) { [self _web_updateLayoutAndStyleIfNeededRecursive]; + [[self _webView] _flushCompositingChanges]; + } [super viewWillDraw]; } diff --git a/Source/WebKit/mac/WebView/WebView.mm b/Source/WebKit/mac/WebView/WebView.mm index e4c36a5..7c4024b 100644 --- a/Source/WebKit/mac/WebView/WebView.mm +++ b/Source/WebKit/mac/WebView/WebView.mm @@ -3870,15 +3870,6 @@ static inline IMP getMethod(id o, SEL s) return NO; } -- (BOOL)_flushCompositingChanges -{ - Frame* frame = [self _mainCoreFrame]; - if (frame && frame->view()) - return frame->view()->flushCompositingStateIncludingSubframes(); - - return YES; -} - - (void)_setBaseCTM:(CGAffineTransform)transform forContext:(CGContextRef)context { WKSetBaseCTM(context, transform); @@ -8420,6 +8411,15 @@ bool LayerFlushController::flushLayers() _private->layerFlushController->scheduleLayerFlush(); } +- (BOOL)_flushCompositingChanges +{ + Frame* frame = [self _mainCoreFrame]; + if (frame && frame->view()) + return frame->view()->flushCompositingStateIncludingSubframes(); + + return YES; +} + #if PLATFORM(IOS) - (void)_scheduleLayerFlushForPendingTileCacheRepaint { diff --git a/Source/WebKit/mac/WebView/WebViewInternal.h b/Source/WebKit/mac/WebView/WebViewInternal.h index 77e7756..f599de4 100644 --- a/Source/WebKit/mac/WebView/WebViewInternal.h +++ b/Source/WebKit/mac/WebView/WebViewInternal.h @@ -102,6 +102,7 @@ OBJC_CLASS NSTextAlternatives; - (BOOL)_needsOneShotDrawingSynchronization; - (void)_setNeedsOneShotDrawingSynchronization:(BOOL)needsSynchronization; - (void)_scheduleCompositingLayerFlush; +- (BOOL)_flushCompositingChanges; #if USE(GLIB) - (void)_scheduleGlibContextIterations; diff --git a/Source/WebKit/mac/WebView/WebViewPrivate.h b/Source/WebKit/mac/WebView/WebViewPrivate.h index c9aea78..053c43b 100644 --- a/Source/WebKit/mac/WebView/WebViewPrivate.h +++ b/Source/WebKit/mac/WebView/WebViewPrivate.h @@ -771,7 +771,6 @@ Could be worth adding to the API. - (BOOL)_postsAcceleratedCompositingNotifications; - (void)_setPostsAcceleratedCompositingNotifications:(BOOL)flag; - (BOOL)_isUsingAcceleratedCompositing; -- (BOOL)_flushCompositingChanges; - (void)_setBaseCTM:(CGAffineTransform)transform forContext:(CGContextRef)context; // For DumpRenderTree diff --git a/Tools/ChangeLog b/Tools/ChangeLog index 8c2a835..beed16a 100644 --- a/Tools/ChangeLog +++ b/Tools/ChangeLog @@ -1,3 +1,16 @@ +2014-05-07 Simon Fraser + + WebKit1 is flashy when compositing layers come and go + https://bugs.webkit.org/show_bug.cgi?id=132655 + + + Reviewed by Sam Weinig. + + Revert the change from r166117. + + * DumpRenderTree/mac/DumpRenderTree.mm: + (updateDisplay): + 2014-05-07 Chris Fleizach AX: AXSelectTextWithCriteria should support capitalize/lowercase/uppercase diff --git a/Tools/DumpRenderTree/mac/DumpRenderTree.mm b/Tools/DumpRenderTree/mac/DumpRenderTree.mm index 886ebac..1b04f6a 100644 --- a/Tools/DumpRenderTree/mac/DumpRenderTree.mm +++ b/Tools/DumpRenderTree/mac/DumpRenderTree.mm @@ -1521,8 +1521,6 @@ static void updateDisplay() [webView display]; else [webView displayIfNeeded]; - - [webView _flushCompositingChanges]; } void dump() -- 1.8.3.1