summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2016-05-25 20:52:19 +0200
committerKonstantin Käfer <mail@kkaefer.com>2016-05-25 21:51:25 +0200
commitb4de5f472ae2e8d2b16ba7209184150117eec6bc (patch)
tree46dc0c900603198a5adddad478e2b8915de21ef0 /src
parent6f1477f2d4aee46f41215d16dcc0a2755e4ae721 (diff)
downloadqtlocation-mapboxgl-b4de5f472ae2e8d2b16ba7209184150117eec6bc.tar.gz
[core] rename TileData::State to DataAvailability and make it private
Diffstat (limited to 'src')
-rw-r--r--src/mbgl/renderer/debug_bucket.cpp9
-rw-r--r--src/mbgl/renderer/debug_bucket.hpp7
-rw-r--r--src/mbgl/renderer/painter_debug.cpp13
-rw-r--r--src/mbgl/source/source.cpp3
-rw-r--r--src/mbgl/style/style_bucket_parameters.hpp1
-rw-r--r--src/mbgl/tile/raster_tile_data.cpp6
-rw-r--r--src/mbgl/tile/tile_data.cpp15
-rw-r--r--src/mbgl/tile/tile_data.hpp44
-rw-r--r--src/mbgl/tile/tile_worker.hpp1
-rw-r--r--src/mbgl/tile/vector_tile_data.cpp16
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);