summaryrefslogtreecommitdiff
path: root/src/mbgl/style/source_impl.cpp
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2016-09-19 15:54:13 +0200
committerKonstantin Käfer <mail@kkaefer.com>2016-10-27 18:14:53 -0700
commitef8017198ce8f0bd79ba5a5ed31e35a16e3433bb (patch)
tree66632219fe62c86edf9f8424004f99d1008dbc14 /src/mbgl/style/source_impl.cpp
parent91272992f3a7ca7baa124c3378f1c1e2b3e5bb76 (diff)
downloadqtlocation-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.cpp24
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({});
}
}