Title: [116130] trunk/Source/WebKit2
- Revision
- 116130
- Author
- [email protected]
- Date
- 2012-05-04 11:30:58 -0700 (Fri, 04 May 2012)
Log Message
TiledCoreAnimationDrawingArea should handle visibility changes
https://bugs.webkit.org/show_bug.cgi?id=85645
<rdar://problem/11247192>
Reviewed by Oliver Hunt.
Replicate the visibility handling logic from DrawingAreaImpl and LayerTreeHostCAMac.
* UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
(TiledCoreAnimationDrawingAreaProxy):
* UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
(WebKit::TiledCoreAnimationDrawingAreaProxy::visibilityDidChange):
(WebKit):
* WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
(TiledCoreAnimationDrawingArea):
* WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
(WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
(WebKit::TiledCoreAnimationDrawingArea::suspendPainting):
(WebKit):
(WebKit::TiledCoreAnimationDrawingArea::resumePainting):
Modified Paths
Diff
Modified: trunk/Source/WebKit2/ChangeLog (116129 => 116130)
--- trunk/Source/WebKit2/ChangeLog 2012-05-04 18:28:05 UTC (rev 116129)
+++ trunk/Source/WebKit2/ChangeLog 2012-05-04 18:30:58 UTC (rev 116130)
@@ -1,3 +1,26 @@
+2012-05-04 Anders Carlsson <[email protected]>
+
+ TiledCoreAnimationDrawingArea should handle visibility changes
+ https://bugs.webkit.org/show_bug.cgi?id=85645
+ <rdar://problem/11247192>
+
+ Reviewed by Oliver Hunt.
+
+ Replicate the visibility handling logic from DrawingAreaImpl and LayerTreeHostCAMac.
+
+ * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
+ (TiledCoreAnimationDrawingAreaProxy):
+ * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
+ (WebKit::TiledCoreAnimationDrawingAreaProxy::visibilityDidChange):
+ (WebKit):
+ * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
+ (TiledCoreAnimationDrawingArea):
+ * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
+ (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
+ (WebKit::TiledCoreAnimationDrawingArea::suspendPainting):
+ (WebKit):
+ (WebKit::TiledCoreAnimationDrawingArea::resumePainting):
+
2012-05-04 Nate Chapin <[email protected]>
Don't require FrameLoaderClient to manufacture a commitData() call for empty documents.
Modified: trunk/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h (116129 => 116130)
--- trunk/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h 2012-05-04 18:28:05 UTC (rev 116129)
+++ trunk/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h 2012-05-04 18:30:58 UTC (rev 116130)
@@ -44,6 +44,7 @@
// DrawingAreaProxy
virtual void deviceScaleFactorDidChange() OVERRIDE;
virtual void layerHostingModeDidChange() OVERRIDE;
+ virtual void visibilityDidChange() OVERRIDE;
virtual void sizeDidChange() OVERRIDE;
virtual void waitForPossibleGeometryUpdate() OVERRIDE;
Modified: trunk/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm (116129 => 116130)
--- trunk/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm 2012-05-04 18:28:05 UTC (rev 116129)
+++ trunk/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm 2012-05-04 18:30:58 UTC (rev 116130)
@@ -58,6 +58,14 @@
m_webPageProxy->process()->send(Messages::DrawingArea::SetDeviceScaleFactor(m_webPageProxy->deviceScaleFactor()), m_webPageProxy->pageID());
}
+void TiledCoreAnimationDrawingAreaProxy::visibilityDidChange()
+{
+ if (!m_webPageProxy->isViewVisible())
+ m_webPageProxy->process()->send(Messages::DrawingArea::SuspendPainting(), m_webPageProxy->pageID());
+ else
+ m_webPageProxy->process()->send(Messages::DrawingArea::ResumePainting(), m_webPageProxy->pageID());
+}
+
void TiledCoreAnimationDrawingAreaProxy::layerHostingModeDidChange()
{
m_webPageProxy->process()->send(Messages::DrawingArea::SetLayerHostingMode(m_webPageProxy->layerHostingMode()), m_webPageProxy->pageID());
Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h (116129 => 116130)
--- trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h 2012-05-04 18:28:05 UTC (rev 116129)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h 2012-05-04 18:30:58 UTC (rev 116130)
@@ -80,6 +80,8 @@
virtual bool flushLayers() OVERRIDE;
// Message handlers.
+ virtual void suspendPainting() OVERRIDE;
+ virtual void resumePainting() OVERRIDE;
virtual void updateGeometry(const WebCore::IntSize& viewSize) OVERRIDE;
virtual void setDeviceScaleFactor(float) OVERRIDE;
virtual void setLayerHostingMode(uint32_t) OVERRIDE;
@@ -101,7 +103,8 @@
RetainPtr<CALayer> m_debugInfoLayer;
OwnPtr<WebCore::GraphicsLayer> m_pageOverlayLayer;
- WebCore::FloatPoint m_mainFrameScrollLayerPosition;
+
+ bool m_isPaintingSuspended;
};
} // namespace WebKit
Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm (116129 => 116130)
--- trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm 2012-05-04 18:28:05 UTC (rev 116129)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm 2012-05-04 18:30:58 UTC (rev 116130)
@@ -33,6 +33,7 @@
#import "LayerHostingContext.h"
#import "LayerTreeContext.h"
#import "WebPage.h"
+#import "WebPageCreationParameters.h"
#import "WebPageProxyMessages.h"
#import "WebProcess.h"
#import <QuartzCore/QuartzCore.h>
@@ -65,6 +66,7 @@
: DrawingArea(DrawingAreaTypeTiledCoreAnimation, webPage)
, m_layerTreeStateIsFrozen(false)
, m_layerFlushScheduler(this)
+ , m_isPaintingSuspended(!parameters.isVisible)
{
Page* page = webPage->corePage();
@@ -285,6 +287,33 @@
return returnValue;
}
+void TiledCoreAnimationDrawingArea::suspendPainting()
+{
+ ASSERT(!m_isPaintingSuspended);
+ m_isPaintingSuspended = true;
+
+ [m_rootLayer.get() setValue:(id)kCFBooleanTrue forKey:@"NSCAViewRenderPaused"];
+ [[NSNotificationCenter defaultCenter] postNotificationName:@"NSCAViewRenderDidPauseNotification" object:nil userInfo:[NSDictionary dictionaryWithObject:m_rootLayer.get() forKey:@"layer"]];
+
+ m_webPage->corePage()->suspendScriptedAnimations();
+}
+
+void TiledCoreAnimationDrawingArea::resumePainting()
+{
+ if (!m_isPaintingSuspended) {
+ // FIXME: We can get a call to resumePainting when painting is not suspended.
+ // This happens when sending a synchronous message to create a new page. See <rdar://problem/8976531>.
+ return;
+ }
+ m_isPaintingSuspended = false;
+
+ [m_rootLayer.get() setValue:(id)kCFBooleanFalse forKey:@"NSCAViewRenderPaused"];
+ [[NSNotificationCenter defaultCenter] postNotificationName:@"NSCAViewRenderDidResumeNotification" object:nil userInfo:[NSDictionary dictionaryWithObject:m_rootLayer.get() forKey:@"layer"]];
+
+ if (m_webPage->windowIsVisible())
+ m_webPage->corePage()->resumeScriptedAnimations();
+}
+
void TiledCoreAnimationDrawingArea::updateGeometry(const IntSize& viewSize)
{
m_webPage->setSize(viewSize);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes