Changeset 88654 in webkit
- Timestamp:
- Jun 13, 2011 11:05:09 AM (13 years ago)
- Location:
- trunk/Source
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r88653 r88654 1 2011-06-11 Jer Noble <jer.noble@apple.com> 2 3 Reviewed by Anders Carlsson. 4 5 Avoid flashing when exiting full-screen mode. 6 https://bugs.webkit.org/show_bug.cgi?id=62338 7 8 No new tests; covered by the existing full-screen tests. 9 10 Now that we are forcing a repaint inside of setRootFullScreenLayer() instead of during 11 the next run loop, make sure that we have disabled animation before calling 12 setRootFullScreenLayer() so that the RenderFullScreen renderer and its contents are 13 painted. 14 15 * dom/Document.cpp: 16 (WebCore::Document::webkitDidEnterFullScreenForElement): 17 1 18 2011-06-10 Jer Noble <jer.noble@apple.com> 2 19 -
trunk/Source/WebCore/dom/Document.cpp
r88629 r88654 4793 4793 4794 4794 if (m_fullScreenRenderer) { 4795 #if USE(ACCELERATED_COMPOSITING)4796 page()->chrome()->client()->setRootFullScreenLayer(0);4797 #endif4798 4795 setAnimatingFullScreen(false); 4799 4796 #if USE(ACCELERATED_COMPOSITING) 4800 4797 view()->updateCompositingLayers(); 4798 page()->chrome()->client()->setRootFullScreenLayer(0); 4801 4799 #endif 4802 4800 } -
trunk/Source/WebKit2/ChangeLog
r88650 r88654 1 2011-06-11 Jer Noble <jer.noble@apple.com> 2 3 Reviewed by Anders Carlsson. 4 5 Avoid flashing when exiting full-screen mode. 6 https://bugs.webkit.org/show_bug.cgi?id=62338 7 8 Instead of making a round-trip between processes by calling forceRepaint 9 and waiting for a callback, instead make a WebProcess-side call to 10 forceRepaintWithoutCallback before sending the ExitAcceleratedCompositingMode 11 message to the WebFullScreenControllerProxy. This also means we can get rid of 12 the dragImage creation and display. 13 14 Because this redraw will happen during the current run-loop instead of a future 15 one, make sure the background color has been set before the redraw in 16 didEnterFullScreen(). 17 18 Wait to hide the full-screen window until after we have received the 19 ExitAcceleratedCompositingMode message. By this time, repaint will have already 20 completed. 21 22 * UIProcess/mac/WKFullScreenWindowController.h: 23 * UIProcess/mac/WKFullScreenWindowController.mm: 24 (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]): Disable 25 screen updates, to be re-enabled during exitAcceleratedCompositingMode. 26 (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]): Don't hide 27 the full-screen window here; wait for exitAcceleratedCompositing instead. 28 (-[WKFullScreenWindowController exitAcceleratedCompositingMode]): Collapse 29 the redrawCompleted method into this one. 30 (-[WKFullScreenWindowController close]): Remove the reference to 31 exitCompositedModeRepaintCompleted. 32 * WebProcess/FullScreen/WebFullScreenManager.cpp: 33 (WebKit::WebFullScreenManager::didEnterFullScreen): Set the full screen 34 background color first. 35 * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm: 36 (WebKit::WebFullScreenManagerMac::setRootFullScreenLayer): Repaint before 37 sending the ExitAcceleratedCompositingMode message. 38 1 39 2011-06-13 Tony Chang <tony@chromium.org> 2 40 -
trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.h
r87656 r88654 52 52 BOOL _forceDisableAnimation; 53 53 BOOL _isPlaying; 54 BOOL _isExitingAcceleratedCompositingMode;55 54 CGRect _initialFrame; 56 55 uint32_t _idleDisplaySleepAssertion; -
trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm
r88599 r88654 48 48 using namespace WebCore; 49 49 50 static void exitCompositedModeRepaintCompleted(WKErrorRef, void* context);51 52 50 #if defined(BUILDING_ON_LEOPARD) 53 51 @interface CATransaction(SnowLeopardConvenienceFunctions) … … 249 247 250 248 if (completed) { 249 NSDisableScreenUpdates(); 250 251 251 // Swap the webView placeholder into place. 252 252 if (!_webViewPlaceholder) … … 355 355 [self _updatePowerAssertions]; 356 356 [NSCursor setHiddenUntilMouseMoves:YES]; 357 [[self window] orderOut:self];358 [[_webView window] makeKeyAndOrderFront:self];359 357 360 358 [self _manager]->didExitFullScreen(); 361 NSEnableScreenUpdates();362 359 } 363 360 … … 394 391 { 395 392 if (!_layerHostingView) 396 return;397 398 ASSERT(!_isExitingAcceleratedCompositingMode);399 if (_isExitingAcceleratedCompositingMode)400 return;401 402 [self retain]; // Balanced by release in exitCompositedModeRepaintCompleted below.403 _isExitingAcceleratedCompositingMode = YES;404 405 NSDisableScreenUpdates();406 [self _page]->forceRepaint(VoidCallback::create(self, exitCompositedModeRepaintCompleted));407 }408 409 - (void)exitCompositedModeRepaintCompleted410 {411 ASSERT(_isExitingAcceleratedCompositingMode);412 if (!_isExitingAcceleratedCompositingMode)413 393 return; 414 394 … … 420 400 [[[self _fullScreenWindow] backgroundLayer] setHidden:YES]; 421 401 [CATransaction commit]; 402 403 // Complete the animation out of full-screen mode 404 // by hiding the full-screen window: 405 if (!_isFullScreen) { 406 [[_webView window] display]; 407 [[self window] orderOut:self]; 408 [[_webView window] makeKeyAndOrderFront:self]; 409 } 422 410 423 411 _layerHostingView = 0; … … 425 413 426 414 [self _manager]->disposeOfLayerClient(); 427 _isExitingAcceleratedCompositingMode = NO;428 [self release]; // Balanced by retain in exitAcceleratedCompositingMode above.429 }430 431 static void exitCompositedModeRepaintCompleted(WKErrorRef, void* context)432 {433 [static_cast<WKFullScreenWindowController *>(context) exitCompositedModeRepaintCompleted];434 415 } 435 416 … … 452 433 if (_isExitingFullScreen) 453 434 [self finishedExitFullScreenAnimation:YES]; 454 455 if (_isExitingAcceleratedCompositingMode)456 [self exitCompositedModeRepaintCompleted];457 435 458 436 [super close]; -
trunk/Source/WebKit2/WebProcess/FullScreen/WebFullScreenManager.cpp
r86135 r88654 124 124 { 125 125 ASSERT(m_element); 126 m_element->document()->setFullScreenRendererBackgroundColor(Color::black); 126 127 m_element->document()->webkitDidEnterFullScreenForElement(m_element.get()); 127 m_element->document()->setFullScreenRendererBackgroundColor(Color::black);128 128 } 129 129 -
trunk/Source/WebKit2/WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm
r88599 r88654 135 135 void WebFullScreenManagerMac::setRootFullScreenLayer(WebCore::GraphicsLayer* layer) 136 136 { 137 if ( (!m_rootLayer || m_rootLayer->children().isEmpty())&& !layer)137 if (!m_rootLayer && !layer) 138 138 return; 139 139 140 140 if (!layer) { 141 m_page->forceRepaintWithoutCallback(); 141 142 m_page->send(Messages::WebFullScreenManagerProxy::ExitAcceleratedCompositingMode()); 142 143 143 Frame* frame = m_element->document()->frame();144 FrameView* view = frame ? frame->view() : 0;145 DragImageRef dragImage = 0;146 if (view) {147 Color savedBackgroundColor = view->baseBackgroundColor();148 bool savedIsTransparent = view->isTransparent();149 view->setBaseBackgroundColor(Color::transparent);150 view->setTransparent(true);151 dragImage = frame->nodeImage(m_element.get());152 view->setBaseBackgroundColor(savedBackgroundColor);153 view->setTransparent(savedIsTransparent);154 }155 156 [CATransaction begin];157 144 PlatformLayer* rootPlatformLayer = m_rootLayer->platformLayer(); 158 145 [[NSNotificationCenter defaultCenter] postNotificationName:@"WebKitLayerHostChanged" object:rootPlatformLayer userInfo:nil]; 159 160 146 m_rootLayer->removeAllChildren(); 161 147 m_rootLayer->syncCompositingStateForThisLayerOnly(); 162 148 m_rootLayer = nullptr; 163 [rootPlatformLayer setContents:dragImage.get()];164 [CATransaction commit];165 166 149 return; 167 150 }
Note: See TracChangeset
for help on using the changeset viewer.