Title: [92651] trunk/Source
Revision
92651
Author
[email protected]
Date
2011-08-08 16:21:16 -0700 (Mon, 08 Aug 2011)

Log Message

Logic to compute visible display rect in GraphicsLayerCA::syncCompositingState
https://bugs.webkit.org/show_bug.cgi?id=65708

Source/WebCore: 

Add logic to syncCompositingState to compute the visible rect for each
layer. This can be used to synchronously render the visible tiles of a
TiledLayer and avoid the flashing that often occurs when tiles are rendered
asynchronously. A new synchronouslyDisplayTilesInRect is also added to do
the actual rendering, but the call is not currently being made.

Reviewed by Simon Fraser.

* page/FrameView.cpp:
(WebCore::FrameView::syncCompositingStateForThisFrame):
* platform/graphics/GraphicsLayer.h:
(WebCore::GraphicsLayer::syncCompositingState):
* platform/graphics/ca/GraphicsLayerCA.cpp:
(WebCore::GraphicsLayerCA::syncCompositingState):
(WebCore::GraphicsLayerCA::recursiveCommitChanges):
(WebCore::GraphicsLayerCA::platformCALayerPaintContents):
(WebCore::GraphicsLayerCA::updateSublayerList):
(WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
* platform/graphics/ca/GraphicsLayerCA.h:
* platform/graphics/ca/PlatformCALayer.h:
* platform/graphics/ca/mac/PlatformCALayerMac.mm:
(PlatformCALayer::synchronouslyDisplayTilesInRect):
* platform/graphics/transforms/TransformState.cpp:
(WebCore::TransformState::operator=):
* platform/graphics/transforms/TransformState.h:
(WebCore::TransformState::TransformState):
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::flushPendingLayerChanges):

Source/WebKit/mac: 

Supply initial display rects for the full-screen case

Reviewed by Simon Fraser.

* WebView/WebFullScreenController.mm:
(-[WebFullScreenController enterFullscreen:]):
(-[WebFullScreenController exitFullscreen]):

Source/WebKit2: 

Supply initial display rects for the full-screen case

Reviewed by Simon Fraser.

* WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:
(WebKit::WebFullScreenManagerMac::setRootFullScreenLayer):
(WebKit::WebFullScreenManagerMac::beginEnterFullScreenAnimation):
(WebKit::WebFullScreenManagerMac::beginExitFullScreenAnimation):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (92650 => 92651)


--- trunk/Source/WebCore/ChangeLog	2011-08-08 23:09:50 UTC (rev 92650)
+++ trunk/Source/WebCore/ChangeLog	2011-08-08 23:21:16 UTC (rev 92651)
@@ -1,3 +1,36 @@
+
+        Logic to compute visible display rect in GraphicsLayerCA::syncCompositingState
+        https://bugs.webkit.org/show_bug.cgi?id=65708
+
+        Add logic to syncCompositingState to compute the visible rect for each
+        layer. This can be used to synchronously render the visible tiles of a
+        TiledLayer and avoid the flashing that often occurs when tiles are rendered
+        asynchronously. A new synchronouslyDisplayTilesInRect is also added to do
+        the actual rendering, but the call is not currently being made.
+
+        Reviewed by Simon Fraser.
+
+        * page/FrameView.cpp:
+        (WebCore::FrameView::syncCompositingStateForThisFrame):
+        * platform/graphics/GraphicsLayer.h:
+        (WebCore::GraphicsLayer::syncCompositingState):
+        * platform/graphics/ca/GraphicsLayerCA.cpp:
+        (WebCore::GraphicsLayerCA::syncCompositingState):
+        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
+        (WebCore::GraphicsLayerCA::platformCALayerPaintContents):
+        (WebCore::GraphicsLayerCA::updateSublayerList):
+        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
+        * platform/graphics/ca/GraphicsLayerCA.h:
+        * platform/graphics/ca/PlatformCALayer.h:
+        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
+        (PlatformCALayer::synchronouslyDisplayTilesInRect):
+        * platform/graphics/transforms/TransformState.cpp:
+        (WebCore::TransformState::operator=):
+        * platform/graphics/transforms/TransformState.h:
+        (WebCore::TransformState::TransformState):
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
+
 2011-08-08  Sheriff Bot  <[email protected]>
 
         Unreviewed, rolling out r92619.

Modified: trunk/Source/WebCore/page/FrameView.cpp (92650 => 92651)


--- trunk/Source/WebCore/page/FrameView.cpp	2011-08-08 23:09:50 UTC (rev 92650)
+++ trunk/Source/WebCore/page/FrameView.cpp	2011-08-08 23:21:16 UTC (rev 92651)
@@ -701,8 +701,11 @@
     Document* document = m_frame->document();
     if (isDocumentRunningFullScreenAnimation(document)) {
         RenderLayerBacking* backing = document->fullScreenRenderer()->layer()->backing();
-        if (GraphicsLayer* fullScreenLayer = backing->graphicsLayer())
-            fullScreenLayer->syncCompositingState();
+        if (GraphicsLayer* fullScreenLayer = backing->graphicsLayer()) {
+            // FIXME: Passing frameRect() is correct only when RenderLayerCompositor uses a ScrollLayer (as in WebKit2)
+            // otherwise, the passed clip rect needs to take scrolling into account
+            fullScreenLayer->syncCompositingState(frameRect());
+        }
     }
 #endif
     return true;

Modified: trunk/Source/WebCore/platform/graphics/GraphicsLayer.h (92650 => 92651)


--- trunk/Source/WebCore/platform/graphics/GraphicsLayer.h	2011-08-08 23:09:50 UTC (rev 92650)
+++ trunk/Source/WebCore/platform/graphics/GraphicsLayer.h	2011-08-08 23:21:16 UTC (rev 92651)
@@ -365,7 +365,7 @@
     // Some compositing systems may do internal batching to synchronize compositing updates
     // with updates drawn into the window. These methods flush internal batched state on this layer
     // and descendant layers, and this layer only.
-    virtual void syncCompositingState() { }
+    virtual void syncCompositingState(const FloatRect& /* clipRect */) { }
     virtual void syncCompositingStateForThisLayerOnly() { }
     
     // Return a string with a human readable form of the layer tree, If debug is true 

Modified: trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp (92650 => 92651)


--- trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp	2011-08-08 23:09:50 UTC (rev 92650)
+++ trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp	2011-08-08 23:21:16 UTC (rev 92651)
@@ -36,6 +36,7 @@
 #include "RotateTransformOperation.h"
 #include "ScaleTransformOperation.h"
 #include "SystemTime.h"
+#include "TransformState.h"
 #include "TranslateTransformOperation.h"
 #include <QuartzCore/CATransform3D.h>
 #include <limits.h>
@@ -810,9 +811,10 @@
     return FloatPoint();
 }
 
-void GraphicsLayerCA::syncCompositingState()
+void GraphicsLayerCA::syncCompositingState(const FloatRect& clipRect)
 {
-    recursiveCommitChanges();
+    TransformState state(TransformState::UnapplyInverseTransformDirection, FloatQuad(clipRect));
+    recursiveCommitChanges(state);
 }
 
 void GraphicsLayerCA::syncCompositingStateForThisLayerOnly()
@@ -823,8 +825,46 @@
     commitLayerChangesAfterSublayers();
 }
 
-void GraphicsLayerCA::recursiveCommitChanges(float pageScaleFactor, const FloatPoint& positionRelativeToBase, bool affectedByPageScale)
+void GraphicsLayerCA::recursiveCommitChanges(const TransformState& state, float pageScaleFactor, const FloatPoint& positionRelativeToBase, bool affectedByPageScale)
 {
+    // Save the state before sending down to kids and restore it after
+    TransformState localState = state;
+    
+    TransformState::TransformAccumulation accumulation = preserves3D() ? TransformState::AccumulateTransform : TransformState::FlattenTransform;
+    localState.move(-m_position.x(), -m_position.y(), accumulation);
+    
+    if (!transform().isIdentity()) {
+        TransformationMatrix transformWithAnchorPoint;
+        FloatPoint3D absoluteAnchorPoint(anchorPoint());
+        absoluteAnchorPoint.scale(size().width(), size().height(), 1);
+        transformWithAnchorPoint.translate3d(absoluteAnchorPoint.x(), absoluteAnchorPoint.y(), absoluteAnchorPoint.z());
+        transformWithAnchorPoint.multiply(transform());
+        transformWithAnchorPoint.translate3d(-absoluteAnchorPoint.x(), -absoluteAnchorPoint.y(), -absoluteAnchorPoint.z());
+        localState.applyTransform(transformWithAnchorPoint, accumulation);
+    }
+    
+    FloatRect clipRectForChildren = localState.lastPlanarQuad().boundingBox();
+    FloatRect clipRectForSelf;
+    
+    if (masksToBounds()) {
+        ASSERT(accumulation == TransformState::FlattenTransform);
+        
+        // Replace the quad in the TransformState with one that is clipped to this layer's bounds
+        clipRectForSelf = FloatRect(0, 0, m_size.width(), m_size.height());
+        clipRectForSelf.intersect(clipRectForChildren);
+        localState.setQuad(clipRectForSelf);
+    }
+
+#ifdef VISIBLE_TILE_WASH
+    if (m_visibleTileWashLayer) {
+        if (clipRectForSelf.isEmpty()) {
+            clipRectForSelf = FloatRect(0, 0, m_size.width(), m_size.height());
+            clipRectForSelf.intersect(clipRectForChildren);
+        }
+        m_visibleTileWashLayer->setFrame(clipRectForSelf);
+    }
+#endif
+
     bool hadChanges = m_uncommittedChanges;
     
     if (appliesPageScale()) {
@@ -844,13 +884,17 @@
 
     const Vector<GraphicsLayer*>& childLayers = children();
     size_t numChildren = childLayers.size();
+    
+    if (!childrenTransform().isIdentity())    
+        localState.applyTransform(childrenTransform(), accumulation);
+    
     for (size_t i = 0; i < numChildren; ++i) {
         GraphicsLayerCA* curChild = static_cast<GraphicsLayerCA*>(childLayers[i]);
-        curChild->recursiveCommitChanges(pageScaleFactor, baseRelativePosition, affectedByPageScale);
+        curChild->recursiveCommitChanges(localState, pageScaleFactor, baseRelativePosition, affectedByPageScale);
     }
 
     if (m_replicaLayer)
-        static_cast<GraphicsLayerCA*>(m_replicaLayer)->recursiveCommitChanges(pageScaleFactor, baseRelativePosition, affectedByPageScale);
+        static_cast<GraphicsLayerCA*>(m_replicaLayer)->recursiveCommitChanges(localState, pageScaleFactor, baseRelativePosition, affectedByPageScale);
 
     if (m_maskLayer)
         static_cast<GraphicsLayerCA*>(m_maskLayer)->commitLayerChangesAfterSublayers();
@@ -861,6 +905,11 @@
         client()->didCommitChangesForLayer(this);
 }
 
+void GraphicsLayerCA::platformCALayerPaintContents(GraphicsContext& context, const IntRect& clip)
+{
+    paintGraphicsLayerContents(context, clip);
+}
+
 void GraphicsLayerCA::commitLayerChangesBeforeSublayers(float pageScaleFactor, const FloatPoint& positionRelativeToBase)
 {
     if (!m_uncommittedChanges)
@@ -989,6 +1038,11 @@
         for (size_t i = 0; i < newSublayers.size(); --i)
             newSublayers[i]->removeFromSuperlayer();
     }
+    
+#ifdef VISIBLE_TILE_WASH
+    if (m_visibleTileWashLayer)
+        newSublayers.append(m_visibleTileWashLayer);
+#endif
 
     if (m_structuralLayer) {
         m_structuralLayer->setSublayers(newSublayers);
@@ -2062,7 +2116,22 @@
     m_layer = PlatformCALayer::create(useTiledLayer ? PlatformCALayer::LayerTypeWebTiledLayer : PlatformCALayer::LayerTypeWebLayer, this);
     m_usingTiledLayer = useTiledLayer;
     
+#ifdef VISIBLE_TILE_WASH
     if (useTiledLayer) {
+        static Color washFillColor(255, 0, 0, 50);
+        static Color washBorderColor(255, 0, 0, 100);
+        
+        m_visibleTileWashLayer = PlatformCALayer::create(PlatformCALayer::LayerTypeLayer, this);
+        m_visibleTileWashLayer->setName("Visible Tile Wash Layer");
+        m_visibleTileWashLayer->setAnchorPoint(FloatPoint3D(0, 0, 0));
+        m_visibleTileWashLayer->setBorderColor(washBorderColor);
+        m_visibleTileWashLayer->setBorderWidth(8);
+        m_visibleTileWashLayer->setBackgroundColor(washFillColor);
+    } else
+        m_visibleTileWashLayer = 0;
+#endif
+    
+    if (useTiledLayer) {
 #if !HAVE_MODERN_QUARTZCORE
         // Tiled layer has issues with flipped coordinates.
         setContentsOrientation(CompositingCoordinatesTopDown);
@@ -2074,7 +2143,12 @@
     }
 
     m_layer->adoptSublayers(oldLayer.get());
-    
+
+#ifdef VISIBLE_TILE_WASH
+    if (m_visibleTileWashLayer)
+        m_layer->appendSublayer(m_visibleTileWashLayer.get());
+#endif
+
     // FIXME: Skip this step if we don't have a superlayer. This is problably a benign
     // case that happens while restructuring the layer tree.
     ASSERT(oldLayer->superlayer());

Modified: trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h (92650 => 92651)


--- trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h	2011-08-08 23:09:50 UTC (rev 92650)
+++ trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h	2011-08-08 23:21:16 UTC (rev 92651)
@@ -37,9 +37,14 @@
 #include <wtf/RetainPtr.h>
 #include <wtf/text/StringHash.h>
 
+// Enable this to add a light red wash over the visible portion of Tiled Layers, as computed
+// by syncCompositingState().
+// #define VISIBLE_TILE_WASH
+
 namespace WebCore {
 
 class PlatformCALayer;
+class TransformState;
 
 class GraphicsLayerCA : public GraphicsLayer, public PlatformCALayerClient {
 public:
@@ -119,9 +124,9 @@
     virtual void setMaintainsPixelAlignment(bool);
     virtual void pageScaleFactorChanged();
 
-    void recursiveCommitChanges(float pageScaleFactor = 1, const FloatPoint& positionRelativeToBase = FloatPoint(), bool affectedByPageScale = false);
+    void recursiveCommitChanges(const TransformState&, float pageScaleFactor = 1, const FloatPoint& positionRelativeToBase = FloatPoint(), bool affectedByPageScale = false);
 
-    virtual void syncCompositingState();
+    virtual void syncCompositingState(const FloatRect&);
     virtual void syncCompositingStateForThisLayerOnly();
 
     bool allowTiledLayer() const { return m_allowTiledLayer; }
@@ -137,7 +142,7 @@
 
     virtual void platformCALayerAnimationStarted(CFTimeInterval beginTime);
     virtual CompositingCoordinatesOrientation platformCALayerContentsOrientation() const { return contentsOrientation(); }
-    virtual void platformCALayerPaintContents(GraphicsContext& context, const IntRect& clip) { paintGraphicsLayerContents(context, clip); }
+    virtual void platformCALayerPaintContents(GraphicsContext&, const IntRect& clip);
     virtual bool platformCALayerShowDebugBorders() const { return showDebugBorders(); }
     virtual bool platformCALayerShowRepaintCounter() const { return showRepaintCounter(); }
     virtual int platformCALayerIncrementRepaintCount() { return incrementRepaintCount(); }
@@ -348,6 +353,10 @@
     OwnPtr<LayerMap> m_layerClones;
     OwnPtr<LayerMap> m_structuralLayerClones;
     OwnPtr<LayerMap> m_contentsLayerClones;
+
+#ifdef VISIBLE_TILE_WASH
+    RefPtr<PlatformCALayer> m_visibleTileWashLayer;
+#endif
     
     enum ContentsLayerPurpose {
         NoContentsLayer = 0,

Modified: trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.h (92650 => 92651)


--- trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.h	2011-08-08 23:09:50 UTC (rev 92650)
+++ trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.h	2011-08-08 23:21:16 UTC (rev 92651)
@@ -195,6 +195,10 @@
     void printTree() const;
 #endif
 
+#if PLATFORM(MAC) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
+    void synchronouslyDisplayTilesInRect(const FloatRect&);
+#endif
+
 protected:
     PlatformCALayer(LayerType, PlatformLayer*, PlatformCALayerClient*);
     

Modified: trunk/Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm (92650 => 92651)


--- trunk/Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm	2011-08-08 23:09:50 UTC (rev 92650)
+++ trunk/Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm	2011-08-08 23:21:16 UTC (rev 92651)
@@ -89,6 +89,14 @@
 
 @end
 
+#if !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
+@interface CATiledLayer(GraphicsLayerCAPrivate)
+- (void)displayInRect:(CGRect)r levelOfDetail:(int)lod options:(NSDictionary *)dict;
+- (BOOL)canDrawConcurrently;
+- (void)setCanDrawConcurrently:(BOOL)flag;
+@end
+#endif
+
 @interface CALayer(Private)
 - (void)setContentsChanged;
 #if !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
@@ -750,4 +758,21 @@
 #endif
 }
 
+#if !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
+void PlatformCALayer::synchronouslyDisplayTilesInRect(const FloatRect& rect)
+{
+    if (m_layerType != LayerTypeWebTiledLayer)
+        return;
+
+    WebTiledLayer *tiledLayer = static_cast<WebTiledLayer*>(m_layer.get());
+
+    BEGIN_BLOCK_OBJC_EXCEPTIONS
+    BOOL oldCanDrawConcurrently = [tiledLayer canDrawConcurrently];
+    [tiledLayer setCanDrawConcurrently:NO];
+    [tiledLayer displayInRect:rect levelOfDetail:0 options:nil];
+    [tiledLayer setCanDrawConcurrently:oldCanDrawConcurrently];
+    END_BLOCK_OBJC_EXCEPTIONS
+}
+#endif
+
 #endif // USE(ACCELERATED_COMPOSITING)

Modified: trunk/Source/WebCore/platform/graphics/transforms/TransformState.cpp (92650 => 92651)


--- trunk/Source/WebCore/platform/graphics/transforms/TransformState.cpp	2011-08-08 23:09:50 UTC (rev 92650)
+++ trunk/Source/WebCore/platform/graphics/transforms/TransformState.cpp	2011-08-08 23:21:16 UTC (rev 92651)
@@ -30,6 +30,25 @@
 
 namespace WebCore {
 
+TransformState& TransformState::operator=(const TransformState& other)
+{
+    m_mapPoint = other.m_mapPoint;
+    m_mapQuad = other.m_mapQuad;
+    if (m_mapPoint)
+        m_lastPlanarPoint = other.m_lastPlanarPoint;
+    if (m_mapQuad)
+        m_lastPlanarQuad = other.m_lastPlanarQuad;
+    m_accumulatingTransform = other.m_accumulatingTransform;
+    m_direction = other.m_direction;
+    
+    m_accumulatedTransform.clear();
+
+    if (other.m_accumulatedTransform)
+        m_accumulatedTransform = adoptPtr(new TransformationMatrix(*other.m_accumulatedTransform));
+        
+    return *this;
+}
+
 void TransformState::move(int x, int y, TransformAccumulation accumulate)
 {
     if (m_accumulatingTransform && m_accumulatedTransform) {

Modified: trunk/Source/WebCore/platform/graphics/transforms/TransformState.h (92650 => 92651)


--- trunk/Source/WebCore/platform/graphics/transforms/TransformState.h	2011-08-08 23:09:50 UTC (rev 92650)
+++ trunk/Source/WebCore/platform/graphics/transforms/TransformState.h	2011-08-08 23:21:16 UTC (rev 92651)
@@ -36,7 +36,6 @@
 namespace WebCore {
 
 class TransformState {
-    WTF_MAKE_NONCOPYABLE(TransformState);
 public:
     enum TransformDirection { ApplyTransformDirection, UnapplyInverseTransformDirection };
     enum TransformAccumulation { FlattenTransform, AccumulateTransform };
@@ -69,6 +68,10 @@
     {
     }
     
+    TransformState(const TransformState& other) { *this = other; }
+
+    TransformState& operator=(const TransformState&);
+    
     void setQuad(const FloatQuad& quad) { m_lastPlanarQuad = quad; }
     
     void move(const IntSize& s, TransformAccumulation accumulate = FlattenTransform)

Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (92650 => 92651)


--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2011-08-08 23:09:50 UTC (rev 92650)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2011-08-08 23:21:16 UTC (rev 92651)
@@ -203,9 +203,15 @@
     ASSERT(!m_flushingLayers);
     m_flushingLayers = true;
 
-    if (GraphicsLayer* rootLayer = rootGraphicsLayer())
-        rootLayer->syncCompositingState();
-
+    if (GraphicsLayer* rootLayer = rootGraphicsLayer()) {
+        FrameView* frameView = m_renderView ? m_renderView->frameView() : 0;
+        if (frameView) {
+            // FIXME: Passing frameRect() is correct only when RenderLayerCompositor uses a ScrollLayer (as in WebKit2)
+            // otherwise, the passed clip rect needs to take scrolling into account
+            rootLayer->syncCompositingState(frameView->frameRect());
+        }
+    }
+    
     ASSERT(m_flushingLayers);
     m_flushingLayers = false;
 }

Modified: trunk/Source/WebKit/mac/ChangeLog (92650 => 92651)


--- trunk/Source/WebKit/mac/ChangeLog	2011-08-08 23:09:50 UTC (rev 92650)
+++ trunk/Source/WebKit/mac/ChangeLog	2011-08-08 23:21:16 UTC (rev 92651)
@@ -1,3 +1,16 @@
+2011-08-08  Chris Marrin  <[email protected]>
+
+        Logic to compute visible display rect in GraphicsLayerCA::syncCompositingState
+        https://bugs.webkit.org/show_bug.cgi?id=65708
+
+        Supply initial display rects for the full-screen case
+
+        Reviewed by Simon Fraser.
+
+        * WebView/WebFullScreenController.mm:
+        (-[WebFullScreenController enterFullscreen:]):
+        (-[WebFullScreenController exitFullscreen]):
+
 2011-08-06  Joseph Pecoraro  <[email protected]>
 
         Potential Leaks - RetainPtr<> over retaining Create'd objects

Modified: trunk/Source/WebKit/mac/WebView/WebFullScreenController.mm (92650 => 92651)


--- trunk/Source/WebKit/mac/WebView/WebFullScreenController.mm	2011-08-08 23:09:50 UTC (rev 92650)
+++ trunk/Source/WebKit/mac/WebView/WebFullScreenController.mm	2011-08-08 23:21:16 UTC (rev 92651)
@@ -421,7 +421,7 @@
     // Some properties haven't propogated from the GraphicsLayer to the CALayer yet. So
     // tell the renderer's layer to sync it's compositing state:
     GraphicsLayer* rendererGraphics = _renderer->layer()->backing()->graphicsLayer();
-    rendererGraphics->syncCompositingState();    
+    rendererGraphics->syncCompositingState(destinationFrame);    
 
     CALayer* rendererLayer = rendererGraphics->platformLayer();
     [[self _fullscreenWindow] setRendererLayer:rendererLayer];    
@@ -572,7 +572,7 @@
     
     [self _document]->setFullScreenRendererBackgroundColor(Color::transparent);
 
-    rendererGraphics->syncCompositingState();    
+    rendererGraphics->syncCompositingState(layerEndFrame);    
 
     CALayer* rendererLayer = rendererGraphics->platformLayer();
     [[self _fullscreenWindow] setRendererLayer:rendererLayer];    

Modified: trunk/Source/WebKit2/ChangeLog (92650 => 92651)


--- trunk/Source/WebKit2/ChangeLog	2011-08-08 23:09:50 UTC (rev 92650)
+++ trunk/Source/WebKit2/ChangeLog	2011-08-08 23:21:16 UTC (rev 92651)
@@ -1,3 +1,17 @@
+2011-08-08  Chris Marrin  <[email protected]>
+
+        Logic to compute visible display rect in GraphicsLayerCA::syncCompositingState
+        https://bugs.webkit.org/show_bug.cgi?id=65708
+
+        Supply initial display rects for the full-screen case
+
+        Reviewed by Simon Fraser.
+
+        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:
+        (WebKit::WebFullScreenManagerMac::setRootFullScreenLayer):
+        (WebKit::WebFullScreenManagerMac::beginEnterFullScreenAnimation):
+        (WebKit::WebFullScreenManagerMac::beginExitFullScreenAnimation):
+
 2011-08-08  Dan Bernstein  <[email protected]>
 
         <rdar://problem/9652350> REGRESSION (r87755): WKView doesn't update when I drag files into a background Safari window

Modified: trunk/Source/WebKit2/WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm (92650 => 92651)


--- trunk/Source/WebKit2/WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm	2011-08-08 23:09:50 UTC (rev 92650)
+++ trunk/Source/WebKit2/WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm	2011-08-08 23:21:16 UTC (rev 92651)
@@ -173,7 +173,7 @@
     [CATransaction setDisableActions:YES];
     m_rootLayer->removeAllChildren();
     m_rootLayer->addChild(layer);
-    m_rootLayer->syncCompositingState();
+    m_rootLayer->syncCompositingState(getFullScreenRect());
     [CATransaction commit];
 
     [[NSNotificationCenter defaultCenter] postNotificationName:@"WebKitLayerHostChanged" object:m_rootLayer->platformLayer() userInfo:nil];
@@ -203,7 +203,7 @@
 
     IntRect destinationFrame = getFullScreenRect();
     m_element->document()->setFullScreenRendererSize(destinationFrame.size());
-    m_rootLayer->syncCompositingState();
+    m_rootLayer->syncCompositingState(destinationFrame);
 
     // FIXME: Once we gain the ability to do native WebKit animations of generated
     // content, this can change to use them.  Meanwhile, we'll have to animate the
@@ -226,7 +226,7 @@
 
     IntRect destinationFrame = getFullScreenRect();
     m_element->document()->setFullScreenRendererSize(destinationFrame.size());
-    m_rootLayer->syncCompositingState();
+    m_rootLayer->syncCompositingState(destinationFrame);
 
     // FIXME: Once we gain the ability to do native WebKit animations of generated
     // content, this can change to use them.  Meanwhile, we'll have to animate the
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to