[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-10851-g50815da

vangelis at chromium.org vangelis at chromium.org
Wed Dec 22 17:48:58 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 1bbe613e174d8c05a642577d4c1a0cc9bb1f9775
Author: vangelis at chromium.org <vangelis at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Nov 30 20:41:59 2010 +0000

    2010-11-29  Vangelis Kokkevis  <vangelis at chromium.org>
    
            Reviewed by Simon Fraser.
    
            Provide more fine grained control to ports over when to turn on accelerated
            compositing.
            https://bugs.webkit.org/show_bug.cgi?id=49998
    
            As part of this change, the old hasAcceleratedCompositing method on the ChromeClient
            has now been replaced by allowedCompositingTriggers which returns a bitfield of
            all the features which can trigger the compositor.
    
            * src/ChromeClientImpl.cpp:
            (WebKit::ChromeClientImpl::allowedCompositingTriggers):
            * src/ChromeClientImpl.h:
    2010-11-29  Vangelis Kokkevis  <vangelis at chromium.org>
    
            Reviewed by Simon Fraser.
    
            Provide more fine grained control to ports over when to turn on accelerated
            compositing.
            https://bugs.webkit.org/show_bug.cgi?id=49998
    
            As part of this change, the old hasAcceleratedCompositing method on the ChromeClient
            has now been replaced by allowedCompositingTriggers which returns a bitfield of
            all the features which can trigger the compositor.
    
    
            * WebCoreSupport/ChromeClientQt.cpp:
            (WebCore::ChromeClientQt::allowedCompositingTriggers):
            * WebCoreSupport/ChromeClientQt.h:
    2010-11-30  Vangelis Kokkevis  <vangelis at chromium.org>
    
            Reviewed by Simon Fraser.
    
            Provide more fine grained control to ports over when to turn on
            accelerated compositing.
            https://bugs.webkit.org/show_bug.cgi?id=49998
    
            The RenderLayerCompositor now checks with the chrome client whether
            3d transforms, video, plugins, canvas and animation require
            switching over to the composited path. Layers that overlap composited
            content will still turn into composited layers regardless of the
            setting.
    
            * css/MediaQueryEvaluator.cpp:
            (WebCore::transform_3dMediaFeatureEval):
            * page/ChromeClient.h:
            (WebCore::ChromeClient::allowedCompositingTriggers):
            * rendering/RenderLayer.cpp:
            (WebCore::RenderLayer::canRender3DTransforms):
            (WebCore::RenderLayer::updateTransform):
            (WebCore::RenderLayer::currentTransform):
            * rendering/RenderLayer.h:
            * rendering/RenderLayerBacking.cpp:
            (WebCore::RenderLayerBacking::updateLayerTransform):
            * rendering/RenderLayerCompositor.cpp:
            (WebCore::RenderLayerCompositor::RenderLayerCompositor):
            (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingFlags):
            (WebCore::RenderLayerCompositor::canRender3DTransforms):
            (WebCore::RenderLayerCompositor::requiresCompositingLayer):
            (WebCore::RenderLayerCompositor::requiresCompositingForTransform):
            (WebCore::RenderLayerCompositor::requiresCompositingForVideo):
            (WebCore::RenderLayerCompositor::requiresCompositingForCanvas):
            (WebCore::RenderLayerCompositor::requiresCompositingForPlugin):
            (WebCore::RenderLayerCompositor::requiresCompositingForAnimation):
            * rendering/RenderLayerCompositor.h:
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@72954 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index b84aff7..9559306 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,40 @@
+2010-11-30  Vangelis Kokkevis  <vangelis at chromium.org>
+
+        Reviewed by Simon Fraser.
+
+        Provide more fine grained control to ports over when to turn on 
+        accelerated compositing.
+        https://bugs.webkit.org/show_bug.cgi?id=49998
+
+        The RenderLayerCompositor now checks with the chrome client whether
+        3d transforms, video, plugins, canvas and animation require
+        switching over to the composited path. Layers that overlap composited
+        content will still turn into composited layers regardless of the
+        setting.
+
+        * css/MediaQueryEvaluator.cpp:
+        (WebCore::transform_3dMediaFeatureEval):
+        * page/ChromeClient.h:
+        (WebCore::ChromeClient::allowedCompositingTriggers):
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::canRender3DTransforms):
+        (WebCore::RenderLayer::updateTransform):
+        (WebCore::RenderLayer::currentTransform):
+        * rendering/RenderLayer.h:
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::RenderLayerBacking::updateLayerTransform):
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
+        (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingFlags):
+        (WebCore::RenderLayerCompositor::canRender3DTransforms):
+        (WebCore::RenderLayerCompositor::requiresCompositingLayer):
+        (WebCore::RenderLayerCompositor::requiresCompositingForTransform):
+        (WebCore::RenderLayerCompositor::requiresCompositingForVideo):
+        (WebCore::RenderLayerCompositor::requiresCompositingForCanvas):
+        (WebCore::RenderLayerCompositor::requiresCompositingForPlugin):
+        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation):
+        * rendering/RenderLayerCompositor.h:
+
 2010-11-30  Xan Lopez  <xlopez at igalia.com>
 
         Reviewed by Martin Robinson.
diff --git a/WebCore/css/MediaQueryEvaluator.cpp b/WebCore/css/MediaQueryEvaluator.cpp
index c757d51..fa2e099 100644
--- a/WebCore/css/MediaQueryEvaluator.cpp
+++ b/WebCore/css/MediaQueryEvaluator.cpp
@@ -480,7 +480,7 @@ static bool transform_3dMediaFeatureEval(CSSValue* value, RenderStyle*, Frame* f
     bool threeDEnabled = false;
 #if USE(ACCELERATED_COMPOSITING)
     if (RenderView* view = frame->contentRenderer())
-        threeDEnabled = view->compositor()->hasAcceleratedCompositing();
+        threeDEnabled = view->compositor()->canRender3DTransforms();
 #endif
 
     returnValueIfNoParameter = threeDEnabled;
diff --git a/WebCore/page/ChromeClient.h b/WebCore/page/ChromeClient.h
index 39f6853..8a06a8d 100644
--- a/WebCore/page/ChromeClient.h
+++ b/WebCore/page/ChromeClient.h
@@ -236,6 +236,19 @@ namespace WebCore {
         // Returns whether or not the client can render the composited layer,
         // regardless of the settings.
         virtual bool allowsAcceleratedCompositing() const { return true; }
+
+        enum CompositingTrigger {
+            ThreeDTransformTrigger = 1 << 0,
+            VideoTrigger = 1 << 1,
+            PluginTrigger = 1 << 2,
+            CanvasTrigger = 1 << 3,
+            AnimationTrigger = 1 << 4,
+            AllTriggers = 0xFFFFFFFF
+        };
+        typedef unsigned CompositingTriggerFlags;
+
+        // Returns a bitfield indicating conditions that can trigger the compositor.
+        virtual CompositingTriggerFlags allowedCompositingTriggers() const { return static_cast<CompositingTriggerFlags>(AllTriggers); }
 #endif
 
         virtual bool supportsFullscreenForNode(const Node*) { return false; }
diff --git a/WebCore/rendering/RenderLayer.cpp b/WebCore/rendering/RenderLayer.cpp
index 2f4bc51..dbdd2ef 100644
--- a/WebCore/rendering/RenderLayer.cpp
+++ b/WebCore/rendering/RenderLayer.cpp
@@ -249,6 +249,15 @@ bool RenderLayer::hasAcceleratedCompositing() const
 #endif
 }
 
+bool RenderLayer::canRender3DTransforms() const
+{
+#if USE(ACCELERATED_COMPOSITING)
+    return compositor()->canRender3DTransforms();
+#else
+    return false;
+#endif
+}
+
 void RenderLayer::updateLayerPositions(UpdateLayerPositionsFlags flags, IntPoint* cachedOffset)
 {
     if (flags & DoFullRepaint) {
@@ -427,7 +436,7 @@ void RenderLayer::updateTransform()
         ASSERT(box);
         m_transform->makeIdentity();
         box->style()->applyTransform(*m_transform, box->borderBoxRect().size(), RenderStyle::IncludeTransformOrigin);
-        makeMatrixRenderable(*m_transform, hasAcceleratedCompositing());
+        makeMatrixRenderable(*m_transform, canRender3DTransforms());
     }
 
     if (had3DTransform != has3DTransform())
@@ -444,7 +453,7 @@ TransformationMatrix RenderLayer::currentTransform() const
         TransformationMatrix currTransform;
         RefPtr<RenderStyle> style = renderer()->animation()->getAnimatedStyleForRenderer(renderer());
         style->applyTransform(currTransform, renderBox()->borderBoxRect().size(), RenderStyle::IncludeTransformOrigin);
-        makeMatrixRenderable(currTransform, hasAcceleratedCompositing());
+        makeMatrixRenderable(currTransform, canRender3DTransforms());
         return currTransform;
     }
 #endif
diff --git a/WebCore/rendering/RenderLayer.h b/WebCore/rendering/RenderLayer.h
index 07cf2ec..789ee0c 100644
--- a/WebCore/rendering/RenderLayer.h
+++ b/WebCore/rendering/RenderLayer.h
@@ -288,7 +288,9 @@ public:
 
     // Returns true if the accelerated compositing is enabled
     bool hasAcceleratedCompositing() const;
-    
+
+    bool canRender3DTransforms() const;
+
     void updateLayerPosition();
     
     enum UpdateLayerPositionsFlag {
diff --git a/WebCore/rendering/RenderLayerBacking.cpp b/WebCore/rendering/RenderLayerBacking.cpp
index 15def29..b9bf196 100644
--- a/WebCore/rendering/RenderLayerBacking.cpp
+++ b/WebCore/rendering/RenderLayerBacking.cpp
@@ -132,7 +132,7 @@ void RenderLayerBacking::updateLayerTransform(const RenderStyle* style)
     TransformationMatrix t;
     if (m_owningLayer->hasTransform()) {
         style->applyTransform(t, toRenderBox(renderer())->borderBoxRect().size(), RenderStyle::ExcludeTransformOrigin);
-        makeMatrixRenderable(t, compositor()->hasAcceleratedCompositing());
+        makeMatrixRenderable(t, compositor()->canRender3DTransforms());
     }
     
     m_graphicsLayer->setTransform(t);
diff --git a/WebCore/rendering/RenderLayerCompositor.cpp b/WebCore/rendering/RenderLayerCompositor.cpp
index 2ea1aa9..d28f3d7 100644
--- a/WebCore/rendering/RenderLayerCompositor.cpp
+++ b/WebCore/rendering/RenderLayerCompositor.cpp
@@ -94,6 +94,7 @@ RenderLayerCompositor::RenderLayerCompositor(RenderView* renderView)
     , m_rootPlatformLayer(0)
     , m_updateCompositingLayersTimer(this, &RenderLayerCompositor::updateCompositingLayersTimerFired)
     , m_hasAcceleratedCompositing(true)
+    , m_compositingTriggers(static_cast<ChromeClient::CompositingTriggerFlags>(ChromeClient::AllTriggers))
     , m_showDebugBorders(false)
     , m_showRepaintCounter(false)
     , m_compositingConsultsOverlap(true)
@@ -130,7 +131,7 @@ void RenderLayerCompositor::cacheAcceleratedCompositingFlags()
     bool hasAcceleratedCompositing = false;
     bool showDebugBorders = false;
     bool showRepaintCounter = false;
-    
+
     if (Settings* settings = m_renderView->document()->settings()) {
         hasAcceleratedCompositing = settings->acceleratedCompositingEnabled();
         showDebugBorders = settings->showDebugBorders();
@@ -142,18 +143,26 @@ void RenderLayerCompositor::cacheAcceleratedCompositingFlags()
     if (hasAcceleratedCompositing) {
         Frame* frame = m_renderView->frameView()->frame();
         Page* page = frame ? frame->page() : 0;
-        if (page)
-            hasAcceleratedCompositing = page->chrome()->client()->allowsAcceleratedCompositing();
+        if (page) {
+            ChromeClient* chromeClient = page->chrome()->client();
+            m_compositingTriggers = chromeClient->allowedCompositingTriggers();
+            hasAcceleratedCompositing = m_compositingTriggers;
+        }
     }
 
     if (hasAcceleratedCompositing != m_hasAcceleratedCompositing || showDebugBorders != m_showDebugBorders || showRepaintCounter != m_showRepaintCounter)
         setCompositingLayersNeedRebuild();
-        
+
     m_hasAcceleratedCompositing = hasAcceleratedCompositing;
     m_showDebugBorders = showDebugBorders;
     m_showRepaintCounter = showRepaintCounter;
 }
 
+bool RenderLayerCompositor::canRender3DTransforms() const
+{
+    return hasAcceleratedCompositing() && (m_compositingTriggers & ChromeClient::ThreeDTransformTrigger);
+}
+
 void RenderLayerCompositor::setCompositingLayersNeedRebuild(bool needRebuild)
 {
     if (inCompositingMode())
@@ -1127,7 +1136,7 @@ bool RenderLayerCompositor::requiresCompositingLayer(const RenderLayer* layer) c
              || requiresCompositingForCanvas(renderer)
              || requiresCompositingForPlugin(renderer)
              || requiresCompositingForIFrame(renderer)
-             || renderer->style()->backfaceVisibility() == BackfaceVisibilityHidden
+             || (canRender3DTransforms() && renderer->style()->backfaceVisibility() == BackfaceVisibilityHidden)
              || clipsCompositingDescendants(layer)
              || requiresCompositingForAnimation(renderer);
 }
@@ -1183,6 +1192,9 @@ bool RenderLayerCompositor::clipsCompositingDescendants(const RenderLayer* layer
 
 bool RenderLayerCompositor::requiresCompositingForTransform(RenderObject* renderer) const
 {
+    if (!(m_compositingTriggers & ChromeClient::ThreeDTransformTrigger))
+        return false;
+
     RenderStyle* style = renderer->style();
     // Note that we ask the renderer if it has a transform, because the style may have transforms,
     // but the renderer may be an inline that doesn't suppport them.
@@ -1191,6 +1203,8 @@ bool RenderLayerCompositor::requiresCompositingForTransform(RenderObject* render
 
 bool RenderLayerCompositor::requiresCompositingForVideo(RenderObject* renderer) const
 {
+    if (!(m_compositingTriggers & ChromeClient::VideoTrigger))
+        return false;
 #if ENABLE(VIDEO)
     if (renderer->isVideo()) {
         RenderVideo* video = toRenderVideo(renderer);
@@ -1217,6 +1231,9 @@ bool RenderLayerCompositor::requiresCompositingForVideo(RenderObject* renderer)
 
 bool RenderLayerCompositor::requiresCompositingForCanvas(RenderObject* renderer) const
 {
+    if (!(m_compositingTriggers & ChromeClient::CanvasTrigger))
+        return false;
+
     if (renderer->isCanvas()) {
         HTMLCanvasElement* canvas = static_cast<HTMLCanvasElement*>(renderer->node());
         return canvas->renderingContext() && canvas->renderingContext()->isAccelerated();
@@ -1226,6 +1243,9 @@ bool RenderLayerCompositor::requiresCompositingForCanvas(RenderObject* renderer)
 
 bool RenderLayerCompositor::requiresCompositingForPlugin(RenderObject* renderer) const
 {
+    if (!(m_compositingTriggers & ChromeClient::PluginTrigger))
+        return false;
+
     bool composite = (renderer->isEmbeddedObject() && toRenderEmbeddedObject(renderer)->allowsAcceleratedCompositing())
                   || (renderer->isApplet() && toRenderApplet(renderer)->allowsAcceleratedCompositing());
     if (!composite)
@@ -1270,6 +1290,9 @@ bool RenderLayerCompositor::requiresCompositingForIFrame(RenderObject* renderer)
 
 bool RenderLayerCompositor::requiresCompositingForAnimation(RenderObject* renderer) const
 {
+    if (!(m_compositingTriggers & ChromeClient::AnimationTrigger))
+        return false;
+
     if (AnimationController* animController = renderer->animation()) {
         return (animController->isRunningAnimationOnRenderer(renderer, CSSPropertyOpacity) && inCompositingMode())
             || animController->isRunningAnimationOnRenderer(renderer, CSSPropertyWebkitTransform);
diff --git a/WebCore/rendering/RenderLayerCompositor.h b/WebCore/rendering/RenderLayerCompositor.h
index ab4ac24..f7e4ffa 100644
--- a/WebCore/rendering/RenderLayerCompositor.h
+++ b/WebCore/rendering/RenderLayerCompositor.h
@@ -26,6 +26,7 @@
 #ifndef RenderLayerCompositor_h
 #define RenderLayerCompositor_h
 
+#include "ChromeClient.h"
 #include "RenderLayer.h"
 #include "RenderLayerBacking.h"
 
@@ -67,7 +68,9 @@ public:
     
     // Returns true if the accelerated compositing is enabled
     bool hasAcceleratedCompositing() const { return m_hasAcceleratedCompositing; }
-    
+
+    bool canRender3DTransforms() const;
+
     bool showDebugBorders() const { return m_showDebugBorders; }
     bool showRepaintCounter() const { return m_showRepaintCounter; }
     
@@ -232,6 +235,8 @@ private:
     Timer<RenderLayerCompositor> m_updateCompositingLayersTimer;
 
     bool m_hasAcceleratedCompositing;
+    ChromeClient::CompositingTriggerFlags m_compositingTriggers;
+
     bool m_showDebugBorders;
     bool m_showRepaintCounter;
     bool m_compositingConsultsOverlap;
diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
index c89c723..3dddd80 100644
--- a/WebKit/chromium/ChangeLog
+++ b/WebKit/chromium/ChangeLog
@@ -1,3 +1,19 @@
+2010-11-29  Vangelis Kokkevis  <vangelis at chromium.org>
+
+        Reviewed by Simon Fraser.
+
+        Provide more fine grained control to ports over when to turn on accelerated
+        compositing.
+        https://bugs.webkit.org/show_bug.cgi?id=49998
+
+        As part of this change, the old hasAcceleratedCompositing method on the ChromeClient
+        has now been replaced by allowedCompositingTriggers which returns a bitfield of
+        all the features which can trigger the compositor.
+
+        * src/ChromeClientImpl.cpp:
+        (WebKit::ChromeClientImpl::allowedCompositingTriggers):
+        * src/ChromeClientImpl.h:
+
 2010-11-30  Jochen Eisinger  <jochen at chromium.org>
 
         Reviewed by Darin Fisher.
diff --git a/WebKit/chromium/src/ChromeClientImpl.cpp b/WebKit/chromium/src/ChromeClientImpl.cpp
index c43a0b0..169a02b 100644
--- a/WebKit/chromium/src/ChromeClientImpl.cpp
+++ b/WebKit/chromium/src/ChromeClientImpl.cpp
@@ -807,9 +807,12 @@ void ChromeClientImpl::scheduleCompositingLayerSync()
     m_webView->setRootLayerNeedsDisplay();
 }
 
-bool ChromeClientImpl::allowsAcceleratedCompositing() const
+ChromeClient::CompositingTriggerFlags ChromeClientImpl::allowedCompositingTriggers() const
 {
-    return m_webView->allowsAcceleratedCompositing();
+    if (!m_webView->allowsAcceleratedCompositing())
+        return 0;
+
+    return ChromeClient::AllTriggers;
 }
 #endif
 
diff --git a/WebKit/chromium/src/ChromeClientImpl.h b/WebKit/chromium/src/ChromeClientImpl.h
index 87c1653..b024bc0 100644
--- a/WebKit/chromium/src/ChromeClientImpl.h
+++ b/WebKit/chromium/src/ChromeClientImpl.h
@@ -152,8 +152,7 @@ public:
     // to do an eager layout before the drawing.
     virtual void scheduleCompositingLayerSync();
 
-    // Returns true if accelerated compositing is supported.
-    virtual bool allowsAcceleratedCompositing() const;
+    virtual CompositingTriggerFlags allowedCompositingTriggers() const;
 #endif
 
     virtual bool supportsFullscreenForNode(const WebCore::Node*);
diff --git a/WebKit/qt/ChangeLog b/WebKit/qt/ChangeLog
index 92e299e..012f1d7 100644
--- a/WebKit/qt/ChangeLog
+++ b/WebKit/qt/ChangeLog
@@ -1,3 +1,20 @@
+2010-11-29  Vangelis Kokkevis  <vangelis at chromium.org>
+
+        Reviewed by Simon Fraser.
+
+        Provide more fine grained control to ports over when to turn on accelerated
+        compositing.
+        https://bugs.webkit.org/show_bug.cgi?id=49998
+
+        As part of this change, the old hasAcceleratedCompositing method on the ChromeClient
+        has now been replaced by allowedCompositingTriggers which returns a bitfield of
+        all the features which can trigger the compositor.
+
+
+        * WebCoreSupport/ChromeClientQt.cpp:
+        (WebCore::ChromeClientQt::allowedCompositingTriggers):
+        * WebCoreSupport/ChromeClientQt.h:
+
 2010-11-30  Thiago Macieira  <thiago.macieira at nokia.com>
 
         Reviewed by Andreas Kling.
diff --git a/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp b/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp
index d4875a8..e72ef3e 100644
--- a/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp
+++ b/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp
@@ -617,9 +617,12 @@ void ChromeClientQt::scheduleCompositingLayerSync()
         platformPageClient()->markForSync(true);
 }
 
-bool ChromeClientQt::allowsAcceleratedCompositing() const
+ChromeClient::CompositingTriggerFlags ChromeClientQt::allowedCompositingTriggers() const
 {
-    return (platformPageClient() && platformPageClient()->allowsAcceleratedCompositing());
+    if (platformPageClient() && platformPageClient()->allowsAcceleratedCompositing())
+        return AllTriggers;
+
+    return 0;
 }
 
 #endif
diff --git a/WebKit/qt/WebCoreSupport/ChromeClientQt.h b/WebKit/qt/WebCoreSupport/ChromeClientQt.h
index b8bc72d..bcf8975 100644
--- a/WebKit/qt/WebCoreSupport/ChromeClientQt.h
+++ b/WebKit/qt/WebCoreSupport/ChromeClientQt.h
@@ -152,7 +152,7 @@ namespace WebCore {
         virtual void attachRootGraphicsLayer(Frame*, GraphicsLayer*);
         virtual void setNeedsOneShotDrawingSynchronization();
         virtual void scheduleCompositingLayerSync();
-        virtual bool allowsAcceleratedCompositing() const;
+        virtual CompositingTriggerFlags allowedCompositingTriggers() const;
 #endif
 
 #if ENABLE(TILED_BACKING_STORE)

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list