- 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)