- Revision
- 115310
- Author
- commit-qu...@webkit.org
- Date
- 2012-04-26 07:06:39 -0700 (Thu, 26 Apr 2012)
Log Message
Make it possible to use accelerated compositing for page overlay fading
https://bugs.webkit.org/show_bug.cgi?id=82336
Patch by Lars Knudsen <lars.knud...@nokia.com> on 2012-04-26
Reviewed by Noam Rosenthal.
Page overlay fading will use AC where possible. Otherwise, it will
fall back to the previous method of redrawing each frame in the animation.
* WebProcess/WebPage/DrawingArea.h:
(WebKit::DrawingArea::setPageOverlayOpacity):
(DrawingArea):
(WebKit::DrawingArea::pageOverlayShouldApplyFadeWhenPainting):
* WebProcess/WebPage/DrawingAreaImpl.cpp:
(WebKit::DrawingAreaImpl::setPageOverlayOpacity):
(WebKit):
(WebKit::DrawingAreaImpl::pageOverlayShouldApplyFadeWhenPainting):
* WebProcess/WebPage/DrawingAreaImpl.h:
(DrawingAreaImpl):
* WebProcess/WebPage/LayerTreeHost.h:
(WebKit::LayerTreeHost::setPageOverlayOpacity):
(WebKit::LayerTreeHost::pageOverlayShouldApplyFadeWhenPainting):
* WebProcess/WebPage/PageOverlay.cpp:
(WebKit::PageOverlay::PageOverlay):
(WebKit::PageOverlay::setPage):
(WebKit::PageOverlay::fadeAnimationTimerFired):
* WebProcess/WebPage/PageOverlay.h:
* WebProcess/WebPage/TapHighlightController.cpp:
(WebKit::TapHighlightController::drawRect):
* WebProcess/WebPage/qt/LayerTreeHostQt.cpp:
(WebKit::LayerTreeHostQt::setPageOverlayOpacity):
(WebKit):
* WebProcess/WebPage/qt/LayerTreeHostQt.h:
(LayerTreeHostQt):
(WebKit::LayerTreeHostQt::pageOverlayShouldApplyFadeWhenPainting):
Modified Paths
Diff
Modified: trunk/Source/WebKit2/ChangeLog (115309 => 115310)
--- trunk/Source/WebKit2/ChangeLog 2012-04-26 14:05:42 UTC (rev 115309)
+++ trunk/Source/WebKit2/ChangeLog 2012-04-26 14:06:39 UTC (rev 115310)
@@ -1,3 +1,40 @@
+2012-04-26 Lars Knudsen <lars.knud...@nokia.com>
+
+ Make it possible to use accelerated compositing for page overlay fading
+ https://bugs.webkit.org/show_bug.cgi?id=82336
+
+ Reviewed by Noam Rosenthal.
+
+ Page overlay fading will use AC where possible. Otherwise, it will
+ fall back to the previous method of redrawing each frame in the animation.
+
+ * WebProcess/WebPage/DrawingArea.h:
+ (WebKit::DrawingArea::setPageOverlayOpacity):
+ (DrawingArea):
+ (WebKit::DrawingArea::pageOverlayShouldApplyFadeWhenPainting):
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ (WebKit::DrawingAreaImpl::setPageOverlayOpacity):
+ (WebKit):
+ (WebKit::DrawingAreaImpl::pageOverlayShouldApplyFadeWhenPainting):
+ * WebProcess/WebPage/DrawingAreaImpl.h:
+ (DrawingAreaImpl):
+ * WebProcess/WebPage/LayerTreeHost.h:
+ (WebKit::LayerTreeHost::setPageOverlayOpacity):
+ (WebKit::LayerTreeHost::pageOverlayShouldApplyFadeWhenPainting):
+ * WebProcess/WebPage/PageOverlay.cpp:
+ (WebKit::PageOverlay::PageOverlay):
+ (WebKit::PageOverlay::setPage):
+ (WebKit::PageOverlay::fadeAnimationTimerFired):
+ * WebProcess/WebPage/PageOverlay.h:
+ * WebProcess/WebPage/TapHighlightController.cpp:
+ (WebKit::TapHighlightController::drawRect):
+ * WebProcess/WebPage/qt/LayerTreeHostQt.cpp:
+ (WebKit::LayerTreeHostQt::setPageOverlayOpacity):
+ (WebKit):
+ * WebProcess/WebPage/qt/LayerTreeHostQt.h:
+ (LayerTreeHostQt):
+ (WebKit::LayerTreeHostQt::pageOverlayShouldApplyFadeWhenPainting):
+
2012-04-26 Alexander Færøy <a...@0x90.dk>
[Qt] r115300 broke the Qt build on Mac OS X.
Modified: trunk/Source/WebKit2/WebProcess/WebPage/DrawingArea.h (115309 => 115310)
--- trunk/Source/WebKit2/WebProcess/WebPage/DrawingArea.h 2012-04-26 14:05:42 UTC (rev 115309)
+++ trunk/Source/WebKit2/WebProcess/WebPage/DrawingArea.h 2012-04-26 14:06:39 UTC (rev 115310)
@@ -75,6 +75,9 @@
virtual void didInstallPageOverlay() { }
virtual void didUninstallPageOverlay() { }
virtual void setPageOverlayNeedsDisplay(const WebCore::IntRect&) { }
+ virtual void setPageOverlayOpacity(float) { }
+ // If this function returns false, PageOverlay should apply opacity when painting.
+ virtual bool pageOverlayShouldApplyFadeWhenPainting() const { return true; }
virtual void pageCustomRepresentationChanged() { }
virtual void setPaintingEnabled(bool) { }
Modified: trunk/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp (115309 => 115310)
--- trunk/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp 2012-04-26 14:05:42 UTC (rev 115309)
+++ trunk/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp 2012-04-26 14:06:39 UTC (rev 115310)
@@ -223,6 +223,20 @@
setNeedsDisplay(rect);
}
+void DrawingAreaImpl::setPageOverlayOpacity(float value)
+{
+ if (m_layerTreeHost)
+ m_layerTreeHost->setPageOverlayOpacity(value);
+}
+
+bool DrawingAreaImpl::pageOverlayShouldApplyFadeWhenPainting() const
+{
+ if (m_layerTreeHost && !m_layerTreeHost->pageOverlayShouldApplyFadeWhenPainting())
+ return false;
+
+ return true;
+}
+
void DrawingAreaImpl::pageCustomRepresentationChanged()
{
if (!m_alwaysUseCompositing)
Modified: trunk/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.h (115309 => 115310)
--- trunk/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.h 2012-04-26 14:05:42 UTC (rev 115309)
+++ trunk/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.h 2012-04-26 14:06:39 UTC (rev 115310)
@@ -61,6 +61,8 @@
virtual void didInstallPageOverlay();
virtual void didUninstallPageOverlay();
virtual void setPageOverlayNeedsDisplay(const WebCore::IntRect&);
+ virtual void setPageOverlayOpacity(float);
+ virtual bool pageOverlayShouldApplyFadeWhenPainting() const;
virtual void setPaintingEnabled(bool);
Modified: trunk/Source/WebKit2/WebProcess/WebPage/LayerTreeHost.h (115309 => 115310)
--- trunk/Source/WebKit2/WebProcess/WebPage/LayerTreeHost.h 2012-04-26 14:05:42 UTC (rev 115309)
+++ trunk/Source/WebKit2/WebProcess/WebPage/LayerTreeHost.h 2012-04-26 14:06:39 UTC (rev 115310)
@@ -75,6 +75,8 @@
virtual void didInstallPageOverlay() = 0;
virtual void didUninstallPageOverlay() = 0;
virtual void setPageOverlayNeedsDisplay(const WebCore::IntRect&) = 0;
+ virtual void setPageOverlayOpacity(float) { }
+ virtual bool pageOverlayShouldApplyFadeWhenPainting() const { return true; }
virtual void pauseRendering() { }
virtual void resumeRendering() { }
Modified: trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp (115309 => 115310)
--- trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp 2012-04-26 14:05:42 UTC (rev 115309)
+++ trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp 2012-04-26 14:06:39 UTC (rev 115310)
@@ -54,6 +54,7 @@
, m_fadeAnimationDuration(fadeAnimationDuration)
, m_fadeAnimationType(NoAnimation)
, m_fractionFadedIn(1.0)
+ , m_pageOverlayShouldApplyFadeWhenPainting(true)
{
}
@@ -83,6 +84,9 @@
m_webPage = webPage;
m_client->didMoveToWebPage(this, webPage);
+ if (m_webPage)
+ m_pageOverlayShouldApplyFadeWhenPainting = m_webPage->drawingArea()->pageOverlayShouldApplyFadeWhenPainting();
+
m_fadeAnimationTimer.stop();
}
@@ -157,8 +161,12 @@
float fadeAnimationValue = sine * sine;
m_fractionFadedIn = (m_fadeAnimationType == FadeInAnimation) ? fadeAnimationValue : 1 - fadeAnimationValue;
- setNeedsDisplay();
+ if (m_pageOverlayShouldApplyFadeWhenPainting)
+ setNeedsDisplay();
+ else
+ m_webPage->drawingArea()->setPageOverlayOpacity(m_fractionFadedIn);
+
if (animationProgress == 1.0) {
m_fadeAnimationTimer.stop();
Modified: trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.h (115309 => 115310)
--- trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.h 2012-04-26 14:05:42 UTC (rev 115309)
+++ trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.h 2012-04-26 14:06:39 UTC (rev 115310)
@@ -98,6 +98,7 @@
FadeAnimationType m_fadeAnimationType;
float m_fractionFadedIn;
+ bool m_pageOverlayShouldApplyFadeWhenPainting;
};
} // namespace WebKit
Modified: trunk/Source/WebKit2/WebProcess/WebPage/TapHighlightController.cpp (115309 => 115310)
--- trunk/Source/WebKit2/WebProcess/WebPage/TapHighlightController.cpp 2012-04-26 14:05:42 UTC (rev 115309)
+++ trunk/Source/WebKit2/WebProcess/WebPage/TapHighlightController.cpp 2012-04-26 14:06:39 UTC (rev 115310)
@@ -102,11 +102,12 @@
if (m_path.isEmpty())
return;
- float fractionFadedIn = pageOverlay->fractionFadedIn();
-
{
GraphicsContextStateSaver stateSaver(context);
- context.setFillColor(highlightColor(m_color, fractionFadedIn), ColorSpaceSRGB);
+ if (m_webPage->drawingArea()->pageOverlayShouldApplyFadeWhenPainting())
+ context.setFillColor(highlightColor(m_color, pageOverlay->fractionFadedIn()), ColorSpaceSRGB);
+ else
+ context.setFillColor(m_color, ColorSpaceSRGB);
context.fillPath(m_path);
}
}
Modified: trunk/Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp (115309 => 115310)
--- trunk/Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp 2012-04-26 14:05:42 UTC (rev 115309)
+++ trunk/Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp 2012-04-26 14:06:39 UTC (rev 115310)
@@ -222,6 +222,13 @@
scheduleLayerFlush();
}
+void LayerTreeHostQt::setPageOverlayOpacity(float value)
+{
+ ASSERT(m_pageOverlayLayer);
+ m_pageOverlayLayer->setOpacity(value);
+ scheduleLayerFlush();
+}
+
bool LayerTreeHostQt::flushPendingLayerChanges()
{
bool didSync = m_webPage->corePage()->mainFrame()->view()->syncCompositingStateIncludingSubframes();
Modified: trunk/Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.h (115309 => 115310)
--- trunk/Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.h 2012-04-26 14:05:42 UTC (rev 115309)
+++ trunk/Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.h 2012-04-26 14:06:39 UTC (rev 115310)
@@ -57,6 +57,8 @@
virtual void didInstallPageOverlay();
virtual void didUninstallPageOverlay();
virtual void setPageOverlayNeedsDisplay(const WebCore::IntRect&);
+ virtual void setPageOverlayOpacity(float);
+ virtual bool pageOverlayShouldApplyFadeWhenPainting() const { return false; }
virtual void pauseRendering() { m_isSuspended = true; }
virtual void resumeRendering() { m_isSuspended = false; scheduleLayerFlush(); }