⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 136181 in webkit


Ignore:
Timestamp:
Nov 29, 2012, 4:29:13 PM (14 years ago)
Author:
Christophe Dumez
Message:

[CoordinatedGraphics] Use OwnPtr for LayerMap's layers in LayerTreeRenderer
​https://bugs.webkit.org/show_bug.cgi?id=103650

Reviewed by Noam Rosenthal.

We currently store raw pointers to WebCore::GraphicsLayer in the LayerMap
meaning that we need to delete them manually. This patch leverages smart
pointers and stores layers as OwnPtr in the LayerMap so that the layers
are owned by the HashMap and we don't have to handle memory manually.

  • UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:

(WebKit::LayerTreeRenderer::adjustPositionForFixedLayers):
(WebKit::LayerTreeRenderer::setLayerChildren):
(WebKit::LayerTreeRenderer::deleteLayer):
(WebKit::LayerTreeRenderer::ensureLayer):

  • UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
Location:
trunk/Source/WebKit2
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r136178 r136181  
     12012-11-29  Christophe Dumez  <christophe.dumez@intel.com>
     2
     3        [CoordinatedGraphics] Use OwnPtr for LayerMap's layers in LayerTreeRenderer
     4        https://bugs.webkit.org/show_bug.cgi?id=103650
     5
     6        Reviewed by Noam Rosenthal.
     7
     8        We currently store raw pointers to WebCore::GraphicsLayer in the LayerMap
     9        meaning that we need to delete them manually. This patch leverages smart
     10        pointers and stores layers as OwnPtr in the LayerMap so that the layers
     11        are owned by the HashMap and we don't have to handle memory manually.
     12
     13        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
     14        (WebKit::LayerTreeRenderer::adjustPositionForFixedLayers):
     15        (WebKit::LayerTreeRenderer::setLayerChildren):
     16        (WebKit::LayerTreeRenderer::deleteLayer):
     17        (WebKit::LayerTreeRenderer::ensureLayer):
     18        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
     19
    1202012-11-29  Anders Carlsson  <andersca@apple.com>
    221
  • trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp

    r136139 r136181  
    217217    FloatSize delta = scrollPosition - renderedScrollPosition;
    218218
    219     LayerMap::iterator end = m_fixedLayers.end();
    220     for (LayerMap::iterator it = m_fixedLayers.begin(); it != end; ++it)
     219    LayerRawPtrMap::iterator end = m_fixedLayers.end();
     220    for (LayerRawPtrMap::iterator it = m_fixedLayers.begin(); it != end; ++it)
    221221        toTextureMapperLayer(it->value)->setScrollPositionDeltaIfNeeded(delta);
    222222}
    … …  
    274274        GraphicsLayer* child = layerByID(childID);
    275275        if (!child) {
    276             child = createLayer(childID).leakPtr();
    277             m_layers.add(childID, child);
     276            OwnPtr<GraphicsLayer*> newChild = createLayer(childID);
     277            child = newChild.get();
     278            m_layers.add(childID, newChild.release());
    278279        }
    279280        children.append(child);
    … …  
    363364void LayerTreeRenderer::deleteLayer(WebLayerID layerID)
    364365{
    365     GraphicsLayer* layer = layerByID(layerID);
     366    OwnPtr<GraphicsLayer> layer = m_layers.take(layerID);
    366367    if (!layer)
    367368        return;
    368369
    369370    layer->removeFromParent();
    370     m_layers.remove(layerID);
    371371    m_fixedLayers.remove(layerID);
    372372#if USE(GRAPHICS_SURFACE)
    373373    m_surfaceBackingStores.remove(layerID);
    374374#endif
    375     delete layer;
    376375}
    377376
    … …  
    381380    LayerMap::iterator it = m_layers.find(id);
    382381    if (it != m_layers.end())
    383         return it->value;
    384 
    385     // We have to leak the new layer's pointer and manage it ourselves,
    386     // because OwnPtr is not copyable.
    387     WebCore::GraphicsLayer* layer = createLayer(id).leakPtr();
    388     m_layers.add(id, layer);
     382        return it->value.get();
     383
     384    OwnPtr<WebCore::GraphicsLayer> newLayer = createLayer(id);
     385    WebCore::GraphicsLayer* layer = newLayer.get();
     386    m_layers.add(id, newLayer.release());
    389387
    390388    return layer;
  • trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeRenderer.h

    r136139 r136181  
    152152    void resetBackingStoreSizeToLayerSize(WebCore::GraphicsLayer*);
    153153
    154     typedef HashMap<WebLayerID, WebCore::GraphicsLayer*> LayerMap;
    155154    WebCore::FloatSize m_contentsSize;
    156155    WebCore::FloatRect m_visibleContentsRect;
    … …  
    182181    OwnPtr<WebCore::GraphicsLayer> m_rootLayer;
    183182
     183    typedef HashMap<WebLayerID, OwnPtr<WebCore::GraphicsLayer> > LayerMap;
    184184    LayerMap m_layers;
    185     LayerMap m_fixedLayers;
     185    typedef HashMap<WebLayerID, WebCore::GraphicsLayer*> LayerRawPtrMap;
     186    LayerRawPtrMap m_fixedLayers;
    186187    WebLayerID m_rootLayerID;
    187188    WebCore::IntPoint m_renderedContentsScrollPosition;
Note: See TracChangeset for help on using the changeset viewer.