diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2016-09-19 15:54:13 +0200 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2016-10-27 18:14:53 -0700 |
commit | ef8017198ce8f0bd79ba5a5ed31e35a16e3433bb (patch) | |
tree | 66632219fe62c86edf9f8424004f99d1008dbc14 /src/mbgl/style/source_impl.cpp | |
parent | 91272992f3a7ca7baa124c3378f1c1e2b3e5bb76 (diff) | |
download | qtlocation-mapboxgl-ef8017198ce8f0bd79ba5a5ed31e35a16e3433bb.tar.gz |
[core] remove tiles for disabled sources
When no layer of a source is visible anymore, we are now evicting tiles that are still stored in that source and move them to the cache.
Diffstat (limited to 'src/mbgl/style/source_impl.cpp')
-rw-r--r-- | src/mbgl/style/source_impl.cpp | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/src/mbgl/style/source_impl.cpp b/src/mbgl/style/source_impl.cpp index 1fb6d59f0e..68e2feed1b 100644 --- a/src/mbgl/style/source_impl.cpp +++ b/src/mbgl/style/source_impl.cpp @@ -146,6 +146,19 @@ void Source::Impl::updateTiles(const UpdateParameters& parameters) { cache.setSize(conservativeCacheSize); } + removeStaleTiles(retain); + + const PlacementConfig config { parameters.transformState.getAngle(), + parameters.transformState.getPitch(), + parameters.debugOptions & MapDebugOptions::Collision }; + + for (auto& pair : tiles) { + pair.second->setPlacementConfig(config); + } +} + +// Moves all tiles to the cache except for those specified in the retain set. +void Source::Impl::removeStaleTiles(const std::set<OverscaledTileID>& retain) { // Remove stale tiles. This goes through the (sorted!) tiles map and retain set in lockstep // and removes items from tiles that don't have the corresponding key in the retain set. auto tilesIt = tiles.begin(); @@ -162,13 +175,12 @@ void Source::Impl::updateTiles(const UpdateParameters& parameters) { ++retainIt; } } +} - const PlacementConfig config { parameters.transformState.getAngle(), - parameters.transformState.getPitch(), - parameters.debugOptions & MapDebugOptions::Collision }; - - for (auto& pair : tiles) { - pair.second->setPlacementConfig(config); +void Source::Impl::removeTiles() { + renderTiles.clear(); + if (!tiles.empty()) { + removeStaleTiles({}); } } |