diff options
-rw-r--r-- | src/mbgl/tile/file_based_tile_source_impl.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/tile/tile_data.cpp | 5 | ||||
-rw-r--r-- | src/mbgl/tile/tile_data.hpp | 10 | ||||
-rw-r--r-- | test/algorithm/mock.hpp | 8 |
4 files changed, 24 insertions, 1 deletions
diff --git a/src/mbgl/tile/file_based_tile_source_impl.hpp b/src/mbgl/tile/file_based_tile_source_impl.hpp index 4a11728332..b8a69e3f60 100644 --- a/src/mbgl/tile/file_based_tile_source_impl.hpp +++ b/src/mbgl/tile/file_based_tile_source_impl.hpp @@ -40,6 +40,8 @@ void FileBasedTileSource<T, I>::loadOptional() { request = fileSource.request(resource, [this](Response res) { request.reset(); + T::tileData.setTriedOptional(); + if (res.error && res.error->reason == Response::Error::Reason::NotFound) { // When the optional request could not be satisfied, don't treat it as an error. // Instead, we make sure that the next request knows that there has been an optional diff --git a/src/mbgl/tile/tile_data.cpp b/src/mbgl/tile/tile_data.cpp index a5822b2c17..a64de4d1eb 100644 --- a/src/mbgl/tile/tile_data.cpp +++ b/src/mbgl/tile/tile_data.cpp @@ -24,6 +24,11 @@ void TileData::setTileSource(std::unique_ptr<TileSource> tileSource_) { tileSource = std::move(tileSource_); } +void TileData::setTriedOptional() { + triedOptional = true; + observer->onNeedsRepaint(); +} + void TileData::dumpDebugLogs() const { Log::Info(Event::General, "TileData::id: %s", util::toString(id).c_str()); Log::Info(Event::General, "TileData::renderable: %s", isRenderable() ? "yes" : "no"); diff --git a/src/mbgl/tile/tile_data.hpp b/src/mbgl/tile/tile_data.hpp index c3877d0d63..d22e871185 100644 --- a/src/mbgl/tile/tile_data.hpp +++ b/src/mbgl/tile/tile_data.hpp @@ -50,6 +50,14 @@ public: const TransformState&, const optional<std::vector<std::string>>& layerIDs); + void setTriedOptional(); + + // Returns true when the tile source has received a first response, regardless of whether a load + // error occurred or actual data was loaded. + bool hasTriedOptional() const { + return triedOptional; + } + // Tile data considered "Renderable" can be used for rendering. Data in // partial state is still waiting for network resources but can also // be rendered, although layers will be missing. @@ -74,6 +82,8 @@ public: std::unique_ptr<DebugBucket> debugBucket; protected: + bool triedOptional = false; + enum class DataAvailability : uint8_t { // Still waiting for data to load or parse. None, diff --git a/test/algorithm/mock.hpp b/test/algorithm/mock.hpp index 28c78854be..ff58499303 100644 --- a/test/algorithm/mock.hpp +++ b/test/algorithm/mock.hpp @@ -29,11 +29,17 @@ struct MockBucket {}; struct MockTileData { MockTileData(const mbgl::OverscaledTileID& tileID_) : tileID(tileID_) {} - bool isRenderable() { + + bool hasTriedOptional() const { + return triedOptional; + } + + bool isRenderable() const { return renderable; } bool renderable = false; + bool triedOptional = false; const mbgl::OverscaledTileID tileID; }; |