[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdeedu/marble/src/lib
From: Bernhard Beschow <bbeschow () cs ! tu-berlin ! de>
Date: 2011-03-31 15:31:07
Message-ID: 20110331153107.09CDCAC8D4 () svn ! kde ! org
[Download RAW message or body]
SVN commit 1226644 by beschow:
StackedTileLoader: merge reloadTile(), tilesOnDisplay(), and reloadCachedTile() into \
reloadVisibleTiles(). Use reloadVisibleTiles() in TextureLayer::reload().
This patch does not only remove lots of unused and redundant code, but also seems \
more efficent, since tileUpdatesAvailable() is signalled only once rather than once \
for each cached tile in reloadCachedTile().
M +11 -74 StackedTileLoader.cpp
M +2 -6 StackedTileLoader.h
M +1 -9 TextureLayer.cpp
--- trunk/KDE/kdeedu/marble/src/lib/StackedTileLoader.cpp #1226643:1226644
@@ -240,55 +240,6 @@
return stackedTile;
}
-// The tile to be reloaded might be (alternatively):
-// 1) in the "hash" (m_tilesOnDisplay), which means it is currently displayed
-// 2) not in the hash, but in the "cache", which means it is not currently displayed
-// 3) neither in "hash" nor in "cache"
-StackedTile* StackedTileLoader::reloadTile( TileId const & stackedTileId,
- DownloadUsage const usage )
-{
- StackedTile * const displayedTile = d->m_tilesOnDisplay.value( stackedTileId, 0 \
);
- if ( displayedTile ) {
- reloadCachedTile( displayedTile, usage );
- return displayedTile;
- }
- StackedTile * const cachedTile = d->m_tileCache.object( stackedTileId );
- if ( cachedTile ) {
- // It would be more correct to update the cost for the cache also, but let's \
ignore it at
- // least for now.
- // Perhaps more relevant is, that as a consequence of leaving the tile in \
the cache
- // reloadCachedTile must not alter the cache to prevent this tile from being \
deleted.
- // So, all in all it might be better to take the tile out of the cache \
before calling
- // reloadCachedTile and put it in again afterwards.
- // FIXME: discuss/decide
- reloadCachedTile( cachedTile, usage );
- return cachedTile;
- }
-
- QVector<QSharedPointer<TextureTile> > tiles;
- QVector<GeoSceneTexture const *> const textureLayers = \
d->findRelevantTextureLayers( stackedTileId );
- QVector<GeoSceneTexture const *>::const_iterator pos = \
textureLayers.constBegin();
- QVector<GeoSceneTexture const *>::const_iterator const end = \
textureLayers.constEnd();
- for (; pos != end; ++pos ) {
- GeoSceneTexture const * const textureLayer = *pos;
- TileId const tileId( textureLayer->sourceDir(), stackedTileId.zoomLevel(),
- stackedTileId.x(), stackedTileId.y() );
- QSharedPointer<TextureTile> const tile = d->m_tileLoader->reloadTile( \
stackedTileId, tileId,
- usage \
);
- if ( tile ) {
- tile->setBlending( textureLayer->blending() );
- tiles.append( tile );
- }
- }
- Q_ASSERT( !tiles.isEmpty() );
-
- StackedTile * const stackedTile = new StackedTile( stackedTileId, tiles );
- d->m_tilesOnDisplay[ stackedTileId ] = stackedTile;
- mergeDecorations( stackedTile );
-
- return stackedTile;
-}
-
void StackedTileLoader::downloadTile( TileId const & stackedTileId )
{
QVector<GeoSceneTexture const *> const textureLayers = \
d->findRelevantTextureLayers( stackedTileId ); @@ -307,17 +258,20 @@
return d->m_tileCache.maxCost() / 1024;
}
-QList<TileId> StackedTileLoader::tilesOnDisplay() const
+void StackedTileLoader::reloadVisibleTiles()
{
- QList<TileId> result;
- QHash<TileId, StackedTile*>::const_iterator pos = \
d->m_tilesOnDisplay.constBegin();
- QHash<TileId, StackedTile*>::const_iterator const end = \
d->m_tilesOnDisplay.constEnd();
- for (; pos != end; ++pos ) {
- if ( pos.value()->used() ) {
- result.append( pos.key() );
+ foreach ( StackedTile * const displayedTile, d->m_tilesOnDisplay.values() ) {
+ Q_ASSERT( displayedTile != 0 );
+ foreach ( QSharedPointer<TextureTile> const & tile, *displayedTile->tiles() \
) { + // it's debatable here, whether DownloadBulk or DownloadBrowse \
should be used + // but since "reload" or "refresh" seems to be a common \
action of a browser and it + // allows for more connections (in our \
model), use "DownloadBrowse" + d->m_tileLoader->reloadTile( tile, \
DownloadBrowse ); }
+ mergeDecorations( displayedTile );
}
- return result;
+
+ emit tileUpdatesAvailable();
}
int StackedTileLoader::maximumTileLevel() const
@@ -459,23 +413,6 @@
d->m_layerDecorator.paint( "maps/" + d->m_textureLayers.at( 0 )->sourceDir() );
}
-// This method should not alter m_tileCache, as the given tile is managed
-// by the cache and may be evicted at any time (that is usually when inserting
-// other tiles in the cache)
-void StackedTileLoader::reloadCachedTile( StackedTile * const cachedTile,
- DownloadUsage const usage )
-{
- Q_ASSERT( cachedTile );
- QVector<QSharedPointer<TextureTile> > * tiles = cachedTile->tiles();
- QVector<QSharedPointer<TextureTile> >::const_iterator pos = tiles->constBegin();
- QVector<QSharedPointer<TextureTile> >::const_iterator const end = \
tiles->constEnd();
- for (; pos != end; ++pos ) {
- d->m_tileLoader->reloadTile( *pos, usage );
}
- mergeDecorations( cachedTile );
- emit tileUpdateAvailable( cachedTile->id() );
-}
-}
-
#include "StackedTileLoader.moc"
--- trunk/KDE/kdeedu/marble/src/lib/StackedTileLoader.h #1226643:1226644
@@ -92,7 +92,6 @@
* and the zoom level.
*/
StackedTile* loadTile( TileId const &stackedTileId );
- StackedTile* reloadTile( TileId const & stackedTileId, DownloadUsage const \
); void downloadTile( TileId const & stackedTileId );
/**
@@ -121,11 +120,9 @@
quint64 volatileCacheLimit() const;
/**
- * @brief Returns a list of TileIds of the tiles which are currently
- * displayed. This is used for example for the map reload
- * functionality.
+ * @brief Reloads the tiles that are currently displayed.
*/
- QList<TileId> tilesOnDisplay() const;
+ void reloadVisibleTiles();
/**
* Returns the highest level in which some tiles are theoretically
@@ -168,7 +165,6 @@
private:
Q_DISABLE_COPY( StackedTileLoader )
void mergeDecorations( StackedTile * const ) const;
- void reloadCachedTile( StackedTile * const cachedTile, DownloadUsage const \
);
StackedTileLoaderPrivate* const d;
};
--- trunk/KDE/kdeedu/marble/src/lib/TextureLayer.cpp #1226643:1226644
@@ -215,16 +215,8 @@
void TextureLayer::reload()
{
- QList<TileId> displayed = d->m_tileLoader.tilesOnDisplay();
- QList<TileId>::const_iterator pos = displayed.constBegin();
- QList<TileId>::const_iterator const end = displayed.constEnd();
- for (; pos != end; ++pos ) {
- // it's debatable here, whether DownloadBulk or DownloadBrowse should be \
used
- // but since "reload" or "refresh" seems to be a common action of a browser \
and it
- // allows for more connections (in our model), use "DownloadBrowse"
- d->m_tileLoader.reloadTile( *pos, DownloadBrowse );
+ d->m_tileLoader.reloadVisibleTiles();
}
-}
void TextureLayer::downloadTile( const TileId &tileId )
{
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic