diff options
Diffstat (limited to 'src/mbgl')
25 files changed, 116 insertions, 96 deletions
diff --git a/src/mbgl/annotation/annotation_source.cpp b/src/mbgl/annotation/annotation_source.cpp index 68f36f2d3a..5746081d22 100644 --- a/src/mbgl/annotation/annotation_source.cpp +++ b/src/mbgl/annotation/annotation_source.cpp @@ -13,7 +13,7 @@ AnnotationSource::Impl::Impl() : Source::Impl(SourceType::Annotations, AnnotationManager::SourceID) { } -void AnnotationSource::loadDescription(FileSource&) { +void AnnotationSource::loadDescription(std::shared_ptr<FileSource>) { loaded = true; } diff --git a/src/mbgl/annotation/annotation_source.hpp b/src/mbgl/annotation/annotation_source.hpp index 0728f3207e..a0e59227e4 100644 --- a/src/mbgl/annotation/annotation_source.hpp +++ b/src/mbgl/annotation/annotation_source.hpp @@ -3,8 +3,12 @@ #include <mbgl/style/source.hpp> #include <mbgl/style/source_impl.hpp> +#include <memory> + namespace mbgl { +class FileSource; + class AnnotationSource : public style::Source { public: AnnotationSource(); @@ -13,7 +17,7 @@ public: const Impl& impl() const; private: - void loadDescription(FileSource&) final; + void loadDescription(std::shared_ptr<FileSource>) final; Mutable<Impl> mutableImpl() const; }; diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp index 8b90aee492..059746430c 100644 --- a/src/mbgl/map/map.cpp +++ b/src/mbgl/map/map.cpp @@ -9,9 +9,6 @@ #include <mbgl/renderer/update_parameters.hpp> #include <mbgl/renderer/renderer_frontend.hpp> #include <mbgl/renderer/renderer_observer.hpp> -#include <mbgl/storage/file_source.hpp> -#include <mbgl/storage/resource.hpp> -#include <mbgl/storage/response.hpp> #include <mbgl/util/constants.hpp> #include <mbgl/util/math.hpp> #include <mbgl/util/exception.hpp> @@ -30,17 +27,17 @@ Map::Map(RendererFrontend& rendererFrontend, MapObserver& mapObserver, const Size size, const float pixelRatio, - FileSource& fileSource, - const MapOptions& options) + const MapOptions& options, + const FileSourceOptions& fileSourceOptions) : impl(std::make_unique<Impl>(*this, rendererFrontend, mapObserver, - fileSource, size, pixelRatio, options.mapMode(), options.viewportMode(), - options.crossSourceCollisions())) {} + options.crossSourceCollisions(), + fileSourceOptions)) {} Map::~Map() = default; diff --git a/src/mbgl/map/map_impl.cpp b/src/mbgl/map/map_impl.cpp index 15caa34af4..572e1440e8 100644 --- a/src/mbgl/map/map_impl.cpp +++ b/src/mbgl/map/map_impl.cpp @@ -8,21 +8,21 @@ namespace mbgl { Map::Impl::Impl(Map& map_, RendererFrontend& frontend, MapObserver& mapObserver, - FileSource& fileSource_, Size size_, float pixelRatio_, MapMode mode_, ViewportMode viewportMode_, - bool crossSourceCollisions_) + bool crossSourceCollisions_, + const FileSourceOptions& fileSourceOptions) : map(map_), observer(mapObserver), rendererFrontend(frontend), - fileSource(fileSource_), + fileSource(platform::Factory::sharedFileSource(fileSourceOptions)), transform(observer, viewportMode_), mode(mode_), pixelRatio(pixelRatio_), crossSourceCollisions(crossSourceCollisions_), - style(std::make_unique<style::Style>(fileSource, pixelRatio)), + style(std::make_unique<style::Style>(pixelRatio, fileSourceOptions)), annotationManager(*style) { style->impl->setObserver(this); diff --git a/src/mbgl/map/map_impl.hpp b/src/mbgl/map/map_impl.hpp index af64d8c0f6..331ae7a588 100644 --- a/src/mbgl/map/map_impl.hpp +++ b/src/mbgl/map/map_impl.hpp @@ -5,9 +5,9 @@ #include <mbgl/map/map_observer.hpp> #include <mbgl/map/mode.hpp> #include <mbgl/map/transform.hpp> +#include <mbgl/platform/factory.hpp> #include <mbgl/renderer/renderer_frontend.hpp> #include <mbgl/renderer/renderer_observer.hpp> -#include <mbgl/storage/file_source.hpp> #include <mbgl/style/observer.hpp> #include <mbgl/style/source.hpp> #include <mbgl/style/style.hpp> @@ -28,14 +28,15 @@ public: Impl(Map&, RendererFrontend&, MapObserver&, - FileSource&, Size size, float pixelRatio, MapMode, ViewportMode, - bool crossSourceCollisions); + bool crossSourceCollisions, + + const FileSourceOptions& fileSourceOptions); ~Impl() final; @@ -57,7 +58,9 @@ public: Map& map; MapObserver& observer; RendererFrontend& rendererFrontend; - FileSource& fileSource; + + // Keeps a reference to the initialized file source. + std::shared_ptr<FileSource> fileSource; Transform transform; diff --git a/src/mbgl/map/map_options.cpp b/src/mbgl/map/map_options.cpp index 34586f364c..90f81d4b36 100644 --- a/src/mbgl/map/map_options.cpp +++ b/src/mbgl/map/map_options.cpp @@ -36,32 +36,6 @@ ViewportMode MapOptions::viewportMode() const { return impl_->viewportMode; } -MapOptions& MapOptions::withCachePath(std::string path) { - impl_->cachePath = std::move(path); - return *this; -} - -const std::string& MapOptions::cachePath() const { - return impl_->cachePath; -} - -MapOptions& MapOptions::withAssetRoot(std::string path) { - impl_->assetRoot = std::move(path); - return *this; -} - -const std::string& MapOptions::assetRoot() const { - return impl_->assetRoot; -} - -MapOptions& MapOptions::withMaximumCacheSize(uint64_t size) { - impl_->maximumSize = size; - return *this; -} - -uint64_t MapOptions::maximumCacheSize() const { - return impl_->maximumSize; -} MapOptions& MapOptions::withCrossSourceCollisions(bool enableCollisions) { impl_->crossSourceCollisions = enableCollisions; diff --git a/src/mbgl/platform/factory.cpp b/src/mbgl/platform/factory.cpp new file mode 100644 index 0000000000..6f595f9866 --- /dev/null +++ b/src/mbgl/platform/factory.cpp @@ -0,0 +1,27 @@ +#include <mbgl/platform/factory.hpp> +#include <mbgl/storage/default_file_source.hpp> + +namespace mbgl { +namespace platform { + +std::shared_ptr<FileSource> Factory::sharedFileSource(const FileSourceOptions& options, std::shared_ptr<FileSource> initial) { + static std::weak_ptr<FileSource> weak; + + if (initial) { + // We can only assign a custom initial value if the weak pointer object has zero references. + assert(weak.use_count() == 0); + weak = initial; + } + + std::shared_ptr<FileSource> strong = weak.lock(); + if (!strong) { + auto defaultFileSource = std::make_shared<DefaultFileSource>(options.cachePath(), options.assetRoot(), options.maximumCacheSize()); + defaultFileSource->setAccessToken(options.accessToken()); + weak = strong = defaultFileSource; + } + + return strong; +} + +} // namespace platform +} // namespace mbgl diff --git a/src/mbgl/renderer/renderer.cpp b/src/mbgl/renderer/renderer.cpp index c8be1d16ef..e5339326dd 100644 --- a/src/mbgl/renderer/renderer.cpp +++ b/src/mbgl/renderer/renderer.cpp @@ -9,12 +9,12 @@ namespace mbgl { Renderer::Renderer(RendererBackend& backend, float pixelRatio_, - FileSource& fileSource_, + const FileSourceOptions& fileSourceOptions, GLContextMode contextMode_, const optional<std::string> programCacheDir_, const optional<std::string> localFontFamily_) - : impl(std::make_unique<Impl>(backend, pixelRatio_, fileSource_, - contextMode_, std::move(programCacheDir_), std::move(localFontFamily_))) { + : impl(std::make_unique<Impl>(backend, pixelRatio_, + contextMode_, std::move(programCacheDir_), std::move(localFontFamily_), fileSourceOptions)) { } Renderer::~Renderer() { diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index bfd518c11b..2ec271a444 100644 --- a/src/mbgl/renderer/renderer_impl.cpp +++ b/src/mbgl/renderer/renderer_impl.cpp @@ -1,5 +1,6 @@ #include <mbgl/annotation/annotation_manager.hpp> #include <mbgl/layermanager/layer_manager.hpp> +#include <mbgl/platform/factory.hpp> #include <mbgl/renderer/renderer_impl.hpp> #include <mbgl/renderer/renderer_backend.hpp> #include <mbgl/renderer/renderer_observer.hpp> @@ -37,17 +38,17 @@ static RendererObserver& nullObserver() { Renderer::Impl::Impl(RendererBackend& backend_, float pixelRatio_, - FileSource& fileSource_, GLContextMode contextMode_, const optional<std::string> programCacheDir_, - const optional<std::string> localFontFamily_) + const optional<std::string> localFontFamily_, + const FileSourceOptions& fileSourceOptions) : backend(backend_) - , fileSource(fileSource_) , observer(&nullObserver()) , contextMode(contextMode_) , pixelRatio(pixelRatio_) , programCacheDir(programCacheDir_) - , glyphManager(std::make_unique<GlyphManager>(fileSource, std::make_unique<LocalGlyphRasterizer>(localFontFamily_))) + , fileSource(platform::Factory::sharedFileSource(fileSourceOptions)) + , glyphManager(std::make_unique<GlyphManager>(fileSourceOptions, std::make_unique<LocalGlyphRasterizer>(localFontFamily_))) , imageManager(std::make_unique<ImageManager>()) , lineAtlas(std::make_unique<LineAtlas>(Size{ 256, 512 })) , imageImpls(makeMutable<std::vector<Immutable<style::Image::Impl>>>()) @@ -107,9 +108,9 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { const TileParameters tileParameters { updateParameters.pixelRatio, + fileSource, updateParameters.debugOptions, updateParameters.transformState, - fileSource, updateParameters.mode, updateParameters.annotationManager, *imageManager, diff --git a/src/mbgl/renderer/renderer_impl.hpp b/src/mbgl/renderer/renderer_impl.hpp index d820a50789..ded312527a 100644 --- a/src/mbgl/renderer/renderer_impl.hpp +++ b/src/mbgl/renderer/renderer_impl.hpp @@ -28,6 +28,7 @@ class RenderStaticData; class RenderedQueryOptions; class SourceQueryOptions; class FileSource; +class FileSourceOptions; class GlyphManager; class ImageManager; class LineAtlas; @@ -36,8 +37,8 @@ class CrossTileSymbolIndex; class Renderer::Impl : public GlyphManagerObserver, public RenderSourceObserver{ public: - Impl(RendererBackend&, float pixelRatio_, FileSource&, GLContextMode, - const optional<std::string> programCacheDir, const optional<std::string> localFontFamily); + Impl(RendererBackend&, float pixelRatio_, GLContextMode, + const optional<std::string> programCacheDir, const optional<std::string> localFontFamily, const FileSourceOptions&); ~Impl() final; void markContextLost() { @@ -89,7 +90,6 @@ private: friend class Renderer; RendererBackend& backend; - FileSource& fileSource; RendererObserver* observer; @@ -107,6 +107,8 @@ private: ZoomHistory zoomHistory; TransformState transformState; + std::shared_ptr<FileSource> fileSource; + std::unique_ptr<GlyphManager> glyphManager; std::unique_ptr<ImageManager> imageManager; std::unique_ptr<LineAtlas> lineAtlas; diff --git a/src/mbgl/renderer/tile_parameters.hpp b/src/mbgl/renderer/tile_parameters.hpp index cbe8dfb3ba..9af7ceb736 100644 --- a/src/mbgl/renderer/tile_parameters.hpp +++ b/src/mbgl/renderer/tile_parameters.hpp @@ -2,10 +2,12 @@ #include <mbgl/map/mode.hpp> +#include <memory> + namespace mbgl { -class TransformState; class FileSource; +class TransformState; class AnnotationManager; class ImageManager; class GlyphManager; @@ -13,9 +15,9 @@ class GlyphManager; class TileParameters { public: const float pixelRatio; + std::shared_ptr<FileSource> fileSource; const MapDebugOptions debugOptions; const TransformState& transformState; - FileSource& fileSource; const MapMode mode; AnnotationManager& annotationManager; ImageManager& imageManager; diff --git a/src/mbgl/sprite/sprite_loader.cpp b/src/mbgl/sprite/sprite_loader.cpp index d38d7a2715..856e9c69a2 100644 --- a/src/mbgl/sprite/sprite_loader.cpp +++ b/src/mbgl/sprite/sprite_loader.cpp @@ -12,6 +12,7 @@ #include <mbgl/storage/response.hpp> #include <mbgl/actor/actor.hpp> #include <mbgl/actor/scheduler.hpp> +#include <mbgl/platform/factory.hpp> #include <cassert> @@ -33,14 +34,15 @@ struct SpriteLoader::Loader { Actor<SpriteLoaderWorker> worker; }; -SpriteLoader::SpriteLoader(float pixelRatio_) +SpriteLoader::SpriteLoader(float pixelRatio_, const FileSourceOptions& fileSourceOptions) : pixelRatio(pixelRatio_) + , fileSource(platform::Factory::sharedFileSource(fileSourceOptions)) , observer(&nullObserver) { } SpriteLoader::~SpriteLoader() = default; -void SpriteLoader::load(const std::string& url, FileSource& fileSource) { +void SpriteLoader::load(const std::string& url) { if (url.empty()) { // Treat a non-existent sprite as a successfully loaded empty sprite. observer->onSpriteLoaded({}); @@ -49,7 +51,7 @@ void SpriteLoader::load(const std::string& url, FileSource& fileSource) { loader = std::make_unique<Loader>(*this); - loader->jsonRequest = fileSource.request(Resource::spriteJSON(url, pixelRatio), [this](Response res) { + loader->jsonRequest = fileSource->request(Resource::spriteJSON(url, pixelRatio), [this](Response res) { if (res.error) { observer->onSpriteError(std::make_exception_ptr(std::runtime_error(res.error->message))); } else if (res.notModified) { @@ -64,7 +66,7 @@ void SpriteLoader::load(const std::string& url, FileSource& fileSource) { } }); - loader->spriteRequest = fileSource.request(Resource::spriteImage(url, pixelRatio), [this](Response res) { + loader->spriteRequest = fileSource->request(Resource::spriteImage(url, pixelRatio), [this](Response res) { if (res.error) { observer->onSpriteError(std::make_exception_ptr(std::runtime_error(res.error->message))); } else if (res.notModified) { diff --git a/src/mbgl/sprite/sprite_loader.hpp b/src/mbgl/sprite/sprite_loader.hpp index 0b7d37fa14..e9b9c12616 100644 --- a/src/mbgl/sprite/sprite_loader.hpp +++ b/src/mbgl/sprite/sprite_loader.hpp @@ -13,14 +13,16 @@ namespace mbgl { class FileSource; +class FileSourceOptions; + class SpriteLoaderObserver; class SpriteLoader : public util::noncopyable { public: - SpriteLoader(float pixelRatio); + SpriteLoader(float pixelRatio, const FileSourceOptions&); ~SpriteLoader(); - void load(const std::string& url, FileSource&); + void load(const std::string& url); void setObserver(SpriteLoaderObserver*); @@ -36,6 +38,7 @@ private: struct Loader; std::unique_ptr<Loader> loader; + std::shared_ptr<FileSource> fileSource; SpriteLoaderObserver* observer = nullptr; }; diff --git a/src/mbgl/style/sources/custom_geometry_source.cpp b/src/mbgl/style/sources/custom_geometry_source.cpp index 6e9d8d65fb..546feacb8f 100644 --- a/src/mbgl/style/sources/custom_geometry_source.cpp +++ b/src/mbgl/style/sources/custom_geometry_source.cpp @@ -22,7 +22,7 @@ const CustomGeometrySource::Impl& CustomGeometrySource::impl() const { return static_cast<const CustomGeometrySource::Impl&>(*baseImpl); } -void CustomGeometrySource::loadDescription(FileSource&) { +void CustomGeometrySource::loadDescription(std::shared_ptr<FileSource>) { baseImpl = makeMutable<CustomGeometrySource::Impl>(impl(), loader->self()); loaded = true; } diff --git a/src/mbgl/style/sources/geojson_source.cpp b/src/mbgl/style/sources/geojson_source.cpp index 4e3478322d..cb83b75ec7 100644 --- a/src/mbgl/style/sources/geojson_source.cpp +++ b/src/mbgl/style/sources/geojson_source.cpp @@ -40,7 +40,7 @@ optional<std::string> GeoJSONSource::getURL() const { return url; } -void GeoJSONSource::loadDescription(FileSource& fileSource) { +void GeoJSONSource::loadDescription(std::shared_ptr<FileSource> fileSource) { if (!url) { loaded = true; return; @@ -50,7 +50,7 @@ void GeoJSONSource::loadDescription(FileSource& fileSource) { return; } - req = fileSource.request(Resource::source(*url), [this](Response res) { + req = fileSource->request(Resource::source(*url), [this](Response res) { if (res.error) { observer->onSourceError( *this, std::make_exception_ptr(std::runtime_error(res.error->message))); diff --git a/src/mbgl/style/sources/image_source.cpp b/src/mbgl/style/sources/image_source.cpp index fa268da0ef..da046ba882 100644 --- a/src/mbgl/style/sources/image_source.cpp +++ b/src/mbgl/style/sources/image_source.cpp @@ -51,7 +51,7 @@ optional<std::string> ImageSource::getURL() const { return url; } -void ImageSource::loadDescription(FileSource& fileSource) { +void ImageSource::loadDescription(std::shared_ptr<FileSource> fileSource) { if (!url) { loaded = true; } @@ -61,7 +61,7 @@ void ImageSource::loadDescription(FileSource& fileSource) { } const Resource imageResource { Resource::Image, *url, {} }; - req = fileSource.request(imageResource, [this](Response res) { + req = fileSource->request(imageResource, [this](Response res) { if (res.error) { observer->onSourceError(*this, std::make_exception_ptr(std::runtime_error(res.error->message))); } else if (res.notModified) { diff --git a/src/mbgl/style/sources/raster_source.cpp b/src/mbgl/style/sources/raster_source.cpp index c2f96dbd55..5faa6a0335 100644 --- a/src/mbgl/style/sources/raster_source.cpp +++ b/src/mbgl/style/sources/raster_source.cpp @@ -11,8 +11,8 @@ namespace mbgl { namespace style { RasterSource::RasterSource(std::string id, variant<std::string, Tileset> urlOrTileset_, uint16_t tileSize, SourceType sourceType) - : Source(makeMutable<Impl>(sourceType, std::move(id), tileSize)), - urlOrTileset(std::move(urlOrTileset_)) { + : Source(makeMutable<Impl>(sourceType, std::move(id), tileSize)) + , urlOrTileset(std::move(urlOrTileset_)) { } RasterSource::~RasterSource() = default; @@ -37,7 +37,7 @@ uint16_t RasterSource::getTileSize() const { return impl().getTileSize(); } -void RasterSource::loadDescription(FileSource& fileSource) { +void RasterSource::loadDescription(std::shared_ptr<FileSource> fileSource) { if (urlOrTileset.is<Tileset>()) { baseImpl = makeMutable<Impl>(impl(), urlOrTileset.get<Tileset>()); loaded = true; @@ -49,7 +49,7 @@ void RasterSource::loadDescription(FileSource& fileSource) { } const std::string& url = urlOrTileset.get<std::string>(); - req = fileSource.request(Resource::source(url), [this, url](Response res) { + req = fileSource->request(Resource::source(url), [this, url](Response res) { if (res.error) { observer->onSourceError(*this, std::make_exception_ptr(std::runtime_error(res.error->message))); } else if (res.notModified) { diff --git a/src/mbgl/style/sources/vector_source.cpp b/src/mbgl/style/sources/vector_source.cpp index 6cede8fae9..b0152974da 100644 --- a/src/mbgl/style/sources/vector_source.cpp +++ b/src/mbgl/style/sources/vector_source.cpp @@ -12,8 +12,8 @@ namespace mbgl { namespace style { VectorSource::VectorSource(std::string id, variant<std::string, Tileset> urlOrTileset_) - : Source(makeMutable<Impl>(std::move(id))), - urlOrTileset(std::move(urlOrTileset_)) { + : Source(makeMutable<Impl>(std::move(id))) + , urlOrTileset(std::move(urlOrTileset_)) { } VectorSource::~VectorSource() = default; @@ -34,7 +34,7 @@ optional<std::string> VectorSource::getURL() const { return urlOrTileset.get<std::string>(); } -void VectorSource::loadDescription(FileSource& fileSource) { +void VectorSource::loadDescription(std::shared_ptr<FileSource> fileSource) { if (urlOrTileset.is<Tileset>()) { baseImpl = makeMutable<Impl>(impl(), urlOrTileset.get<Tileset>()); loaded = true; @@ -46,7 +46,7 @@ void VectorSource::loadDescription(FileSource& fileSource) { } const std::string& url = urlOrTileset.get<std::string>(); - req = fileSource.request(Resource::source(url), [this, url](Response res) { + req = fileSource->request(Resource::source(url), [this, url](Response res) { if (res.error) { observer->onSourceError(*this, std::make_exception_ptr(std::runtime_error(res.error->message))); } else if (res.notModified) { diff --git a/src/mbgl/style/style.cpp b/src/mbgl/style/style.cpp index 783c850097..b70b7ee3be 100644 --- a/src/mbgl/style/style.cpp +++ b/src/mbgl/style/style.cpp @@ -8,8 +8,8 @@ namespace mbgl { namespace style { -Style::Style(FileSource& fileSource, float pixelRatio) - : impl(std::make_unique<Impl>(fileSource, pixelRatio)) { +Style::Style(float pixelRatio, const FileSourceOptions& fileSourceOptions) + : impl(std::make_unique<Impl>(pixelRatio, fileSourceOptions)) { } Style::~Style() = default; diff --git a/src/mbgl/style/style_impl.cpp b/src/mbgl/style/style_impl.cpp index ebddfbcb22..deb77e2ed6 100644 --- a/src/mbgl/style/style_impl.cpp +++ b/src/mbgl/style/style_impl.cpp @@ -1,3 +1,4 @@ +#include <mbgl/platform/factory.hpp> #include <mbgl/style/style_impl.hpp> #include <mbgl/style/observer.hpp> #include <mbgl/style/source_impl.hpp> @@ -27,9 +28,9 @@ namespace style { static Observer nullObserver; -Style::Impl::Impl(FileSource& fileSource_, float pixelRatio) - : fileSource(fileSource_), - spriteLoader(std::make_unique<SpriteLoader>(pixelRatio)), +Style::Impl::Impl(float pixelRatio, const FileSourceOptions& fileSourceOptions) + : fileSource(platform::Factory::sharedFileSource(fileSourceOptions)), + spriteLoader(std::make_unique<SpriteLoader>(pixelRatio, fileSourceOptions)), light(std::make_unique<Light>()), observer(&nullObserver) { spriteLoader->setObserver(this); @@ -53,7 +54,7 @@ void Style::Impl::loadURL(const std::string& url_) { loaded = false; url = url_; - styleRequest = fileSource.request(Resource::style(url), [this](Response res) { + styleRequest = fileSource->request(Resource::style(url), [this](Response res) { // Don't allow a loaded, mutated style to be overwritten with a new version. if (mutated && loaded) { return; @@ -110,7 +111,7 @@ void Style::Impl::parse(const std::string& json_) { setLight(std::make_unique<Light>(parser.light)); spriteLoaded = false; - spriteLoader->load(parser.spriteURL, fileSource); + spriteLoader->load(parser.spriteURL); glyphURL = parser.glyphURL; loaded = true; diff --git a/src/mbgl/style/style_impl.hpp b/src/mbgl/style/style_impl.hpp index 4c56f6785b..1f62685c34 100644 --- a/src/mbgl/style/style_impl.hpp +++ b/src/mbgl/style/style_impl.hpp @@ -25,9 +25,9 @@ namespace mbgl { -class FileSource; class AsyncRequest; class SpriteLoader; +class FileSourceOptions; namespace style { @@ -37,7 +37,7 @@ class Style::Impl : public SpriteLoaderObserver, public LightObserver, public util::noncopyable { public: - Impl(FileSource&, float pixelRatio); + Impl(float pixelRatio, const FileSourceOptions&); ~Impl() override; void loadJSON(const std::string&); @@ -97,7 +97,7 @@ public: private: void parse(const std::string&); - FileSource& fileSource; + std::shared_ptr<FileSource> fileSource; std::string url; std::string json; diff --git a/src/mbgl/text/glyph_manager.cpp b/src/mbgl/text/glyph_manager.cpp index b947ef72c8..da1d774797 100644 --- a/src/mbgl/text/glyph_manager.cpp +++ b/src/mbgl/text/glyph_manager.cpp @@ -1,7 +1,8 @@ +#include <mbgl/platform/factory.hpp> #include <mbgl/text/glyph_manager.hpp> #include <mbgl/text/glyph_manager_observer.hpp> #include <mbgl/text/glyph_pbf.hpp> -#include <mbgl/storage/file_source.hpp> +#include <mbgl/storage/default_file_source.hpp> #include <mbgl/storage/resource.hpp> #include <mbgl/storage/response.hpp> #include <mbgl/util/tiny_sdf.hpp> @@ -11,8 +12,8 @@ namespace mbgl { static GlyphManagerObserver nullObserver; -GlyphManager::GlyphManager(FileSource& fileSource_, std::unique_ptr<LocalGlyphRasterizer> localGlyphRasterizer_) - : fileSource(fileSource_), +GlyphManager::GlyphManager(const FileSourceOptions& options, std::unique_ptr<LocalGlyphRasterizer> localGlyphRasterizer_) + : fileSource(platform::Factory::sharedFileSource(options)), observer(&nullObserver), localGlyphRasterizer(std::move(localGlyphRasterizer_)) { } @@ -70,7 +71,7 @@ void GlyphManager::requestRange(GlyphRequest& request, const FontStack& fontStac return; } - request.req = fileSource.request(Resource::glyphs(glyphURL, fontStack, range), [this, fontStack, range](Response res) { + request.req = static_cast<DefaultFileSource*>(fileSource.get())->request(Resource::glyphs(glyphURL, fontStack, range), [this, fontStack, range](Response res) { processResponse(res, fontStack, range); }); } diff --git a/src/mbgl/text/glyph_manager.hpp b/src/mbgl/text/glyph_manager.hpp index 831d84719c..d1c05482e5 100644 --- a/src/mbgl/text/glyph_manager.hpp +++ b/src/mbgl/text/glyph_manager.hpp @@ -1,5 +1,6 @@ #pragma once +#include <mbgl/storage/file_source_options.hpp> #include <mbgl/text/glyph.hpp> #include <mbgl/text/glyph_manager_observer.hpp> #include <mbgl/text/glyph_range.hpp> @@ -8,6 +9,7 @@ #include <mbgl/util/font_stack.hpp> #include <mbgl/util/immutable.hpp> +#include <memory> #include <string> #include <unordered_map> @@ -25,7 +27,7 @@ public: class GlyphManager : public util::noncopyable { public: - GlyphManager(FileSource&, std::unique_ptr<LocalGlyphRasterizer> = std::make_unique<LocalGlyphRasterizer>(optional<std::string>())); + GlyphManager(const FileSourceOptions&, std::unique_ptr<LocalGlyphRasterizer> = std::make_unique<LocalGlyphRasterizer>(optional<std::string>())); ~GlyphManager(); // Workers send a `getGlyphs` message to the main thread once they have determined @@ -48,7 +50,7 @@ public: private: Glyph generateLocalSDF(const FontStack& fontStack, GlyphID glyphID); - FileSource& fileSource; + std::shared_ptr<FileSource> fileSource; std::string glyphURL; struct GlyphRequest { diff --git a/src/mbgl/tile/tile_loader.hpp b/src/mbgl/tile/tile_loader.hpp index 92ca74330f..0e96c5eb25 100644 --- a/src/mbgl/tile/tile_loader.hpp +++ b/src/mbgl/tile/tile_loader.hpp @@ -50,7 +50,7 @@ private: T& tile; TileNecessity necessity; Resource resource; - FileSource& fileSource; + std::shared_ptr<FileSource> fileSource; std::unique_ptr<AsyncRequest> request; }; diff --git a/src/mbgl/tile/tile_loader_impl.hpp b/src/mbgl/tile/tile_loader_impl.hpp index 5835858d1a..0bb40434e7 100644 --- a/src/mbgl/tile/tile_loader_impl.hpp +++ b/src/mbgl/tile/tile_loader_impl.hpp @@ -1,9 +1,10 @@ #pragma once +#include <mbgl/platform/factory.hpp> #include <mbgl/tile/tile_loader.hpp> -#include <mbgl/storage/file_source.hpp> #include <mbgl/renderer/tile_parameters.hpp> #include <mbgl/util/tileset.hpp> +#include <mbgl/storage/default_file_source.hpp> #include <cassert> @@ -27,7 +28,7 @@ TileLoader<T>::TileLoader(T& tile_, Resource::LoadingMethod::CacheOnly)), fileSource(parameters.fileSource) { assert(!request); - if (fileSource.supportsCacheOnlyRequests()) { + if (std::static_pointer_cast<DefaultFileSource>(fileSource)->supportsCacheOnlyRequests()) { // When supported, the first request is always optional, even if the TileLoader // is marked as required. That way, we can let the first optional request continue // to load when the TileLoader is later changed from required to optional. If we @@ -52,7 +53,7 @@ void TileLoader<T>::loadFromCache() { assert(!request); resource.loadingMethod = Resource::LoadingMethod::CacheOnly; - request = fileSource.request(resource, [this](Response res) { + request = fileSource->request(resource, [this](Response res) { request.reset(); tile.setTriedCache(); @@ -118,7 +119,7 @@ void TileLoader<T>::loadFromNetwork() { // Instead of using Resource::LoadingMethod::All, we're first doing a CacheOnly, and then a // NetworkOnly request. resource.loadingMethod = Resource::LoadingMethod::NetworkOnly; - request = fileSource.request(resource, [this](Response res) { loadedData(res); }); + request = fileSource->request(resource, [this](Response res) { loadedData(res); }); } } // namespace mbgl |