Title: [143428] trunk/Source
Revision
143428
Author
[email protected]
Date
2013-02-19 21:53:02 -0800 (Tue, 19 Feb 2013)

Log Message

Clarify isInWindow vs. isVisible path through to RenderLayerCompositor
https://bugs.webkit.org/show_bug.cgi?id=110261
<rdar://problem/13196122>

Reviewed by Simon Fraser.

Remove RenderLayerCompositor::willMoveOffscreen/didMoveOnscreen.
Add RenderLayerCompositor::setIsInWindow, and pipe in-window changes through from Page::setIsInWindow.
Adjust a few Document functions that previously called RenderView::didMoveOnscreen/willMoveOffscreen to use setIsInWindow instead, since in-win$

* WebCore.exp.in: Export Page::setIsInWindow.
* dom/Document.cpp:
(WebCore::Document::attach): Use setIsInWindow instead of didMoveOnscreen.
(WebCore::Document::documentWillBecomeInactive): Use setIsInWindow instead of willMoveOffscreen.
(WebCore::Document::documentDidResumeFromPageCache): Use setIsInWindow instead of didMoveOnscreen.
* page/FrameView.cpp:
(WebCore::FrameView::didMoveOnscreen):
(WebCore::FrameView::willMoveOffscreen):
RenderView doesn't care about moving on/offscreen, just in-window state.
(WebCore::FrameView::setIsInWindow): Added. Forward isInWindow changes to our RenderView.
* page/FrameView.h:
(FrameView): Add setIsInWindow.
* page/Page.cpp:
(WebCore::Page::setIsInWindow): Added. Forward isInWindow changes to the Page's FrameViews.
* page/Page.h:
(Page): Add setIsInWindow.
(WebCore::Page::isInWindow):
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::setIsInWindow): Added. Replace willMoveOffscreen/didMoveOnscreen with setIsInWindow,
since that's the only change we actually care about.
* rendering/RenderLayerCompositor.h:
(RenderLayerCompositor): Add setIsInWindow.
* rendering/RenderView.cpp:
(WebCore::RenderView::setIsInWindow): Added. Replace willMoveOffscreen/didMoveOnscreen with setIsInWindow,
since that's the only change RenderLayerCompositor actually cares about.
* rendering/RenderView.h:
(RenderView): Add setIsInWindow.

* WebView/WebView.mm:
(-[WebView viewWillMoveToWindow:]):
(-[WebView viewDidMoveToWindow]):
Use Page::setIsInWindow in addition to willMoveOffscreen/didMoveOnscreen.

* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::setIsInWindow):
Use Page::setIsInWindow in addition to willMoveOffscreen/didMoveOnscreen.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (143427 => 143428)


--- trunk/Source/WebCore/ChangeLog	2013-02-20 05:24:35 UTC (rev 143427)
+++ trunk/Source/WebCore/ChangeLog	2013-02-20 05:53:02 UTC (rev 143428)
@@ -1,3 +1,43 @@
+2013-02-19  Tim Horton  <[email protected]>
+
+        Clarify isInWindow vs. isVisible path through to RenderLayerCompositor
+        https://bugs.webkit.org/show_bug.cgi?id=110261
+        <rdar://problem/13196122>
+
+        Reviewed by Simon Fraser.
+
+        Remove RenderLayerCompositor::willMoveOffscreen/didMoveOnscreen.
+        Add RenderLayerCompositor::setIsInWindow, and pipe in-window changes through from Page::setIsInWindow.
+        Adjust a few Document functions that previously called RenderView::didMoveOnscreen/willMoveOffscreen to use setIsInWindow instead, since in-window state changes are occurring when attaching and detaching documents.
+
+        * WebCore.exp.in: Export Page::setIsInWindow.
+        * dom/Document.cpp:
+        (WebCore::Document::attach): Use setIsInWindow instead of didMoveOnscreen.
+        (WebCore::Document::documentWillBecomeInactive): Use setIsInWindow instead of willMoveOffscreen.
+        (WebCore::Document::documentDidResumeFromPageCache): Use setIsInWindow instead of didMoveOnscreen.
+        * page/FrameView.cpp:
+        (WebCore::FrameView::didMoveOnscreen):
+        (WebCore::FrameView::willMoveOffscreen):
+        RenderView doesn't care about moving on/offscreen, just in-window state.
+        (WebCore::FrameView::setIsInWindow): Added. Forward isInWindow changes to our RenderView.
+        * page/FrameView.h:
+        (FrameView): Add setIsInWindow.
+        * page/Page.cpp:
+        (WebCore::Page::setIsInWindow): Added. Forward isInWindow changes to the Page's FrameViews.
+        * page/Page.h:
+        (Page): Add setIsInWindow.
+        (WebCore::Page::isInWindow):
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::setIsInWindow): Added. Replace willMoveOffscreen/didMoveOnscreen with setIsInWindow,
+        since that's the only change we actually care about.
+        * rendering/RenderLayerCompositor.h:
+        (RenderLayerCompositor): Add setIsInWindow.
+        * rendering/RenderView.cpp:
+        (WebCore::RenderView::setIsInWindow): Added. Replace willMoveOffscreen/didMoveOnscreen with setIsInWindow,
+        since that's the only change RenderLayerCompositor actually cares about.
+        * rendering/RenderView.h:
+        (RenderView): Add setIsInWindow.
+
 2013-02-19  Eugene Klyuchnikov  <[email protected]>
 
         Web Inspector: Cleanup and add JSDocs to SuggestBox

Modified: trunk/Source/WebCore/WebCore.exp.in (143427 => 143428)


--- trunk/Source/WebCore/WebCore.exp.in	2013-02-20 05:24:35 UTC (rev 143427)
+++ trunk/Source/WebCore/WebCore.exp.in	2013-02-20 05:53:02 UTC (rev 143428)
@@ -771,6 +771,7 @@
 __ZN7WebCore4Page12setGroupNameERKN3WTF6StringE
 __ZN7WebCore4Page11setViewModeENS0_8ViewModeE
 __ZN7WebCore4Page13rangeOfStringERKN3WTF6StringEPNS_5RangeEj
+__ZN7WebCore4Page13setIsInWindowEb
 __ZN7WebCore4Page13setPaginationERKNS_10PaginationE
 __ZN7WebCore4Page14setMediaVolumeEf
 __ZN7WebCore4Page15addSchedulePairEN3WTF10PassRefPtrINS_12SchedulePairEEE

Modified: trunk/Source/WebCore/dom/Document.cpp (143427 => 143428)


--- trunk/Source/WebCore/dom/Document.cpp	2013-02-20 05:24:35 UTC (rev 143427)
+++ trunk/Source/WebCore/dom/Document.cpp	2013-02-20 05:53:02 UTC (rev 143428)
@@ -2015,7 +2015,7 @@
     // Create the rendering tree
     setRenderer(new (m_renderArena.get()) RenderView(this));
 #if USE(ACCELERATED_COMPOSITING)
-    renderView()->didMoveOnscreen();
+    renderView()->setIsInWindow(true);
 #endif
 
     recalcStyle(Force);
@@ -4035,7 +4035,7 @@
 {
 #if USE(ACCELERATED_COMPOSITING)
     if (renderer())
-        renderView()->willMoveOffscreen();
+        renderView()->setIsInWindow(false);
 #endif
 }
 
@@ -4064,7 +4064,7 @@
 
 #if USE(ACCELERATED_COMPOSITING)
     if (renderer())
-        renderView()->didMoveOnscreen();
+        renderView()->setIsInWindow(true);
 #endif
 
     if (FrameView* frameView = view())

Modified: trunk/Source/WebCore/page/FrameView.cpp (143427 => 143428)


--- trunk/Source/WebCore/page/FrameView.cpp	2013-02-20 05:24:35 UTC (rev 143427)
+++ trunk/Source/WebCore/page/FrameView.cpp	2013-02-20 05:53:02 UTC (rev 143428)
@@ -970,18 +970,20 @@
 
 void FrameView::didMoveOnscreen()
 {
-    if (RenderView* renderView = this->renderView())
-        renderView->didMoveOnscreen();
     contentAreaDidShow();
 }
 
 void FrameView::willMoveOffscreen()
 {
-    if (RenderView* renderView = this->renderView())
-        renderView->willMoveOffscreen();
     contentAreaDidHide();
 }
 
+void FrameView::setIsInWindow(bool isInWindow)
+{
+    if (RenderView* renderView = this->renderView())
+        renderView->setIsInWindow(isInWindow);
+}
+
 RenderObject* FrameView::layoutRoot(bool onlyDuringLayout) const
 {
     return onlyDuringLayout && layoutPending() ? 0 : m_layoutRoot;

Modified: trunk/Source/WebCore/page/FrameView.h (143427 => 143428)


--- trunk/Source/WebCore/page/FrameView.h	2013-02-20 05:24:35 UTC (rev 143427)
+++ trunk/Source/WebCore/page/FrameView.h	2013-02-20 05:53:02 UTC (rev 143428)
@@ -153,6 +153,7 @@
 
     void didMoveOnscreen();
     void willMoveOffscreen();
+    void setIsInWindow(bool);
 
     void resetScrollbars();
     void resetScrollbarsAndClearContentsSize();

Modified: trunk/Source/WebCore/page/Page.cpp (143427 => 143428)


--- trunk/Source/WebCore/page/Page.cpp	2013-02-20 05:24:35 UTC (rev 143427)
+++ trunk/Source/WebCore/page/Page.cpp	2013-02-20 05:53:02 UTC (rev 143428)
@@ -891,6 +891,19 @@
     suspendScriptedAnimations();
 }
 
+void Page::setIsInWindow(bool isInWindow)
+{
+    if (m_isInWindow == isInWindow)
+        return;
+
+    m_isInWindow = isInWindow;
+
+    for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) {
+        if (FrameView* frameView = frame->view())
+            frameView->setIsInWindow(isInWindow);
+    }
+}
+
 void Page::windowScreenDidChange(PlatformDisplayID displayID)
 {
     m_displayID = displayID;

Modified: trunk/Source/WebCore/page/Page.h (143427 => 143428)


--- trunk/Source/WebCore/page/Page.h	2013-02-20 05:24:35 UTC (rev 143427)
+++ trunk/Source/WebCore/page/Page.h	2013-02-20 05:53:02 UTC (rev 143428)
@@ -290,6 +290,10 @@
     void willMoveOffscreen();
     bool isOnscreen() const { return m_isOnscreen; }
 
+    // Notification that this Page was moved into or out of a native window.
+    void setIsInWindow(bool);
+    bool isInWindow() const { return m_isInWindow; }
+
     void windowScreenDidChange(PlatformDisplayID);
 
     void suspendScriptedAnimations();
@@ -472,6 +476,7 @@
 
     bool m_isEditable;
     bool m_isOnscreen;
+    bool m_isInWindow;
 
 #if ENABLE(PAGE_VISIBILITY_API)
     PageVisibilityState m_visibilityState;

Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (143427 => 143428)


--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2013-02-20 05:24:35 UTC (rev 143427)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2013-02-20 05:53:02 UTC (rev 143428)
@@ -1516,27 +1516,26 @@
     return renderViewBacking ? renderViewBacking->tiledBacking() : 0;
 }
 
-void RenderLayerCompositor::didMoveOnscreen()
+void RenderLayerCompositor::setIsInWindow(bool isInWindow)
 {
     if (TiledBacking* tiledBacking = pageTiledBacking())
-        tiledBacking->setIsInWindow(true);
+        tiledBacking->setIsInWindow(isInWindow);
 
-    if (!inCompositingMode() || m_rootLayerAttachment != RootLayerUnattached)
+    if (!inCompositingMode())
         return;
 
-    RootLayerAttachment attachment = shouldPropagateCompositingToEnclosingFrame() ? RootLayerAttachedViaEnclosingFrame : RootLayerAttachedViaChromeClient;
-    attachRootLayer(attachment);
-}
+    if (isInWindow) {
+        if (m_rootLayerAttachment != RootLayerUnattached)
+            return;
 
-void RenderLayerCompositor::willMoveOffscreen()
-{
-    if (TiledBacking* tiledBacking = pageTiledBacking())
-        tiledBacking->setIsInWindow(false);
+        RootLayerAttachment attachment = shouldPropagateCompositingToEnclosingFrame() ? RootLayerAttachedViaEnclosingFrame : RootLayerAttachedViaChromeClient;
+        attachRootLayer(attachment);
+    } else {
+        if (m_rootLayerAttachment == RootLayerUnattached)
+            return;
 
-    if (!inCompositingMode() || m_rootLayerAttachment == RootLayerUnattached)
-        return;
-
-    detachRootLayer();
+        detachRootLayer();
+    }
 }
 
 void RenderLayerCompositor::clearBackingForLayerIncludingDescendants(RenderLayer* layer)

Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.h (143427 => 143428)


--- trunk/Source/WebCore/rendering/RenderLayerCompositor.h	2013-02-20 05:24:35 UTC (rev 143427)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.h	2013-02-20 05:53:02 UTC (rev 143428)
@@ -171,8 +171,7 @@
     void updateRootLayerAttachment();
     void updateRootLayerPosition();
     
-    void didMoveOnscreen();
-    void willMoveOffscreen();
+    void setIsInWindow(bool);
 
     void clearBackingForAllLayers();
     

Modified: trunk/Source/WebCore/rendering/RenderView.cpp (143427 => 143428)


--- trunk/Source/WebCore/rendering/RenderView.cpp	2013-02-20 05:24:35 UTC (rev 143427)
+++ trunk/Source/WebCore/rendering/RenderView.cpp	2013-02-20 05:53:02 UTC (rev 143428)
@@ -1077,22 +1077,14 @@
 }
 #endif
 
-void RenderView::didMoveOnscreen()
+void RenderView::setIsInWindow(bool isInWindow)
 {
 #if USE(ACCELERATED_COMPOSITING)
     if (m_compositor)
-        m_compositor->didMoveOnscreen();
+        m_compositor->setIsInWindow(isInWindow);
 #endif
 }
 
-void RenderView::willMoveOffscreen()
-{
-#if USE(ACCELERATED_COMPOSITING)
-    if (m_compositor)
-        m_compositor->willMoveOffscreen();
-#endif
-}
-
 #if ENABLE(CSS_SHADERS) && USE(3D_GRAPHICS)
 CustomFilterGlobalContext* RenderView::customFilterGlobalContext()
 {

Modified: trunk/Source/WebCore/rendering/RenderView.h (143427 => 143428)


--- trunk/Source/WebCore/rendering/RenderView.h	2013-02-20 05:24:35 UTC (rev 143427)
+++ trunk/Source/WebCore/rendering/RenderView.h	2013-02-20 05:53:02 UTC (rev 143428)
@@ -183,10 +183,8 @@
     void setPrintRect(const IntRect& r) { m_legacyPrinting.m_printRect = r; }
     // End deprecated functions.
 
-    // Notifications that this view became visible in a window, or will be
-    // removed from the window.
-    void didMoveOnscreen();
-    void willMoveOffscreen();
+    // Notification that this view moved into or out of a native window.
+    void setIsInWindow(bool);
 
 #if USE(ACCELERATED_COMPOSITING)
     RenderLayerCompositor* compositor();

Modified: trunk/Source/WebKit/mac/ChangeLog (143427 => 143428)


--- trunk/Source/WebKit/mac/ChangeLog	2013-02-20 05:24:35 UTC (rev 143427)
+++ trunk/Source/WebKit/mac/ChangeLog	2013-02-20 05:53:02 UTC (rev 143428)
@@ -1,3 +1,16 @@
+2013-02-19  Tim Horton  <[email protected]>
+
+        Clarify isInWindow vs. isVisible path through to RenderLayerCompositor
+        https://bugs.webkit.org/show_bug.cgi?id=110261
+        <rdar://problem/13196122>
+
+        Reviewed by Simon Fraser.
+
+        * WebView/WebView.mm:
+        (-[WebView viewWillMoveToWindow:]):
+        (-[WebView viewDidMoveToWindow]):
+        Use Page::setIsInWindow in addition to willMoveOffscreen/didMoveOnscreen.
+
 2013-02-18  Anders Carlsson  <[email protected]>
 
         Add a DefaultHash for RefPtr<SecurityOrigin>

Modified: trunk/Source/WebKit/mac/WebView/WebView.mm (143427 => 143428)


--- trunk/Source/WebKit/mac/WebView/WebView.mm	2013-02-20 05:24:35 UTC (rev 143427)
+++ trunk/Source/WebKit/mac/WebView/WebView.mm	2013-02-20 05:53:02 UTC (rev 143428)
@@ -3610,6 +3610,7 @@
     } else {
         _private->page->setCanStartMedia(false);
         _private->page->willMoveOffscreen();
+        _private->page->setIsInWindow(false);
     }
         
     if (window != [self window]) {
@@ -3630,6 +3631,7 @@
     if ([self window]) {
         _private->page->setCanStartMedia(true);
         _private->page->didMoveOnscreen();
+        _private->page->setIsInWindow(true);
     }
     
     _private->page->setDeviceScaleFactor([self _deviceScaleFactor]);

Modified: trunk/Source/WebKit2/ChangeLog (143427 => 143428)


--- trunk/Source/WebKit2/ChangeLog	2013-02-20 05:24:35 UTC (rev 143427)
+++ trunk/Source/WebKit2/ChangeLog	2013-02-20 05:53:02 UTC (rev 143428)
@@ -1,3 +1,15 @@
+2013-02-19  Tim Horton  <[email protected]>
+
+        Clarify isInWindow vs. isVisible path through to RenderLayerCompositor
+        https://bugs.webkit.org/show_bug.cgi?id=110261
+        <rdar://problem/13196122>
+
+        Reviewed by Simon Fraser.
+
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::setIsInWindow):
+        Use Page::setIsInWindow in addition to willMoveOffscreen/didMoveOnscreen.
+
 2013-02-19  Conrad Shultz  <[email protected]>
 
         Allow UI clients to handle vertical wheel events.

Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (143427 => 143428)


--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2013-02-20 05:24:35 UTC (rev 143427)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2013-02-20 05:53:02 UTC (rev 143428)
@@ -1982,7 +1982,7 @@
         m_page->setCanStartMedia(false);
         m_page->willMoveOffscreen();
     } else {
-        // Defer the call to Page::setCanStartMedia() since it ends up sending a syncrhonous messages to the UI process
+        // Defer the call to Page::setCanStartMedia() since it ends up sending a synchronous message to the UI process
         // in order to get plug-in connections, and the UI process will be waiting for the Web process to update the backing
         // store after moving the view into a window, until it times out and paints white. See <rdar://problem/9242771>.
         if (m_mayStartMediaWhenInWindow)
@@ -1990,6 +1990,8 @@
 
         m_page->didMoveOnscreen();
     }
+
+    m_page->setIsInWindow(isInWindow);
 }
 
 void WebPage::didReceivePolicyDecision(uint64_t frameID, uint64_t listenerID, uint32_t policyAction, uint64_t downloadID)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to