Changeset 168217 in webkit


Ignore:
Timestamp:
May 2, 2014 6:15:07 PM (10 years ago)
Author:
Simon Fraser
Message:

[iOS WK2] Tiled layer content missing on pages with animated tiled layers
https://bugs.webkit.org/show_bug.cgi?id=132507
<rdar://problem/16765740>

Reviewed by Tim Horton.

Updating the tiling area of content TileControllers while
CSS animations are running depends on GraphicsLayerUpdater
triggering repeated layer flushes. With UI-side compositing, those
flushes were happening, but nothing triggered RemoteLayerTreeDrawingArea
to flush changes to the UI process.

Fix by having RenderLayerCompositor schedule a flush, rather
than just doing a flush, in response to GraphicsLayerUpdater.

Also change the name of the GraphicsLayerUpdaterClient function
to indicate that it suggests that a flush is required soon, rather than
that the flushing has to be synchronous.

  • platform/graphics/GraphicsLayerUpdater.cpp:

(WebCore::GraphicsLayerUpdater::displayRefreshFired):

  • platform/graphics/GraphicsLayerUpdater.h:
  • rendering/RenderLayerCompositor.cpp:

(WebCore::RenderLayerCompositor::flushLayersSoon):
(WebCore::RenderLayerCompositor::flushLayers): Deleted.

  • rendering/RenderLayerCompositor.h:
Location:
trunk/Source/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r168216 r168217  
     12014-05-02  Simon Fraser  <simon.fraser@apple.com>
     2
     3        [iOS WK2] Tiled layer content missing on pages with animated tiled layers
     4        https://bugs.webkit.org/show_bug.cgi?id=132507
     5        <rdar://problem/16765740>
     6
     7        Reviewed by Tim Horton.
     8
     9        Updating the tiling area of content TileControllers while
     10        CSS animations are running depends on GraphicsLayerUpdater
     11        triggering repeated layer flushes. With UI-side compositing, those
     12        flushes were happening, but nothing triggered RemoteLayerTreeDrawingArea
     13        to flush changes to the UI process.
     14       
     15        Fix by having RenderLayerCompositor schedule a flush, rather
     16        than just doing a flush, in response to GraphicsLayerUpdater.
     17       
     18        Also change the name of the GraphicsLayerUpdaterClient function
     19        to indicate that it suggests that a flush is required soon, rather than
     20        that the flushing has to be synchronous.
     21
     22        * platform/graphics/GraphicsLayerUpdater.cpp:
     23        (WebCore::GraphicsLayerUpdater::displayRefreshFired):
     24        * platform/graphics/GraphicsLayerUpdater.h:
     25        * rendering/RenderLayerCompositor.cpp:
     26        (WebCore::RenderLayerCompositor::flushLayersSoon):
     27        (WebCore::RenderLayerCompositor::flushLayers): Deleted.
     28        * rendering/RenderLayerCompositor.h:
     29
    1302014-05-02  Jeremy Jones  <jeremyj@apple.com>
    231
  • trunk/Source/WebCore/platform/graphics/GraphicsLayerUpdater.cpp

    r163079 r168217  
    7676   
    7777    if (m_client)
    78         m_client->flushLayers(this);
     78        m_client->flushLayersSoon(this);
    7979}
    8080
  • trunk/Source/WebCore/platform/graphics/GraphicsLayerUpdater.h

    r163079 r168217  
    3737public:
    3838    virtual ~GraphicsLayerUpdaterClient() { }
    39     virtual void flushLayers(GraphicsLayerUpdater*) = 0;
     39    virtual void flushLayersSoon(GraphicsLayerUpdater*) = 0;
    4040};
    4141
  • trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp

    r168190 r168217  
    580580}
    581581
    582 void RenderLayerCompositor::flushLayers(GraphicsLayerUpdater*)
    583 {
    584     flushPendingLayerChanges(true); // FIXME: deal with iframes
     582void RenderLayerCompositor::flushLayersSoon(GraphicsLayerUpdater*)
     583{
     584    scheduleLayerFlush(true);
    585585}
    586586
  • trunk/Source/WebCore/rendering/RenderLayerCompositor.h

    r168119 r168217  
    312312    virtual void notifyFlushRequired(const GraphicsLayer*) override;
    313313    virtual void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsLayerPaintingPhase, const FloatRect&) override;
    314 
     314    virtual void customPositionForVisibleRectComputation(const GraphicsLayer*, FloatPoint&) const override;
    315315    virtual bool isTrackingRepaints() const override;
    316316   
    317317    // GraphicsLayerUpdaterClient implementation
    318     virtual void flushLayers(GraphicsLayerUpdater*) override;
    319     virtual void customPositionForVisibleRectComputation(const GraphicsLayer*, FloatPoint&) const override;
    320    
     318    virtual void flushLayersSoon(GraphicsLayerUpdater*) override;
     319
    321320    // Whether the given RL needs a compositing layer.
    322321    bool needsToBeComposited(const RenderLayer&, RenderLayer::ViewportConstrainedNotCompositedReason* = 0) const;
Note: See TracChangeset for help on using the changeset viewer.