diff options
author | Alexander Shalamov <alexander.shalamov@mapbox.com> | 2020-02-06 09:44:49 +0200 |
---|---|---|
committer | Alexander Shalamov <alexander.shalamov@mapbox.com> | 2020-02-11 10:40:30 +0200 |
commit | fce4129435ddc5f14abdd1e2ed6a74bf84e1c496 (patch) | |
tree | b0195f13b1783298f940dc0ccf72dac6098532dd | |
parent | a23100586098c2d44682444cdd31001f1eba5859 (diff) | |
download | qtlocation-mapboxgl-fce4129435ddc5f14abdd1e2ed6a74bf84e1c496.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.hpp | 5 | ||||
-rw-r--r-- | include/mbgl/style/sources/custom_geometry_source.hpp | 4 | ||||
-rw-r--r-- | include/mbgl/style/sources/geojson_source.hpp | 3 | ||||
-rw-r--r-- | include/mbgl/style/sources/image_source.hpp | 4 | ||||
-rw-r--r-- | include/mbgl/style/sources/raster_source.hpp | 3 | ||||
-rw-r--r-- | include/mbgl/style/sources/vector_source.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/annotation/annotation_source.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/annotation/annotation_source.hpp | 4 | ||||
-rw-r--r-- | src/mbgl/style/source.cpp | 12 | ||||
-rw-r--r-- | src/mbgl/style/source_impl.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/style/source_impl.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/style/sources/custom_geometry_source.cpp | 6 | ||||
-rw-r--r-- | src/mbgl/style/sources/geojson_source.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/style/sources/image_source.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/style/sources/raster_source.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/style/sources/vector_source.cpp | 4 |
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 |