[core] Override default prefetch delta if source has it's own setting
This commit is contained in:
@@ -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>>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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&);
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user