From 11efffb35108619badec52d5b8baf70493cc000c Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Tue, 21 Apr 2020 18:10:57 +0300 Subject: [core] Add TileUpdateParameters and use it --- src/mbgl/renderer/tile_pyramid.cpp | 2 +- src/mbgl/tile/raster_dem_tile.cpp | 4 ++-- src/mbgl/tile/raster_dem_tile.hpp | 2 +- src/mbgl/tile/raster_tile.cpp | 4 ++-- src/mbgl/tile/raster_tile.hpp | 2 +- src/mbgl/tile/tile.hpp | 14 +++++++++++++- src/mbgl/tile/tile_loader.hpp | 4 ++-- src/mbgl/tile/tile_loader_impl.hpp | 8 ++++---- src/mbgl/tile/vector_tile.cpp | 4 ++-- src/mbgl/tile/vector_tile.hpp | 2 +- test/style/source.test.cpp | 6 +++--- 11 files changed, 32 insertions(+), 20 deletions(-) diff --git a/src/mbgl/renderer/tile_pyramid.cpp b/src/mbgl/renderer/tile_pyramid.cpp index 0e4986c7e9..9d1c8a89b8 100644 --- a/src/mbgl/renderer/tile_pyramid.cpp +++ b/src/mbgl/renderer/tile_pyramid.cpp @@ -132,7 +132,7 @@ void TilePyramid::update(const std::vector>& l auto retainTileFn = [&](Tile& tile, TileNecessity necessity) -> void { if (retain.emplace(tile.id).second) { - tile.setMinimumUpdateInterval(minimumUpdateInterval); + tile.setUpdateParameters({minimumUpdateInterval}); tile.setNecessity(necessity); } diff --git a/src/mbgl/tile/raster_dem_tile.cpp b/src/mbgl/tile/raster_dem_tile.cpp index 83b41ddd83..bdd890bbbf 100644 --- a/src/mbgl/tile/raster_dem_tile.cpp +++ b/src/mbgl/tile/raster_dem_tile.cpp @@ -122,8 +122,8 @@ void RasterDEMTile::setNecessity(TileNecessity necessity) { loader.setNecessity(necessity); } -void RasterDEMTile::setMinimumUpdateInterval(Duration interval) { - loader.setMinimumUpdateInterval(interval); +void RasterDEMTile::setUpdateParameters(const TileUpdateParameters& params) { + loader.setUpdateParameters(params); } } // namespace mbgl diff --git a/src/mbgl/tile/raster_dem_tile.hpp b/src/mbgl/tile/raster_dem_tile.hpp index d29c5337be..a6189d8d7f 100644 --- a/src/mbgl/tile/raster_dem_tile.hpp +++ b/src/mbgl/tile/raster_dem_tile.hpp @@ -68,7 +68,7 @@ public: std::unique_ptr createRenderData() override; void setNecessity(TileNecessity) override; - void setMinimumUpdateInterval(Duration) override; + void setUpdateParameters(const TileUpdateParameters&) override; void setError(std::exception_ptr); void setMetadata(optional modified, optional expires); diff --git a/src/mbgl/tile/raster_tile.cpp b/src/mbgl/tile/raster_tile.cpp index 1045097a05..2ba1dfcc07 100644 --- a/src/mbgl/tile/raster_tile.cpp +++ b/src/mbgl/tile/raster_tile.cpp @@ -78,8 +78,8 @@ void RasterTile::setNecessity(TileNecessity necessity) { loader.setNecessity(necessity); } -void RasterTile::setMinimumUpdateInterval(Duration interval) { - loader.setMinimumUpdateInterval(interval); +void RasterTile::setUpdateParameters(const TileUpdateParameters& params) { + loader.setUpdateParameters(params); } } // namespace mbgl diff --git a/src/mbgl/tile/raster_tile.hpp b/src/mbgl/tile/raster_tile.hpp index 78dbd95c0a..4712bfb817 100644 --- a/src/mbgl/tile/raster_tile.hpp +++ b/src/mbgl/tile/raster_tile.hpp @@ -24,7 +24,7 @@ public: std::unique_ptr createRenderData() override; void setNecessity(TileNecessity) override; - void setMinimumUpdateInterval(Duration) override; + void setUpdateParameters(const TileUpdateParameters&) override; void setError(std::exception_ptr); void setMetadata(optional modified, optional expires); diff --git a/src/mbgl/tile/tile.hpp b/src/mbgl/tile/tile.hpp index bf84f8bd98..3bb8d87d6c 100644 --- a/src/mbgl/tile/tile.hpp +++ b/src/mbgl/tile/tile.hpp @@ -34,6 +34,17 @@ namespace gfx { class UploadPass; } // namespace gfx +struct TileUpdateParameters { + Duration minimumUpdateInterval; +}; + +inline bool operator==(const TileUpdateParameters& a, const TileUpdateParameters& b) { + return a.minimumUpdateInterval == b.minimumUpdateInterval; +} + +inline bool operator!=(const TileUpdateParameters& a, const TileUpdateParameters& b) { + return !(a == b); +} class Tile { public: enum class Kind : uint8_t { @@ -52,7 +63,8 @@ public: void setObserver(TileObserver* observer); virtual void setNecessity(TileNecessity) {} - virtual void setMinimumUpdateInterval(Duration) {} + + virtual void setUpdateParameters(const TileUpdateParameters&) {} // Mark this tile as no longer needed and cancel any pending work. virtual void cancel(); diff --git a/src/mbgl/tile/tile_loader.hpp b/src/mbgl/tile/tile_loader.hpp index c6d0d61fef..e4b9a1dc5e 100644 --- a/src/mbgl/tile/tile_loader.hpp +++ b/src/mbgl/tile/tile_loader.hpp @@ -23,7 +23,7 @@ public: ~TileLoader(); void setNecessity(TileNecessity newNecessity); - void setMinimumUpdateInterval(Duration); + void setUpdateParameters(const TileUpdateParameters&); private: // called when the tile is one of the ideal tiles that we want to show definitely. the tile source @@ -49,7 +49,7 @@ private: Resource resource; std::shared_ptr fileSource; std::unique_ptr request; - Duration minimumUpdateInterval{Duration::zero()}; + TileUpdateParameters updateParameters{{Duration::zero()}}; }; } // namespace mbgl diff --git a/src/mbgl/tile/tile_loader_impl.hpp b/src/mbgl/tile/tile_loader_impl.hpp index 78b9fe6df3..cf37650484 100644 --- a/src/mbgl/tile/tile_loader_impl.hpp +++ b/src/mbgl/tile/tile_loader_impl.hpp @@ -69,9 +69,9 @@ void TileLoader::setNecessity(TileNecessity newNecessity) { } template -void TileLoader::setMinimumUpdateInterval(Duration interval) { - if (minimumUpdateInterval != interval) { - minimumUpdateInterval = interval; +void TileLoader::setUpdateParameters(const TileUpdateParameters& params) { + if (updateParameters != params) { + updateParameters = params; if (hasPendingNetworkRequest()) { // Update the pending request. request.reset(); @@ -159,7 +159,7 @@ void TileLoader::loadFromNetwork() { // Instead of using Resource::LoadingMethod::All, we're first doing a CacheOnly, and then a // NetworkOnly request. resource.loadingMethod = Resource::LoadingMethod::NetworkOnly; - resource.minimumUpdateInterval = minimumUpdateInterval; + resource.minimumUpdateInterval = updateParameters.minimumUpdateInterval; request = fileSource->request(resource, [this](const Response& res) { loadedData(res); }); } diff --git a/src/mbgl/tile/vector_tile.cpp b/src/mbgl/tile/vector_tile.cpp index 2e2dabc66e..7ae53ef203 100644 --- a/src/mbgl/tile/vector_tile.cpp +++ b/src/mbgl/tile/vector_tile.cpp @@ -16,8 +16,8 @@ void VectorTile::setNecessity(TileNecessity necessity) { loader.setNecessity(necessity); } -void VectorTile::setMinimumUpdateInterval(Duration interval) { - loader.setMinimumUpdateInterval(interval); +void VectorTile::setUpdateParameters(const TileUpdateParameters& params) { + loader.setUpdateParameters(params); } void VectorTile::setMetadata(optional modified_, optional expires_) { diff --git a/src/mbgl/tile/vector_tile.hpp b/src/mbgl/tile/vector_tile.hpp index fdefb14e20..31ae52b7c7 100644 --- a/src/mbgl/tile/vector_tile.hpp +++ b/src/mbgl/tile/vector_tile.hpp @@ -16,7 +16,7 @@ public: const Tileset&); void setNecessity(TileNecessity) final; - void setMinimumUpdateInterval(Duration interval) final; + void setUpdateParameters(const TileUpdateParameters&) final; void setMetadata(optional modified, optional expires); void setData(const std::shared_ptr& data); diff --git a/test/style/source.test.cpp b/test/style/source.test.cpp index a77be5523c..c8f1e3781d 100644 --- a/test/style/source.test.cpp +++ b/test/style/source.test.cpp @@ -749,7 +749,7 @@ public: renderable = true; } void setNecessity(TileNecessity necessity) override; - void setMinimumUpdateInterval(Duration) override; + void setUpdateParameters(const TileUpdateParameters&) override; bool layerPropertiesUpdated(const Immutable&) override { return true; } std::unique_ptr createRenderData() override { return nullptr; } @@ -789,8 +789,8 @@ void FakeTile::setNecessity(TileNecessity necessity) { source.tileSetNecessity(necessity); } -void FakeTile::setMinimumUpdateInterval(Duration interval) { - source.tileSetMinimumUpdateInterval(interval); +void FakeTile::setUpdateParameters(const TileUpdateParameters& params) { + source.tileSetMinimumUpdateInterval(params.minimumUpdateInterval); } } // namespace -- cgit v1.2.1