Changeset 141789 in webkit


Ignore:
Timestamp:
Feb 4, 2013, 11:26:18 AM (13 years ago)
Author:
timothy_horton@apple.com
Message:

Allow TiledCoreAnimationDrawingArea overlay layers to become tiled
https://bugs.webkit.org/show_bug.cgi?id=108729
<rdar://problem/13047546>

Reviewed by Anders Carlsson.

  • WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:

(TiledCoreAnimationDrawingArea): Add didCommitChangesForLayer and storage for the
current PlatformLayer corresponding to m_pageOverlayLayer.

  • WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:

(WebKit::TiledCoreAnimationDrawingArea::flushLayers): Update the TileCache's visible rect.
(WebKit::TiledCoreAnimationDrawingArea::setExposedRect): Forward exposed rect changes to the page overlay layer, if it's tiled.
(WebKit::TiledCoreAnimationDrawingArea::mainFrameScrollabilityChanged): Forward scrollability changes to the page overlay layer, if it's tiled.
(WebKit::TiledCoreAnimationDrawingArea::createPageOverlayLayer): Allow the page overlay layer to become tiled. Update its exposed rect and whether or not it respects the exposed rect if it's tiled upon creation.
(WebKit::TiledCoreAnimationDrawingArea::didCommitChangesForLayer): If a GraphicsLayer's platform layer changes (because it switched to or from a tiled layer), reparent it. If it's switching to a tiled layer, update the exposed rect and whether or not it should respect the exposed rect.

  • WebCore.exp.in:
  • platform/graphics/ca/GraphicsLayerCA.cpp:

(WebCore::GraphicsLayerCA::flushCompositingStateForThisLayerOnly): The "for this layer only" variant
of flushCompositingState wasn't informing its client that it committed changes for the layer.
(WebCore::GraphicsLayerCA::swapFromOrToTiledLayer): We now explicitly want to be able to have a
GraphicsLayerCA switch into or out of tiling while being unparented (we'll get a client callback and
swap out its parent ourselves).

Location:
trunk/Source
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r141787 r141789  
     12013-02-04  Tim Horton  <timothy_horton@apple.com>
     2
     3        Allow TiledCoreAnimationDrawingArea overlay layers to become tiled
     4        https://bugs.webkit.org/show_bug.cgi?id=108729
     5        <rdar://problem/13047546>
     6
     7        Reviewed by Anders Carlsson.
     8
     9        * WebCore.exp.in:
     10        * platform/graphics/ca/GraphicsLayerCA.cpp:
     11        (WebCore::GraphicsLayerCA::flushCompositingStateForThisLayerOnly): The "for this layer only" variant
     12        of flushCompositingState wasn't informing its client that it committed changes for the layer.
     13        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer): We now explicitly want to be able to have a
     14        GraphicsLayerCA switch into or out of tiling while being unparented (we'll get a client callback and
     15        swap out its parent ourselves).
     16
    1172013-02-04  Julien Chaffraix  <jchaffraix@webkit.org>
    218
  • trunk/Source/WebCore/WebCore.exp.in

    r141738 r141789  
    496496__ZN7WebCore16createFullMarkupEPKNS_5RangeE
    497497__ZN7WebCore16deleteAllCookiesERKNS_21NetworkStorageSessionE
     498__ZN7WebCore16enclosingIntRectERK6CGRect
    498499__ZN7WebCore16enclosingIntRectERKNS_9FloatRectE
    499500__ZN7WebCore16isEndOfParagraphERKNS_15VisiblePositionENS_27EditingBoundaryCrossingRuleE
     
    19601961__ZN7WebCore16VisibleSelection27selectionFromContentsOfNodeEPNS_4NodeE
    19611962__ZN7WebCore16VisibleSelectionC1Ev
    1962 __ZN7WebCore16enclosingIntRectERK6CGRect
    19631963__ZN7WebCore16jsStringWithCacheSlowCaseEPN3JSC9ExecStateERN3WTF7HashMapIPNS3_10StringImplENS0_4WeakINS0_8JSStringEEENS3_10StringHashENS3_10HashTraitsIS6_EENSB_IS9_EEEES6_
    19641964__ZN7WebCore16nextLinePositionERKNS_15VisiblePositionEiNS_12EditableTypeE
  • trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp

    r141036 r141789  
    897897{
    898898    float pageScaleFactor;
     899    bool hadChanges = m_uncommittedChanges;
     900
    899901    FloatPoint offset = computePositionRelativeToBase(pageScaleFactor);
    900902    commitLayerChangesBeforeSublayers(pageScaleFactor, offset, m_visibleRect);
    901903    commitLayerChangesAfterSublayers();
     904
     905    if (hadChanges && client())
     906        client()->didCommitChangesForLayer(this);
    902907}
    903908
     
    26482653#endif
    26492654
    2650     // FIXME: Skip this step if we don't have a superlayer. This is problably a benign
    2651     // case that happens while restructuring the layer tree.
    2652     ASSERT(oldLayer->superlayer());
     2655    // Skip this step if we don't have a superlayer. This is probably a benign
     2656    // case that happens while restructuring the layer tree, and also occurs with
     2657    // WebKit2 page overlays, which can become tiled but are out-of-tree.
    26532658    if (oldLayer->superlayer())
    26542659        oldLayer->superlayer()->replaceSublayer(oldLayer.get(), m_layer.get());
  • trunk/Source/WebKit2/ChangeLog

    r141781 r141789  
     12013-02-04  Tim Horton  <timothy_horton@apple.com>
     2
     3        Allow TiledCoreAnimationDrawingArea overlay layers to become tiled
     4        https://bugs.webkit.org/show_bug.cgi?id=108729
     5        <rdar://problem/13047546>
     6
     7        Reviewed by Anders Carlsson.
     8
     9        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
     10        (TiledCoreAnimationDrawingArea): Add didCommitChangesForLayer and storage for the
     11        current PlatformLayer corresponding to m_pageOverlayLayer.
     12        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
     13        (WebKit::TiledCoreAnimationDrawingArea::flushLayers): Update the TileCache's visible rect.
     14        (WebKit::TiledCoreAnimationDrawingArea::setExposedRect): Forward exposed rect changes to the page overlay layer, if it's tiled.
     15        (WebKit::TiledCoreAnimationDrawingArea::mainFrameScrollabilityChanged): Forward scrollability changes to the page overlay layer, if it's tiled.
     16        (WebKit::TiledCoreAnimationDrawingArea::createPageOverlayLayer): Allow the page overlay layer to become tiled. Update its exposed rect and whether or not it respects the exposed rect if it's tiled upon creation.
     17        (WebKit::TiledCoreAnimationDrawingArea::didCommitChangesForLayer): If a GraphicsLayer's platform layer changes (because it switched to or from a tiled layer), reparent it. If it's switching to a tiled layer, update the exposed rect and whether or not it should respect the exposed rect.
     18
    1192013-02-04  Anders Carlsson  <andersca@apple.com>
    220
  • trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h

    r140087 r141789  
    8282    virtual void paintContents(const WebCore::GraphicsLayer*, WebCore::GraphicsContext&, WebCore::GraphicsLayerPaintingPhase, const WebCore::IntRect& clipRect) OVERRIDE;
    8383    virtual float deviceScaleFactor() const OVERRIDE;
     84    virtual void didCommitChangesForLayer(const WebCore::GraphicsLayer*) const OVERRIDE;
    8485
    8586    // WebCore::LayerFlushSchedulerClient
     
    114115
    115116    OwnPtr<WebCore::GraphicsLayer> m_pageOverlayLayer;
     117    mutable RetainPtr<CALayer> m_pageOverlayPlatformLayer;
    116118
    117119    bool m_isPaintingSuspended;
  • trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm

    r140769 r141789  
    298298    if (m_pageOverlayLayer) {
    299299        m_pageOverlayLayer->setNeedsDisplay();
     300        if (TiledBacking* overlayTiledBacking = m_pageOverlayLayer->tiledBacking())
     301            overlayTiledBacking->setVisibleRect(enclosingIntRect(m_rootLayer.get().frame));
    300302        m_pageOverlayLayer->flushCompositingStateForThisLayerOnly();
    301303    }
     
    340342
    341343    mainFrameTiledBacking()->setExposedRect(exposedRect);
     344
     345    if (m_pageOverlayLayer) {
     346        if (TiledBacking* tiledBacking = m_pageOverlayLayer->tiledBacking())
     347            tiledBacking->setExposedRect(exposedRect);
     348    }
    342349}
    343350
     
    345352{
    346353    mainFrameTiledBacking()->setClipsToExposedRect(!isScrollable);
     354
     355    if (m_pageOverlayLayer) {
     356        if (TiledBacking* tiledBacking = m_pageOverlayLayer->tiledBacking())
     357            tiledBacking->setClipsToExposedRect(!isScrollable);
     358    }
    347359}
    348360
     
    472484#endif
    473485
    474     // We don't ever want the overlay layer to become tiled because that will look bad, and
    475     // we also never expect the underlying CALayer to change.
    476     static_cast<GraphicsLayerCA*>(m_pageOverlayLayer.get())->setAllowTiledLayer(false);
    477486    m_pageOverlayLayer->setAcceleratesDrawing(true);
    478487    m_pageOverlayLayer->setDrawsContent(true);
    479488    m_pageOverlayLayer->setSize(m_webPage->size());
    480489
     490    m_pageOverlayPlatformLayer = m_pageOverlayLayer->platformLayer();
     491
     492    if (TiledBacking* tiledBacking = m_pageOverlayLayer->tiledBacking()) {
     493        tiledBacking->setExposedRect(m_exposedRect);
     494        tiledBacking->setClipsToExposedRect(!m_webPage->mainFrameIsScrollable());
     495    }
     496
    481497    [CATransaction begin];
    482498    [CATransaction setDisableActions:YES];
     
    499515
    500516    m_pageOverlayLayer = nullptr;
     517}
     518
     519void TiledCoreAnimationDrawingArea::didCommitChangesForLayer(const GraphicsLayer* layer) const
     520{
     521    if (layer != m_pageOverlayLayer.get())
     522        return;
     523
     524    if (m_pageOverlayPlatformLayer.get() == layer->platformLayer())
     525        return;
     526
     527    [CATransaction begin];
     528    [CATransaction setDisableActions:YES];
     529   
     530    if (m_pageOverlayPlatformLayer)
     531        [m_pageOverlayPlatformLayer.get() removeFromSuperlayer];
     532
     533    [m_rootLayer.get() addSublayer:m_pageOverlayLayer->platformLayer()];
     534   
     535    [CATransaction commit];
     536
     537    if (TiledBacking* tiledBacking = m_pageOverlayLayer->tiledBacking()) {
     538        tiledBacking->setExposedRect(m_exposedRect);
     539        tiledBacking->setClipsToExposedRect(!m_webPage->mainFrameIsScrollable());
     540    }
     541
     542    m_pageOverlayPlatformLayer = m_pageOverlayLayer->platformLayer();
    501543}
    502544
Note: See TracChangeset for help on using the changeset viewer.