Title: [87839] trunk/Source/WebKit2
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);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to