Changeset 102726 in webkit


Ignore:
Timestamp:
Dec 13, 2011 5:52:40 PM (12 years ago)
Author:
enne@google.com
Message:

[chromium] Use HashMap<..., OwnPtr<Tile>> for compositor tilemap
https://bugs.webkit.org/show_bug.cgi?id=74154

Reviewed by James Robinson.

After r102410 landed, it's now possible to properly use an OwnPtr to
store tiles rather than hackily use a RefPtr.

Covered by the compositing/ layout tests.

  • platform/graphics/chromium/TiledLayerChromium.cpp:

(WebCore::UpdatableTile::create):
(WebCore::UpdatableTile::UpdatableTile):
(WebCore::TiledLayerChromium::createTile):

  • platform/graphics/chromium/cc/CCLayerTilingData.cpp:

(WebCore::CCLayerTilingData::addTile):
(WebCore::CCLayerTilingData::takeTile):
(WebCore::CCLayerTilingData::tileAt):

  • platform/graphics/chromium/cc/CCLayerTilingData.h:
  • platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:

(WebCore::DrawableTile::create):
(WebCore::DrawableTile::DrawableTile):
(WebCore::CCTiledLayerImpl::createTile):

Location:
trunk/Source/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r102722 r102726  
     12011-12-13  Adrienne Walker  <enne@google.com>
     2
     3        [chromium] Use HashMap<..., OwnPtr<Tile>> for compositor tilemap
     4        https://bugs.webkit.org/show_bug.cgi?id=74154
     5
     6        Reviewed by James Robinson.
     7
     8        After r102410 landed, it's now possible to properly use an OwnPtr to
     9        store tiles rather than hackily use a RefPtr.
     10
     11        Covered by the compositing/ layout tests.
     12
     13        * platform/graphics/chromium/TiledLayerChromium.cpp:
     14        (WebCore::UpdatableTile::create):
     15        (WebCore::UpdatableTile::UpdatableTile):
     16        (WebCore::TiledLayerChromium::createTile):
     17        * platform/graphics/chromium/cc/CCLayerTilingData.cpp:
     18        (WebCore::CCLayerTilingData::addTile):
     19        (WebCore::CCLayerTilingData::takeTile):
     20        (WebCore::CCLayerTilingData::tileAt):
     21        * platform/graphics/chromium/cc/CCLayerTilingData.h:
     22        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
     23        (WebCore::DrawableTile::create):
     24        (WebCore::DrawableTile::DrawableTile):
     25        (WebCore::CCTiledLayerImpl::createTile):
     26
    1272011-12-13  Dmitry Lomov  <dslomov@google.com>
    228
  • trunk/Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp

    r102698 r102726  
    5353    WTF_MAKE_NONCOPYABLE(UpdatableTile);
    5454public:
    55     explicit UpdatableTile(PassOwnPtr<LayerTextureUpdater::Texture> texture) : m_texture(texture) { }
     55    static PassOwnPtr<UpdatableTile> create(PassOwnPtr<LayerTextureUpdater::Texture> texture)
     56    {
     57        return adoptPtr(new UpdatableTile(texture));
     58    }
    5659
    5760    LayerTextureUpdater::Texture* texture() { return m_texture.get(); }
     
    6669    IntRect m_updateRect;
    6770private:
     71    explicit UpdatableTile(PassOwnPtr<LayerTextureUpdater::Texture> texture) : m_texture(texture) { }
     72
    6873    OwnPtr<LayerTextureUpdater::Texture> m_texture;
    6974};
     
    279284UpdatableTile* TiledLayerChromium::createTile(int i, int j)
    280285{
    281     RefPtr<UpdatableTile> tile = adoptRef(new UpdatableTile(textureUpdater()->createTexture(textureManager())));
    282     m_tiler->addTile(tile, i, j);
    283     tile->m_dirtyLayerRect = m_tiler->tileLayerRect(tile.get());
    284 
    285     return tile.get();
     286    OwnPtr<UpdatableTile> tile(UpdatableTile::create(textureUpdater()->createTexture(textureManager())));
     287    UpdatableTile* addedTile = tile.get();
     288    m_tiler->addTile(tile.release(), i, j);
     289
     290    addedTile->m_dirtyLayerRect = m_tiler->tileLayerRect(addedTile);
     291    return addedTile;
    286292}
    287293
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTilingData.cpp

    r95901 r102726  
    6666}
    6767
    68 void CCLayerTilingData::addTile(PassRefPtr<Tile> tile, int i, int j)
     68void CCLayerTilingData::addTile(PassOwnPtr<Tile> tile, int i, int j)
    6969{
    7070    ASSERT(!tileAt(i, j));
     
    7373}
    7474
    75 PassRefPtr<CCLayerTilingData::Tile> CCLayerTilingData::takeTile(int i, int j)
     75PassOwnPtr<CCLayerTilingData::Tile> CCLayerTilingData::takeTile(int i, int j)
    7676{
    7777    return m_tiles.take(make_pair(i, j));
     
    8080CCLayerTilingData::Tile* CCLayerTilingData::tileAt(int i, int j) const
    8181{
    82     Tile* tile = m_tiles.get(make_pair(i, j)).get();
    83     ASSERT(!tile || tile->refCount() == 1);
    84     return tile;
     82    return m_tiles.get(make_pair(i, j));
    8583}
    8684
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTilingData.h

    r95901 r102726  
    3535#include <wtf/HashTraits.h>
    3636#include <wtf/PassOwnPtr.h>
    37 #include <wtf/RefCounted.h>
    3837
    3938namespace WebCore {
     
    6362    const CCLayerTilingData& operator=(const CCLayerTilingData&);
    6463
    65     class Tile: public RefCounted<Tile> {
     64    class Tile {
    6665        WTF_MAKE_NONCOPYABLE(Tile);
    6766    public:
     
    8685        static bool isDeletedValue(TileMapKey value) { return value.first == -2 && value.second == -2; }
    8786    };
    88     // FIXME: The mapped value in TileMap should really be an OwnPtr, as the
    89     // refcount of a Tile should never be more than 1. However, HashMap
    90     // doesn't easily support OwnPtr as a value.
    91     typedef HashMap<TileMapKey, RefPtr<Tile>, DefaultHash<TileMapKey>::Hash, TileMapKeyTraits> TileMap;
     87    typedef HashMap<TileMapKey, OwnPtr<Tile>, DefaultHash<TileMapKey>::Hash, TileMapKeyTraits> TileMap;
    9288
    93     void addTile(PassRefPtr<Tile>, int, int);
    94     PassRefPtr<Tile> takeTile(int, int);
     89    void addTile(PassOwnPtr<Tile>, int, int);
     90    PassOwnPtr<Tile> takeTile(int, int);
    9591    Tile* tileAt(int, int) const;
    9692    const TileMap& tiles() const { return m_tiles; }
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp

    r102698 r102726  
    4343    WTF_MAKE_NONCOPYABLE(DrawableTile);
    4444public:
    45     DrawableTile() : m_textureId(0) { }
     45    static PassOwnPtr<DrawableTile> create() { return adoptPtr(new DrawableTile()); }
    4646
    4747    Platform3DObject textureId() const { return m_textureId; }
    4848    void setTextureId(Platform3DObject textureId) { m_textureId = textureId; }
    4949private:
     50    DrawableTile() : m_textureId(0) { }
     51
    5052    Platform3DObject m_textureId;
    5153};
     
    9395DrawableTile* CCTiledLayerImpl::createTile(int i, int j)
    9496{
    95     RefPtr<DrawableTile> tile = adoptRef(new DrawableTile());
    96     m_tiler->addTile(tile, i, j);
    97     return tile.get();
     97    OwnPtr<DrawableTile> tile(DrawableTile::create());
     98    DrawableTile* addedTile = tile.get();
     99    m_tiler->addTile(tile.release(), i, j);
     100    return addedTile;
    98101}
    99102
Note: See TracChangeset for help on using the changeset viewer.