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

Reply via email to