diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2016-05-25 20:52:19 +0200 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2016-05-25 21:51:25 +0200 |
commit | b4de5f472ae2e8d2b16ba7209184150117eec6bc (patch) | |
tree | 46dc0c900603198a5adddad478e2b8915de21ef0 /src/mbgl | |
parent | 6f1477f2d4aee46f41215d16dcc0a2755e4ae721 (diff) | |
download | qtlocation-mapboxgl-b4de5f472ae2e8d2b16ba7209184150117eec6bc.tar.gz |
[core] rename TileData::State to DataAvailability and make it private
Diffstat (limited to 'src/mbgl')
-rw-r--r-- | src/mbgl/renderer/debug_bucket.cpp | 9 | ||||
-rw-r--r-- | src/mbgl/renderer/debug_bucket.hpp | 7 | ||||
-rw-r--r-- | src/mbgl/renderer/painter_debug.cpp | 13 | ||||
-rw-r--r-- | src/mbgl/source/source.cpp | 3 | ||||
-rw-r--r-- | src/mbgl/style/style_bucket_parameters.hpp | 1 | ||||
-rw-r--r-- | src/mbgl/tile/raster_tile_data.cpp | 6 | ||||
-rw-r--r-- | src/mbgl/tile/tile_data.cpp | 15 | ||||
-rw-r--r-- | src/mbgl/tile/tile_data.hpp | 44 | ||||
-rw-r--r-- | src/mbgl/tile/tile_worker.hpp | 1 | ||||
-rw-r--r-- | src/mbgl/tile/vector_tile_data.cpp | 16 |
10 files changed, 55 insertions, 60 deletions
diff --git a/src/mbgl/renderer/debug_bucket.cpp b/src/mbgl/renderer/debug_bucket.cpp index 1ab9bd05ad..765d0c1e76 100644 --- a/src/mbgl/renderer/debug_bucket.cpp +++ b/src/mbgl/renderer/debug_bucket.cpp @@ -11,17 +11,20 @@ using namespace mbgl; DebugBucket::DebugBucket(const OverscaledTileID& id, - const TileData::State state_, + const bool renderable_, + const bool complete_, optional<Timestamp> modified_, optional<Timestamp> expires_, MapDebugOptions debugMode_) - : state(state_), + : renderable(renderable_), + complete(complete_), modified(std::move(modified_)), expires(std::move(expires_)), debugMode(debugMode_) { double baseline = 200; if (debugMode & MapDebugOptions::ParseStatus) { - const std::string text = util::toString(id) + " - " + TileData::StateToString(state); + const std::string text = util::toString(id) + " - " + + (complete ? "complete" : renderable ? "renderable" : "pending"); fontBuffer.addText(text.c_str(), 50, baseline, 5); baseline += 200; } diff --git a/src/mbgl/renderer/debug_bucket.hpp b/src/mbgl/renderer/debug_bucket.hpp index a5262ab1bf..f71d4cffee 100644 --- a/src/mbgl/renderer/debug_bucket.hpp +++ b/src/mbgl/renderer/debug_bucket.hpp @@ -16,7 +16,9 @@ class GLObjectStore; class DebugBucket : private util::noncopyable { public: - DebugBucket(const OverscaledTileID& id, TileData::State, + DebugBucket(const OverscaledTileID& id, + bool renderable, + bool complete, optional<Timestamp> modified, optional<Timestamp> expires, MapDebugOptions); @@ -24,7 +26,8 @@ public: void drawLines(PlainShader&, gl::GLObjectStore&); void drawPoints(PlainShader&, gl::GLObjectStore&); - const TileData::State state; + const bool renderable; + const bool complete; const optional<Timestamp> modified; const optional<Timestamp> expires; const MapDebugOptions debugMode; diff --git a/src/mbgl/renderer/painter_debug.cpp b/src/mbgl/renderer/painter_debug.cpp index d99bfbd22f..09dcbe3b90 100644 --- a/src/mbgl/renderer/painter_debug.cpp +++ b/src/mbgl/renderer/painter_debug.cpp @@ -29,11 +29,14 @@ void Painter::renderDebugText(TileData& tileData, const mat4 &matrix) { config.depthTest = GL_FALSE; - if (!tileData.debugBucket || tileData.debugBucket->state != tileData.getState() - || !(tileData.debugBucket->modified == tileData.modified) - || !(tileData.debugBucket->expires == tileData.expires) - || tileData.debugBucket->debugMode != frame.debugOptions) { - tileData.debugBucket = std::make_unique<DebugBucket>(tileData.id, tileData.getState(), tileData.modified, tileData.expires, frame.debugOptions); + if (!tileData.debugBucket || tileData.debugBucket->renderable != tileData.isRenderable() || + tileData.debugBucket->complete != tileData.isComplete() || + !(tileData.debugBucket->modified == tileData.modified) || + !(tileData.debugBucket->expires == tileData.expires) || + tileData.debugBucket->debugMode != frame.debugOptions) { + tileData.debugBucket = std::make_unique<DebugBucket>( + tileData.id, tileData.isRenderable(), tileData.isComplete(), tileData.modified, + tileData.expires, frame.debugOptions); } config.program = plainShader->getID(); diff --git a/src/mbgl/source/source.cpp b/src/mbgl/source/source.cpp index 9043bd1935..365ed9e6ee 100644 --- a/src/mbgl/source/source.cpp +++ b/src/mbgl/source/source.cpp @@ -307,8 +307,7 @@ bool Source::update(const StyleUpdateParameters& parameters) { for (auto& pair : tileDataMap) { const auto& dataTileID = pair.first; auto tileData = pair.second.get(); - if (parameters.shouldReparsePartialTiles && - tileData->getState() == TileData::State::partial) { + if (parameters.shouldReparsePartialTiles && tileData->isIncomplete()) { auto callback = std::bind(&Source::tileLoadingCallback, this, dataTileID, std::placeholders::_1, false); diff --git a/src/mbgl/style/style_bucket_parameters.hpp b/src/mbgl/style/style_bucket_parameters.hpp index 6234d5c301..17639afae7 100644 --- a/src/mbgl/style/style_bucket_parameters.hpp +++ b/src/mbgl/style/style_bucket_parameters.hpp @@ -5,6 +5,7 @@ #include <mbgl/style/filter.hpp> #include <functional> +#include <atomic> namespace mbgl { diff --git a/src/mbgl/tile/raster_tile_data.cpp b/src/mbgl/tile/raster_tile_data.cpp index b70cd1d836..29b7ca6af8 100644 --- a/src/mbgl/tile/raster_tile_data.cpp +++ b/src/mbgl/tile/raster_tile_data.cpp @@ -27,7 +27,7 @@ RasterTileData::RasterTileData(const OverscaledTileID& id_, modified = res.modified; expires = res.expires; } else if (res.noContent) { - state = State::parsed; + availableData = DataAvailability::All; modified = res.modified; expires = res.expires; workRequest.reset(); @@ -43,14 +43,14 @@ RasterTileData::RasterTileData(const OverscaledTileID& id_, std::exception_ptr error; if (result.is<std::unique_ptr<Bucket>>()) { - state = State::parsed; bucket = std::move(result.get<std::unique_ptr<Bucket>>()); } else { error = result.get<std::exception_ptr>(); - state = State::parsed; bucket.reset(); } + availableData = DataAvailability::All; + callback(error); }); } diff --git a/src/mbgl/tile/tile_data.cpp b/src/mbgl/tile/tile_data.cpp index 00cd073197..e23ae2a727 100644 --- a/src/mbgl/tile/tile_data.cpp +++ b/src/mbgl/tile/tile_data.cpp @@ -5,24 +5,15 @@ namespace mbgl { TileData::TileData(const OverscaledTileID& id_) - : id(id_), - state(State::loading) { + : id(id_) { } TileData::~TileData() = default; -const char* TileData::StateToString(const State state) { - switch (state) { - case TileData::State::loading : return "loading"; - case TileData::State::parsed : return "parsed"; - case TileData::State::partial : return "partial"; - default: return "<unknown>"; - } -} - void TileData::dumpDebugLogs() const { Log::Info(Event::General, "TileData::id: %s", util::toString(id).c_str()); - Log::Info(Event::General, "TileData::state: %s", TileData::StateToString(state)); + Log::Info(Event::General, "TileData::renderable: %s", isRenderable() ? "yes" : "no"); + Log::Info(Event::General, "TileData::complete: %s", isComplete() ? "yes" : "no"); } void TileData::queryRenderedFeatures( diff --git a/src/mbgl/tile/tile_data.hpp b/src/mbgl/tile/tile_data.hpp index d6d9f6289f..297bfabcae 100644 --- a/src/mbgl/tile/tile_data.hpp +++ b/src/mbgl/tile/tile_data.hpp @@ -23,26 +23,6 @@ class TransformState; class TileData : private util::noncopyable { public: - // loading: - // A request to the FileSource was made for the actual tile data and TileData - // is waiting for it to arrive. - // - // partial: - // TileData is partially parsed, some buckets are still waiting for dependencies - // to arrive, but it is good for rendering. Partial tiles can also be re-parsed, - // but might remain in the same state if dependencies are still missing. - // - // parsed: - // TileData is fully parsed and its contents won't change from this point. This - // is the only state which is safe to cache this object. - enum class State { - loading, - partial, - parsed, - }; - - static const char* StateToString(State); - TileData(const OverscaledTileID&); virtual ~TileData(); @@ -65,15 +45,14 @@ public: // partial state is still waiting for network resources but can also // be rendered, although layers will be missing. bool isRenderable() const { - return state == State::partial || state == State::parsed; + return availableData != DataAvailability::None; } bool isComplete() const { - return state == State::parsed; + return availableData == DataAvailability::All; } - - State getState() const { - return state; + bool isIncomplete() const { + return availableData == DataAvailability::Some; } void dumpDebugLogs() const; @@ -86,7 +65,20 @@ public: std::unique_ptr<DebugBucket> debugBucket; protected: - State state; + enum class DataAvailability : uint8_t { + // Still waiting for data to load or parse. + None, + + // TileData is partially parsed, some buckets are still waiting for dependencies + // to arrive, but it is good for rendering. Partial tiles can also be re-parsed, + // but might remain in the same state if dependencies are still missing. + Some, + + // TileData is fully parsed, and all buckets are available if they exist. + All, + }; + + DataAvailability availableData = DataAvailability::None; }; } // namespace mbgl diff --git a/src/mbgl/tile/tile_worker.hpp b/src/mbgl/tile/tile_worker.hpp index 6a60a17b07..83bf6c7f43 100644 --- a/src/mbgl/tile/tile_worker.hpp +++ b/src/mbgl/tile/tile_worker.hpp @@ -12,6 +12,7 @@ #include <memory> #include <mutex> #include <list> +#include <atomic> #include <unordered_map> namespace mbgl { diff --git a/src/mbgl/tile/vector_tile_data.cpp b/src/mbgl/tile/vector_tile_data.cpp index c4df292d9f..428c605f26 100644 --- a/src/mbgl/tile/vector_tile_data.cpp +++ b/src/mbgl/tile/vector_tile_data.cpp @@ -44,7 +44,7 @@ VectorTileData::VectorTileData(const OverscaledTileID& id_, if (!tile) { // This is a 404 response. We're treating these as empty tiles. workRequest.reset(); - state = State::parsed; + availableData = DataAvailability::All; buckets.clear(); callback(err); return; @@ -52,8 +52,8 @@ VectorTileData::VectorTileData(const OverscaledTileID& id_, // Mark the tile as pending again if it was complete before to prevent signaling a complete // state despite pending parse operations. - if (isComplete()) { - state = State::partial; + if (availableData == DataAvailability::All) { + availableData = DataAvailability::Some; } // Kick off a fresh parse of this tile. This happens when the tile is new, or @@ -66,7 +66,8 @@ VectorTileData::VectorTileData(const OverscaledTileID& id_, std::exception_ptr error; if (result.is<TileParseResultData>()) { auto& resultBuckets = result.get<TileParseResultData>(); - state = resultBuckets.complete ? State::parsed : State::partial; + availableData = + resultBuckets.complete ? DataAvailability::All : DataAvailability::Some; // Persist the configuration we just placed so that we can later check whether we need to // place again in case the configuration has changed. @@ -84,7 +85,7 @@ VectorTileData::VectorTileData(const OverscaledTileID& id_, } else { // This is triggered when parsing fails (e.g. due to an invalid vector tile) error = result.get<std::exception_ptr>(); - state = State::parsed; + availableData = DataAvailability::All; } callback(error); @@ -109,7 +110,8 @@ bool VectorTileData::parsePending(std::function<void(std::exception_ptr)> callba std::exception_ptr error; if (result.is<TileParseResultData>()) { auto& resultBuckets = result.get<TileParseResultData>(); - state = resultBuckets.complete ? State::parsed : State::partial; + availableData = + resultBuckets.complete ? DataAvailability::All : DataAvailability::Some; // Move over all buckets we received in this parse request, potentially overwriting // existing buckets in case we got a refresh parse. @@ -128,7 +130,7 @@ bool VectorTileData::parsePending(std::function<void(std::exception_ptr)> callba } else { error = result.get<std::exception_ptr>(); - state = State::parsed; + availableData = DataAvailability::All; } callback(error); |