summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Shalamov <alexander.shalamov@mapbox.com>2020-02-10 22:29:11 +0200
committerAlexander Shalamov <alexander.shalamov@mapbox.com>2020-02-10 22:32:01 +0200
commitc7ab18af52087f1e483f91c4037248429460643a (patch)
treefd1961e557f5ce5d14ac8953c6f573494cfec9f3
parent04292d0034e3904d68e9e413087886ad9fde8c8b (diff)
downloadqtlocation-mapboxgl-c7ab18af52087f1e483f91c4037248429460643a.tar.gz
[core] Override default prefetch delta if source has it's own setting
-rw-r--r--src/mbgl/annotation/render_annotation_source.cpp26
-rw-r--r--src/mbgl/renderer/sources/render_custom_geometry_source.cpp25
-rw-r--r--src/mbgl/renderer/sources/render_geojson_source.cpp24
-rw-r--r--src/mbgl/renderer/sources/render_raster_dem_source.cpp22
-rw-r--r--src/mbgl/renderer/sources/render_raster_source.cpp22
-rw-r--r--src/mbgl/renderer/sources/render_vector_source.cpp24
-rw-r--r--src/mbgl/renderer/tile_pyramid.cpp9
-rw-r--r--src/mbgl/renderer/tile_pyramid.hpp3
-rw-r--r--test/style/source.test.cpp20
9 files changed, 94 insertions, 81 deletions
diff --git a/src/mbgl/annotation/render_annotation_source.cpp b/src/mbgl/annotation/render_annotation_source.cpp
index e3acfcb3c0..85665961d3 100644
--- a/src/mbgl/annotation/render_annotation_source.cpp
+++ b/src/mbgl/annotation/render_annotation_source.cpp
@@ -28,19 +28,19 @@ void RenderAnnotationSource::update(Immutable<style::Source::Impl> baseImpl_,
enabled = needsRendering;
- tilePyramid.update(layers,
- needsRendering,
- needsRelayout,
- parameters,
- SourceType::Annotations,
- util::tileSize,
- // Zoom level 16 is typically sufficient for annotations.
- // See https://github.com/mapbox/mapbox-gl-native/issues/10197
- { 0, 16 },
- optional<LatLngBounds> {},
- [&] (const OverscaledTileID& tileID) {
- return std::make_unique<AnnotationTile>(tileID, parameters);
- });
+ tilePyramid.update(
+ layers,
+ needsRendering,
+ needsRelayout,
+ parameters,
+ SourceType::Annotations,
+ util::tileSize,
+ // Zoom level 16 is typically sufficient for annotations.
+ // See https://github.com/mapbox/mapbox-gl-native/issues/10197
+ {0, 16},
+ optional<LatLngBounds>{},
+ [&](const OverscaledTileID& tileID) { return std::make_unique<AnnotationTile>(tileID, parameters); },
+ baseImpl->getPrefetchZoomDelta());
}
std::unordered_map<std::string, std::vector<Feature>>
diff --git a/src/mbgl/renderer/sources/render_custom_geometry_source.cpp b/src/mbgl/renderer/sources/render_custom_geometry_source.cpp
index 6b81658370..ea6f5c3102 100644
--- a/src/mbgl/renderer/sources/render_custom_geometry_source.cpp
+++ b/src/mbgl/renderer/sources/render_custom_geometry_source.cpp
@@ -33,17 +33,20 @@ void RenderCustomGeometrySource::update(Immutable<style::Source::Impl> baseImpl_
return;
}
- tilePyramid.update(layers,
- needsRendering,
- needsRelayout,
- parameters,
- SourceType::CustomVector,
- util::tileSize,
- impl().getZoomRange(),
- {},
- [&] (const OverscaledTileID& tileID) {
- return std::make_unique<CustomGeometryTile>(tileID, impl().id, parameters, impl().getTileOptions(), *tileLoader);
- });
+ tilePyramid.update(
+ layers,
+ needsRendering,
+ needsRelayout,
+ parameters,
+ SourceType::CustomVector,
+ util::tileSize,
+ impl().getZoomRange(),
+ {},
+ [&](const OverscaledTileID& tileID) {
+ return std::make_unique<CustomGeometryTile>(
+ tileID, impl().id, parameters, impl().getTileOptions(), *tileLoader);
+ },
+ baseImpl->getPrefetchZoomDelta());
}
} // namespace mbgl
diff --git a/src/mbgl/renderer/sources/render_geojson_source.cpp b/src/mbgl/renderer/sources/render_geojson_source.cpp
index 94d171cf18..45a91e3fa0 100644
--- a/src/mbgl/renderer/sources/render_geojson_source.cpp
+++ b/src/mbgl/renderer/sources/render_geojson_source.cpp
@@ -103,17 +103,19 @@ void RenderGeoJSONSource::update(Immutable<style::Source::Impl> baseImpl_,
if (!data_) return;
- tilePyramid.update(layers,
- needsRendering,
- needsRelayout,
- parameters,
- SourceType::GeoJSON,
- util::tileSize,
- impl().getZoomRange(),
- optional<LatLngBounds>{},
- [&, data_](const OverscaledTileID& tileID) {
- return std::make_unique<GeoJSONTile>(tileID, impl().id, parameters, data_);
- });
+ tilePyramid.update(
+ layers,
+ needsRendering,
+ needsRelayout,
+ parameters,
+ SourceType::GeoJSON,
+ util::tileSize,
+ impl().getZoomRange(),
+ optional<LatLngBounds>{},
+ [&, data_](const OverscaledTileID& tileID) {
+ return std::make_unique<GeoJSONTile>(tileID, impl().id, parameters, data_);
+ },
+ baseImpl->getPrefetchZoomDelta());
}
mapbox::util::variant<Value, FeatureCollection>
diff --git a/src/mbgl/renderer/sources/render_raster_dem_source.cpp b/src/mbgl/renderer/sources/render_raster_dem_source.cpp
index fb6e343670..953484f6c6 100644
--- a/src/mbgl/renderer/sources/render_raster_dem_source.cpp
+++ b/src/mbgl/renderer/sources/render_raster_dem_source.cpp
@@ -27,17 +27,17 @@ void RenderRasterDEMSource::updateInternal(const Tileset& tileset,
const bool needsRendering,
const bool needsRelayout,
const TileParameters& parameters) {
- tilePyramid.update(layers,
- needsRendering,
- needsRelayout,
- parameters,
- SourceType::RasterDEM,
- impl().getTileSize(),
- tileset.zoomRange,
- tileset.bounds,
- [&] (const OverscaledTileID& tileID) {
- return std::make_unique<RasterDEMTile>(tileID, parameters, tileset);
- });
+ tilePyramid.update(
+ layers,
+ needsRendering,
+ needsRelayout,
+ parameters,
+ SourceType::RasterDEM,
+ impl().getTileSize(),
+ tileset.zoomRange,
+ tileset.bounds,
+ [&](const OverscaledTileID& tileID) { return std::make_unique<RasterDEMTile>(tileID, parameters, tileset); },
+ baseImpl->getPrefetchZoomDelta());
algorithm::updateTileMasks(tilePyramid.getRenderedTiles());
}
diff --git a/src/mbgl/renderer/sources/render_raster_source.cpp b/src/mbgl/renderer/sources/render_raster_source.cpp
index 408f8a4e11..7ef7b26459 100644
--- a/src/mbgl/renderer/sources/render_raster_source.cpp
+++ b/src/mbgl/renderer/sources/render_raster_source.cpp
@@ -25,17 +25,17 @@ void RenderRasterSource::updateInternal(const Tileset& tileset,
const bool needsRendering,
const bool needsRelayout,
const TileParameters& parameters) {
- tilePyramid.update(layers,
- needsRendering,
- needsRelayout,
- parameters,
- SourceType::Raster,
- impl().getTileSize(),
- tileset.zoomRange,
- tileset.bounds,
- [&] (const OverscaledTileID& tileID) {
- return std::make_unique<RasterTile>(tileID, parameters, tileset);
- });
+ tilePyramid.update(
+ layers,
+ needsRendering,
+ needsRelayout,
+ parameters,
+ SourceType::Raster,
+ impl().getTileSize(),
+ tileset.zoomRange,
+ tileset.bounds,
+ [&](const OverscaledTileID& tileID) { return std::make_unique<RasterTile>(tileID, parameters, tileset); },
+ baseImpl->getPrefetchZoomDelta());
algorithm::updateTileMasks(tilePyramid.getRenderedTiles());
}
diff --git a/src/mbgl/renderer/sources/render_vector_source.cpp b/src/mbgl/renderer/sources/render_vector_source.cpp
index 6e4fdede10..324599d45d 100644
--- a/src/mbgl/renderer/sources/render_vector_source.cpp
+++ b/src/mbgl/renderer/sources/render_vector_source.cpp
@@ -21,17 +21,19 @@ void RenderVectorSource::updateInternal(const Tileset& tileset,
const bool needsRendering,
const bool needsRelayout,
const TileParameters& parameters) {
- tilePyramid.update(layers,
- needsRendering,
- needsRelayout,
- parameters,
- SourceType::Vector,
- util::tileSize,
- tileset.zoomRange,
- tileset.bounds,
- [&] (const OverscaledTileID& tileID) {
- return std::make_unique<VectorTile>(tileID, baseImpl->id, parameters, tileset);
- });
+ tilePyramid.update(
+ layers,
+ needsRendering,
+ needsRelayout,
+ parameters,
+ SourceType::Vector,
+ util::tileSize,
+ tileset.zoomRange,
+ tileset.bounds,
+ [&](const OverscaledTileID& tileID) {
+ return std::make_unique<VectorTile>(tileID, baseImpl->id, parameters, tileset);
+ },
+ baseImpl->getPrefetchZoomDelta());
}
} // namespace mbgl
diff --git a/src/mbgl/renderer/tile_pyramid.cpp b/src/mbgl/renderer/tile_pyramid.cpp
index 586d3b5a8a..38d984bec4 100644
--- a/src/mbgl/renderer/tile_pyramid.cpp
+++ b/src/mbgl/renderer/tile_pyramid.cpp
@@ -57,7 +57,8 @@ void TilePyramid::update(const std::vector<Immutable<style::LayerProperties>>& l
const uint16_t tileSize,
const Range<uint8_t> zoomRange,
optional<LatLngBounds> bounds,
- std::function<std::unique_ptr<Tile> (const OverscaledTileID&)> createTile) {
+ std::function<std::unique_ptr<Tile>(const OverscaledTileID&)> createTile,
+ optional<uint8_t> sourcePrefetchZoomDelta) {
// If we need a relayout, abandon any cached tiles; they're now stale.
if (needsRelayout) {
cache.clear();
@@ -105,8 +106,10 @@ void TilePyramid::update(const std::vector<Immutable<style::LayerProperties>>& l
if (parameters.mode == MapMode::Continuous && type != style::SourceType::GeoJSON && type != style::SourceType::Annotations) {
// Request lower zoom level tiles (if configured to do so) in an attempt
// to show something on the screen faster at the cost of a little of bandwidth.
- if (parameters.prefetchZoomDelta) {
- panZoom = std::max<int32_t>(tileZoom - parameters.prefetchZoomDelta, zoomRange.min);
+ const uint8_t prefetchZoomDelta =
+ sourcePrefetchZoomDelta ? *sourcePrefetchZoomDelta : parameters.prefetchZoomDelta;
+ if (prefetchZoomDelta) {
+ panZoom = std::max<int32_t>(tileZoom - prefetchZoomDelta, zoomRange.min);
}
if (panZoom < idealZoom) {
diff --git a/src/mbgl/renderer/tile_pyramid.hpp b/src/mbgl/renderer/tile_pyramid.hpp
index 3b5cab5d6c..5f2bfd1ea9 100644
--- a/src/mbgl/renderer/tile_pyramid.hpp
+++ b/src/mbgl/renderer/tile_pyramid.hpp
@@ -41,7 +41,8 @@ public:
uint16_t tileSize,
Range<uint8_t> zoomRange,
optional<LatLngBounds> bounds,
- std::function<std::unique_ptr<Tile> (const OverscaledTileID&)> createTile);
+ std::function<std::unique_ptr<Tile>(const OverscaledTileID&)> createTile,
+ optional<uint8_t> sourcePrefetchZoomDelta);
const std::map<UnwrappedTileID, std::reference_wrapper<Tile>>& getRenderedTiles() const { return renderedTiles; }
Tile* getTile(const OverscaledTileID&);
diff --git a/test/style/source.test.cpp b/test/style/source.test.cpp
index 0286aaaec3..dbc67681e9 100644
--- a/test/style/source.test.cpp
+++ b/test/style/source.test.cpp
@@ -765,15 +765,17 @@ public:
const bool needsRendering,
const bool needsRelayout,
const TileParameters& parameters) override {
- tilePyramid.update(layers,
- needsRendering,
- needsRelayout,
- parameters,
- SourceType::Vector,
- util::tileSize,
- tileset.zoomRange,
- tileset.bounds,
- [&](const OverscaledTileID& tileID) { return std::make_unique<FakeTile>(*this, tileID); });
+ tilePyramid.update(
+ layers,
+ needsRendering,
+ needsRelayout,
+ parameters,
+ SourceType::Vector,
+ util::tileSize,
+ tileset.zoomRange,
+ tileset.bounds,
+ [&](const OverscaledTileID& tileID) { return std::make_unique<FakeTile>(*this, tileID); },
+ baseImpl->getPrefetchZoomDelta());
}
const optional<Tileset>& getTileset() const override {