summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Shalamov <alexander.shalamov@mapbox.com>2020-02-06 09:44:49 +0200
committerAlexander Shalamov <alexander.shalamov@mapbox.com>2020-02-10 16:35:37 +0200
commit04292d0034e3904d68e9e413087886ad9fde8c8b (patch)
tree515c4f5caff490f26ab1a16f736dfab22cae0fcd
parent97cab6365bd083d162544eb4bcae4ebd47a7ecae (diff)
downloadqtlocation-mapboxgl-04292d0034e3904d68e9e413087886ad9fde8c8b.tar.gz
[core] Add runtime API for setting tile prefetch delta for Source
New setPrefetchZoomDelta(optional<uint8_t> delta) method allow overriding default tile prefetch setting that is defined by the Map instance. The method can be moved to generic style specification if found to be useful for gl-js engine.
-rw-r--r--include/mbgl/style/source.hpp5
-rw-r--r--include/mbgl/style/sources/custom_geometry_source.hpp4
-rw-r--r--include/mbgl/style/sources/geojson_source.hpp3
-rw-r--r--include/mbgl/style/sources/image_source.hpp4
-rw-r--r--include/mbgl/style/sources/raster_source.hpp3
-rw-r--r--include/mbgl/style/sources/vector_source.hpp3
-rw-r--r--src/mbgl/annotation/annotation_source.cpp8
-rw-r--r--src/mbgl/annotation/annotation_source.hpp4
-rw-r--r--src/mbgl/style/source.cpp12
-rw-r--r--src/mbgl/style/source_impl.cpp8
-rw-r--r--src/mbgl/style/source_impl.hpp3
-rw-r--r--src/mbgl/style/sources/custom_geometry_source.cpp6
-rw-r--r--src/mbgl/style/sources/geojson_source.cpp4
-rw-r--r--src/mbgl/style/sources/image_source.cpp4
-rw-r--r--src/mbgl/style/sources/raster_source.cpp4
-rw-r--r--src/mbgl/style/sources/vector_source.cpp4
16 files changed, 77 insertions, 2 deletions
diff --git a/include/mbgl/style/source.hpp b/include/mbgl/style/source.hpp
index c3c0609a9f..59afd6916e 100644
--- a/include/mbgl/style/source.hpp
+++ b/include/mbgl/style/source.hpp
@@ -73,6 +73,8 @@ public:
SourceObserver* observer = nullptr;
virtual void loadDescription(FileSource&) = 0;
+ void setPrefetchZoomDelta(optional<uint8_t> delta) noexcept;
+ optional<uint8_t> getPrefetchZoomDelta() const noexcept;
void dumpDebugLogs() const;
virtual bool supportsLayerType(const mbgl::style::LayerTypeInfo*) const = 0;
@@ -85,6 +87,9 @@ public:
mapbox::base::TypeWrapper peer;
virtual mapbox::base::WeakPtr<Source> makeWeakPtr() = 0;
+
+protected:
+ virtual Mutable<Impl> createMutable() const noexcept = 0;
};
} // namespace style
diff --git a/include/mbgl/style/sources/custom_geometry_source.hpp b/include/mbgl/style/sources/custom_geometry_source.hpp
index ff04505699..504ec42ea8 100644
--- a/include/mbgl/style/sources/custom_geometry_source.hpp
+++ b/include/mbgl/style/sources/custom_geometry_source.hpp
@@ -50,6 +50,10 @@ public:
mapbox::base::WeakPtr<Source> makeWeakPtr() override {
return weakFactory.makeWeakPtr();
}
+
+protected:
+ Mutable<Source::Impl> createMutable() const noexcept final;
+
private:
std::shared_ptr<ThreadPool> threadPool;
std::unique_ptr<Actor<CustomTileLoader>> loader;
diff --git a/include/mbgl/style/sources/geojson_source.hpp b/include/mbgl/style/sources/geojson_source.hpp
index 750d29627d..4bd250b895 100644
--- a/include/mbgl/style/sources/geojson_source.hpp
+++ b/include/mbgl/style/sources/geojson_source.hpp
@@ -81,6 +81,9 @@ public:
return weakFactory.makeWeakPtr();
}
+protected:
+ Mutable<Source::Impl> createMutable() const noexcept final;
+
private:
optional<std::string> url;
std::unique_ptr<AsyncRequest> req;
diff --git a/include/mbgl/style/sources/image_source.hpp b/include/mbgl/style/sources/image_source.hpp
index 699a3c6494..d2b7c37bdf 100644
--- a/include/mbgl/style/sources/image_source.hpp
+++ b/include/mbgl/style/sources/image_source.hpp
@@ -33,6 +33,10 @@ public:
mapbox::base::WeakPtr<Source> makeWeakPtr() override {
return weakFactory.makeWeakPtr();
}
+
+protected:
+ Mutable<Source::Impl> createMutable() const noexcept final;
+
private:
optional<std::string> url;
std::unique_ptr<AsyncRequest> req;
diff --git a/include/mbgl/style/sources/raster_source.hpp b/include/mbgl/style/sources/raster_source.hpp
index 00a3b788c2..e06c3404e9 100644
--- a/include/mbgl/style/sources/raster_source.hpp
+++ b/include/mbgl/style/sources/raster_source.hpp
@@ -31,6 +31,9 @@ public:
return weakFactory.makeWeakPtr();
}
+protected:
+ Mutable<Source::Impl> createMutable() const noexcept final;
+
private:
const variant<std::string, Tileset> urlOrTileset;
std::unique_ptr<AsyncRequest> req;
diff --git a/include/mbgl/style/sources/vector_source.hpp b/include/mbgl/style/sources/vector_source.hpp
index 4165af0a61..83fcae95d6 100644
--- a/include/mbgl/style/sources/vector_source.hpp
+++ b/include/mbgl/style/sources/vector_source.hpp
@@ -30,6 +30,9 @@ public:
return weakFactory.makeWeakPtr();
}
+protected:
+ Mutable<Source::Impl> createMutable() const noexcept final;
+
private:
const variant<std::string, Tileset> urlOrTileset;
std::unique_ptr<AsyncRequest> req;
diff --git a/src/mbgl/annotation/annotation_source.cpp b/src/mbgl/annotation/annotation_source.cpp
index 7a137f1881..318241a914 100644
--- a/src/mbgl/annotation/annotation_source.cpp
+++ b/src/mbgl/annotation/annotation_source.cpp
@@ -14,6 +14,10 @@ AnnotationSource::Impl::Impl()
: Source::Impl(SourceType::Annotations, AnnotationManager::SourceID) {
}
+const AnnotationSource::Impl& AnnotationSource::impl() const {
+ return static_cast<const Impl&>(*baseImpl);
+}
+
void AnnotationSource::loadDescription(FileSource&) {
loaded = true;
}
@@ -26,4 +30,8 @@ bool AnnotationSource::supportsLayerType(const mbgl::style::LayerTypeInfo* info)
return !std::strcmp(info->type, "line") || !std::strcmp(info->type, "symbol") || !std::strcmp(info->type, "fill");
}
+Mutable<Source::Impl> AnnotationSource::createMutable() const noexcept {
+ return staticMutableCast<Source::Impl>(makeMutable<Impl>(impl()));
+}
+
} // namespace mbgl
diff --git a/src/mbgl/annotation/annotation_source.hpp b/src/mbgl/annotation/annotation_source.hpp
index 0379426b3e..de432202a0 100644
--- a/src/mbgl/annotation/annotation_source.hpp
+++ b/src/mbgl/annotation/annotation_source.hpp
@@ -12,13 +12,15 @@ public:
class Impl;
const Impl& impl() const;
+protected:
+ Mutable<Source::Impl> createMutable() const noexcept final;
+
private:
void loadDescription(FileSource&) final;
bool supportsLayerType(const mbgl::style::LayerTypeInfo*) const override;
mapbox::base::WeakPtr<Source> makeWeakPtr() override {
return weakFactory.makeWeakPtr();
}
- Mutable<Impl> mutableImpl() const;
mapbox::base::WeakPtrFactory<Source> weakFactory {this};
};
diff --git a/src/mbgl/style/source.cpp b/src/mbgl/style/source.cpp
index e7701b8bec..644a31dace 100644
--- a/src/mbgl/style/source.cpp
+++ b/src/mbgl/style/source.cpp
@@ -31,6 +31,18 @@ void Source::setObserver(SourceObserver* observer_) {
observer = observer_ ? observer_ : &nullObserver;
}
+void Source::setPrefetchZoomDelta(optional<uint8_t> delta) noexcept {
+ if (getPrefetchZoomDelta() == delta) return;
+ auto newImpl = createMutable();
+ newImpl->setPrefetchZoomDelta(std::move(delta));
+ baseImpl = std::move(newImpl);
+ observer->onSourceChanged(*this);
+}
+
+optional<uint8_t> Source::getPrefetchZoomDelta() const noexcept {
+ return baseImpl->getPrefetchZoomDelta();
+}
+
void Source::dumpDebugLogs() const {
Log::Info(Event::General, "Source::id: %s", getID().c_str());
Log::Info(Event::General, "Source::loaded: %d", loaded);
diff --git a/src/mbgl/style/source_impl.cpp b/src/mbgl/style/source_impl.cpp
index 0683f847cb..7f6f633eda 100644
--- a/src/mbgl/style/source_impl.cpp
+++ b/src/mbgl/style/source_impl.cpp
@@ -8,5 +8,13 @@ Source::Impl::Impl(SourceType type_, std::string id_)
id(std::move(id_)) {
}
+void Source::Impl::setPrefetchZoomDelta(optional<uint8_t> delta) noexcept {
+ prefetchZoomDelta = std::move(delta);
+}
+
+optional<uint8_t> Source::Impl::getPrefetchZoomDelta() const noexcept {
+ return prefetchZoomDelta;
+}
+
} // namespace style
} // namespace mbgl
diff --git a/src/mbgl/style/source_impl.hpp b/src/mbgl/style/source_impl.hpp
index 42da97345a..d2c5d54d10 100644
--- a/src/mbgl/style/source_impl.hpp
+++ b/src/mbgl/style/source_impl.hpp
@@ -20,9 +20,12 @@ public:
Impl& operator=(const Impl&) = delete;
virtual optional<std::string> getAttribution() const = 0;
+ void setPrefetchZoomDelta(optional<uint8_t> delta) noexcept;
+ optional<uint8_t> getPrefetchZoomDelta() const noexcept;
const SourceType type;
const std::string id;
+ optional<uint8_t> prefetchZoomDelta;
protected:
Impl(SourceType, std::string);
diff --git a/src/mbgl/style/sources/custom_geometry_source.cpp b/src/mbgl/style/sources/custom_geometry_source.cpp
index 1076cbf417..113298dd3c 100644
--- a/src/mbgl/style/sources/custom_geometry_source.cpp
+++ b/src/mbgl/style/sources/custom_geometry_source.cpp
@@ -27,7 +27,7 @@ const CustomGeometrySource::Impl& CustomGeometrySource::impl() const {
}
void CustomGeometrySource::loadDescription(FileSource&) {
- baseImpl = makeMutable<CustomGeometrySource::Impl>(impl(), loader->self());
+ baseImpl = makeMutable<Impl>(impl(), loader->self());
loaded = true;
observer->onSourceLoaded(*this);
}
@@ -49,5 +49,9 @@ void CustomGeometrySource::invalidateRegion(const LatLngBounds& bounds) {
loader->self().invoke(&CustomTileLoader::invalidateRegion, bounds, impl().getZoomRange());
}
+Mutable<Source::Impl> CustomGeometrySource::createMutable() const noexcept {
+ return staticMutableCast<Source::Impl>(makeMutable<Impl>(impl()));
+}
+
} // namespace style
} // namespace mbgl
diff --git a/src/mbgl/style/sources/geojson_source.cpp b/src/mbgl/style/sources/geojson_source.cpp
index 3afccf07f2..2880b9b131 100644
--- a/src/mbgl/style/sources/geojson_source.cpp
+++ b/src/mbgl/style/sources/geojson_source.cpp
@@ -120,5 +120,9 @@ bool GeoJSONSource::supportsLayerType(const mbgl::style::LayerTypeInfo* info) co
return mbgl::underlying_type(Tile::Kind::Geometry) == mbgl::underlying_type(info->tileKind);
}
+Mutable<Source::Impl> GeoJSONSource::createMutable() const noexcept {
+ return staticMutableCast<Source::Impl>(makeMutable<Impl>(impl()));
+}
+
} // namespace style
} // namespace mbgl
diff --git a/src/mbgl/style/sources/image_source.cpp b/src/mbgl/style/sources/image_source.cpp
index d55f7c9f09..ec727a33bd 100644
--- a/src/mbgl/style/sources/image_source.cpp
+++ b/src/mbgl/style/sources/image_source.cpp
@@ -87,5 +87,9 @@ bool ImageSource::supportsLayerType(const mbgl::style::LayerTypeInfo* info) cons
return mbgl::underlying_type(Tile::Kind::Raster) == mbgl::underlying_type(info->tileKind);
}
+Mutable<Source::Impl> ImageSource::createMutable() const noexcept {
+ return staticMutableCast<Source::Impl>(makeMutable<Impl>(impl()));
+}
+
} // namespace style
} // namespace mbgl
diff --git a/src/mbgl/style/sources/raster_source.cpp b/src/mbgl/style/sources/raster_source.cpp
index f90306945e..8c41da3a23 100644
--- a/src/mbgl/style/sources/raster_source.cpp
+++ b/src/mbgl/style/sources/raster_source.cpp
@@ -87,5 +87,9 @@ bool RasterSource::supportsLayerType(const mbgl::style::LayerTypeInfo* info) con
return mbgl::underlying_type(Tile::Kind::Raster) == mbgl::underlying_type(info->tileKind);
}
+Mutable<Source::Impl> RasterSource::createMutable() const noexcept {
+ return staticMutableCast<Source::Impl>(makeMutable<Impl>(impl()));
+}
+
} // namespace style
} // namespace mbgl
diff --git a/src/mbgl/style/sources/vector_source.cpp b/src/mbgl/style/sources/vector_source.cpp
index 510106adb9..cc2319b302 100644
--- a/src/mbgl/style/sources/vector_source.cpp
+++ b/src/mbgl/style/sources/vector_source.cpp
@@ -91,5 +91,9 @@ bool VectorSource::supportsLayerType(const mbgl::style::LayerTypeInfo* info) con
return mbgl::underlying_type(Tile::Kind::Geometry) == mbgl::underlying_type(info->tileKind);
}
+Mutable<Source::Impl> VectorSource::createMutable() const noexcept {
+ return staticMutableCast<Source::Impl>(makeMutable<Impl>(impl()));
+}
+
} // namespace style
} // namespace mbgl