- Revision
- 87839
- Author
- [email protected]
- Date
- 2011-06-01 13:14:36 -0700 (Wed, 01 Jun 2011)
Log Message
2011-06-01 Jer Noble <[email protected]>
Reviewed by Maciej Stachowiak.
Flash of old video frame at the end of full screen transition
https://bugs.webkit.org/show_bug.cgi?id=61752
Add a new method and message, DisposeOfLayerClient, which will invalidate and release
the WKRemoteLayerClient used during the full-screen animation. This ensures that
the root layer used for the full-screen animation will be in a clean state at the start
of the next transition.
* UIProcess/WebFullScreenManagerProxy.cpp:
(WebKit::WebFullScreenManagerProxy::disposeOfLayerClient): Added.
* UIProcess/WebFullScreenManagerProxy.h:
* UIProcess/mac/WKFullScreenWindowController.mm:
(-[WKFullScreenWindowController exitCompositedModeRepaintCompleted]): Call disposeOfLayerClient.
* WebProcess/FullScreen/WebFullScreenManager.h:
(WebKit::WebFullScreenManager::disposeOfLayerClient): Added.
* WebProcess/FullScreen/WebFullScreenManager.messages.in: Added DisposeOfLayerClient.
* WebProcess/FullScreen/mac/WebFullScreenManagerMac.h:
* WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:
(WebKit::WebFullScreenManagerMac::disposeOfLayerClient): Added, invalidates and clears m_rootLayerClient.
Modified Paths
Diff
Modified: trunk/Source/WebKit2/ChangeLog (87838 => 87839)
--- trunk/Source/WebKit2/ChangeLog 2011-06-01 20:09:04 UTC (rev 87838)
+++ trunk/Source/WebKit2/ChangeLog 2011-06-01 20:14:36 UTC (rev 87839)
@@ -1,3 +1,27 @@
+2011-06-01 Jer Noble <[email protected]>
+
+ Reviewed by Maciej Stachowiak.
+
+ Flash of old video frame at the end of full screen transition
+ https://bugs.webkit.org/show_bug.cgi?id=61752
+
+ Add a new method and message, DisposeOfLayerClient, which will invalidate and release
+ the WKRemoteLayerClient used during the full-screen animation. This ensures that
+ the root layer used for the full-screen animation will be in a clean state at the start
+ of the next transition.
+
+ * UIProcess/WebFullScreenManagerProxy.cpp:
+ (WebKit::WebFullScreenManagerProxy::disposeOfLayerClient): Added.
+ * UIProcess/WebFullScreenManagerProxy.h:
+ * UIProcess/mac/WKFullScreenWindowController.mm:
+ (-[WKFullScreenWindowController exitCompositedModeRepaintCompleted]): Call disposeOfLayerClient.
+ * WebProcess/FullScreen/WebFullScreenManager.h:
+ (WebKit::WebFullScreenManager::disposeOfLayerClient): Added.
+ * WebProcess/FullScreen/WebFullScreenManager.messages.in: Added DisposeOfLayerClient.
+ * WebProcess/FullScreen/mac/WebFullScreenManagerMac.h:
+ * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:
+ (WebKit::WebFullScreenManagerMac::disposeOfLayerClient): Added, invalidates and clears m_rootLayerClient.
+
2011-06-01 Adam Roben <[email protected]>
Build fix after r87831
Modified: trunk/Source/WebKit2/UIProcess/WebFullScreenManagerProxy.cpp (87838 => 87839)
--- trunk/Source/WebKit2/UIProcess/WebFullScreenManagerProxy.cpp 2011-06-01 20:09:04 UTC (rev 87838)
+++ trunk/Source/WebKit2/UIProcess/WebFullScreenManagerProxy.cpp 2011-06-01 20:14:36 UTC (rev 87839)
@@ -94,6 +94,11 @@
m_page->process()->send(Messages::WebFullScreenManager::BeginExitFullScreenAnimation(duration), m_page->pageID());
}
+void WebFullScreenManagerProxy::disposeOfLayerClient()
+{
+ m_page->process()->send(Messages::WebFullScreenManager::DisposeOfLayerClient(), m_page->pageID());
+}
+
void WebFullScreenManagerProxy::supportsFullScreen(bool withKeyboard, bool& supports)
{
if (withKeyboard)
Modified: trunk/Source/WebKit2/UIProcess/WebFullScreenManagerProxy.h (87838 => 87839)
--- trunk/Source/WebKit2/UIProcess/WebFullScreenManagerProxy.h 2011-06-01 20:09:04 UTC (rev 87838)
+++ trunk/Source/WebKit2/UIProcess/WebFullScreenManagerProxy.h 2011-06-01 20:14:36 UTC (rev 87839)
@@ -81,6 +81,7 @@
void didExitFullScreen();
void beginEnterFullScreenAnimation(float duration);
void beginExitFullScreenAnimation(float duration);
+ void disposeOfLayerClient();
private:
WebFullScreenManagerProxy(WebPageProxy*);
Modified: trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm (87838 => 87839)
--- trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm 2011-06-01 20:09:04 UTC (rev 87838)
+++ trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm 2011-06-01 20:14:36 UTC (rev 87839)
@@ -422,6 +422,7 @@
_layerHostingView = 0;
NSEnableScreenUpdates();
+ [self _manager]->disposeOfLayerClient();
_isExitingAcceleratedCompositingMode = NO;
[self release]; // Balanced by retain in exitAcceleratedCompositingMode above.
}
Modified: trunk/Source/WebKit2/WebProcess/FullScreen/WebFullScreenManager.h (87838 => 87839)
--- trunk/Source/WebKit2/WebProcess/FullScreen/WebFullScreenManager.h 2011-06-01 20:09:04 UTC (rev 87838)
+++ trunk/Source/WebKit2/WebProcess/FullScreen/WebFullScreenManager.h 2011-06-01 20:14:36 UTC (rev 87839)
@@ -75,6 +75,7 @@
virtual void beginEnterFullScreenAnimation(float duration) = 0;
virtual void beginExitFullScreenAnimation(float duration) = 0;
+ virtual void disposeOfLayerClient() { }
WebCore::IntRect getFullScreenRect();
void didReceiveWebFullScreenManagerMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
Modified: trunk/Source/WebKit2/WebProcess/FullScreen/WebFullScreenManager.messages.in (87838 => 87839)
--- trunk/Source/WebKit2/WebProcess/FullScreen/WebFullScreenManager.messages.in 2011-06-01 20:09:04 UTC (rev 87838)
+++ trunk/Source/WebKit2/WebProcess/FullScreen/WebFullScreenManager.messages.in 2011-06-01 20:14:36 UTC (rev 87839)
@@ -28,5 +28,6 @@
DidExitFullScreen()
BeginEnterFullScreenAnimation(float duration)
BeginExitFullScreenAnimation(float duration)
+ DisposeOfLayerClient()
}
#endif
Modified: trunk/Source/WebKit2/WebProcess/FullScreen/mac/WebFullScreenManagerMac.h (87838 => 87839)
--- trunk/Source/WebKit2/WebProcess/FullScreen/mac/WebFullScreenManagerMac.h 2011-06-01 20:09:04 UTC (rev 87838)
+++ trunk/Source/WebKit2/WebProcess/FullScreen/mac/WebFullScreenManagerMac.h 2011-06-01 20:14:36 UTC (rev 87839)
@@ -52,6 +52,7 @@
virtual void beginEnterFullScreenAnimation(float duration);
virtual void beginExitFullScreenAnimation(float duration);
+ virtual void disposeOfLayerClient();
void animateFullScreen(const CATransform3D& startTransform, const CATransform3D& endTransform, float duration, id listener);
CATransform3D windowedCGTransform();
Modified: trunk/Source/WebKit2/WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm (87838 => 87839)
--- trunk/Source/WebKit2/WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm 2011-06-01 20:09:04 UTC (rev 87838)
+++ trunk/Source/WebKit2/WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm 2011-06-01 20:14:36 UTC (rev 87839)
@@ -193,6 +193,15 @@
[[NSNotificationCenter defaultCenter] postNotificationName:@"WebKitLayerHostChanged" object:m_rootLayer->platformLayer() userInfo:nil];
}
+void WebFullScreenManagerMac::disposeOfLayerClient()
+{
+ if (!m_remoteLayerClient)
+ return;
+ WKCARemoteLayerClientSetLayer(m_remoteLayerClient.get(), 0);
+ WKCARemoteLayerClientInvalidate(m_remoteLayerClient.get());
+ m_remoteLayerClient = nullptr;
+}
+
void WebFullScreenManagerMac::beginEnterFullScreenAnimation(float duration)
{
ASSERT(m_element);