diff options
author | Asheem Mamoowala <asheem.mamoowala@mapbox.com> | 2017-11-29 20:18:40 -0800 |
---|---|---|
committer | Asheem Mamoowala <asheem.mamoowala@mapbox.com> | 2017-12-06 19:44:12 -0800 |
commit | 31a216459c564ff7771b0e30837978dbd298de51 (patch) | |
tree | bc33ec1fdd304e8b773efc83438bbb7e4449d5f9 /src/mbgl/tile/custom_geometry_tile.cpp | |
parent | d783611d1a8a8ef1cce47cb8913fc573fc2e6cf7 (diff) | |
download | qtlocation-mapboxgl-31a216459c564ff7771b0e30837978dbd298de51.tar.gz |
[core] Mark custom geometry tiles stale without clearing data
Diffstat (limited to 'src/mbgl/tile/custom_geometry_tile.cpp')
-rw-r--r-- | src/mbgl/tile/custom_geometry_tile.cpp | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/mbgl/tile/custom_geometry_tile.cpp b/src/mbgl/tile/custom_geometry_tile.cpp index b608d90d83..7c8a85c4a4 100644 --- a/src/mbgl/tile/custom_geometry_tile.cpp +++ b/src/mbgl/tile/custom_geometry_tile.cpp @@ -5,6 +5,8 @@ #include <mbgl/actor/scheduler.hpp> #include <mbgl/style/filter_evaluator.hpp> #include <mbgl/util/string.hpp> +#include <mbgl/tile/tile_observer.hpp> +#include <mbgl/style/custom_tile_loader.hpp> #include <mapbox/geojsonvt.hpp> @@ -19,7 +21,8 @@ CustomGeometryTile::CustomGeometryTile(const OverscaledTileID& overscaledTileID, necessity(TileNecessity::Optional), options(options_), loader(loader_), - actor(*Scheduler::GetCurrent(), std::bind(&CustomGeometryTile::setTileData, this, std::placeholders::_1)) { + mailbox(std::make_shared<Mailbox>(*Scheduler::GetCurrent())), + actorRef(*this, mailbox) { } CustomGeometryTile::~CustomGeometryTile() { @@ -43,14 +46,20 @@ void CustomGeometryTile::setTileData(const GeoJSON& geoJSON) { setData(std::make_unique<GeoJSONTileData>(std::move(featureData))); } +void CustomGeometryTile::invalidateTileData() { + stale = true; + observer->onTileChanged(*this); +} + //Fetching tile data for custom sources is assumed to be an expensive operation. // Only required tiles make fetchTile requests. Attempt to cancel a tile // that is no longer required. void CustomGeometryTile::setNecessity(TileNecessity newNecessity) { - if (newNecessity != necessity) { + if (newNecessity != necessity || stale ) { necessity = newNecessity; if (necessity == TileNecessity::Required) { - loader.invoke(&style::CustomTileLoader::fetchTile, id, actor.self()); + loader.invoke(&style::CustomTileLoader::fetchTile, id, actorRef); + stale = false; } else if (!isRenderable()) { loader.invoke(&style::CustomTileLoader::cancelTile, id); } |