summaryrefslogtreecommitdiff
path: root/src/mbgl/tile/geometry_tile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/tile/geometry_tile.cpp')
-rw-r--r--src/mbgl/tile/geometry_tile.cpp49
1 files changed, 32 insertions, 17 deletions
diff --git a/src/mbgl/tile/geometry_tile.cpp b/src/mbgl/tile/geometry_tile.cpp
index fdbad8bd40..f097001af4 100644
--- a/src/mbgl/tile/geometry_tile.cpp
+++ b/src/mbgl/tile/geometry_tile.cpp
@@ -61,8 +61,7 @@ void GeometryTile::markObsolete() {
}
void GeometryTile::setError(std::exception_ptr err) {
- loaded = true;
- renderable = false;
+ logDebug("GeometryTile::setError");
observer->onTileError(*this, err);
}
@@ -71,6 +70,8 @@ void GeometryTile::setData(std::unique_ptr<const GeometryTileData> data_) {
// state despite pending parse operations.
pending = true;
+ logDebug("GeometryTile::setData");
+
++correlationID;
worker.invoke(&GeometryTileWorker::setData, std::move(data_), correlationID);
}
@@ -81,8 +82,13 @@ void GeometryTile::setPlacementConfig(const PlacementConfig& desiredConfig) {
}
// Mark the tile as pending again if it was complete before to prevent signaling a complete
- // state despite pending parse operations.
- pending = true;
+ // state despite pending parse operations. However, we only need to worry about this when we
+ // know that there's data, merely sending layers over doesn't qualify.
+ if (parsed) {
+ pending = true;
+ }
+
+ logDebug("GeometryTile::setPlacementConfig");
++correlationID;
requestedConfig = desiredConfig;
@@ -97,8 +103,13 @@ void GeometryTile::invokePlacement() {
void GeometryTile::setLayers(const std::vector<Immutable<Layer::Impl>>& layers) {
// Mark the tile as pending again if it was complete before to prevent signaling a complete
- // state despite pending parse operations.
- pending = true;
+ // state despite pending parse operations. However, we only need to worry about this when we
+ // know that there's data, merely sending layers over doesn't qualify.
+ if (parsed) {
+ pending = true;
+ }
+
+ logDebug("GeometryTile::setLayers");
std::vector<Immutable<Layer::Impl>> impls;
@@ -121,22 +132,19 @@ void GeometryTile::setLayers(const std::vector<Immutable<Layer::Impl>>& layers)
}
void GeometryTile::onLayout(LayoutResult result, const uint64_t resultCorrelationID) {
- loaded = true;
- renderable = true;
nonSymbolBuckets = std::move(result.nonSymbolBuckets);
featureIndex = std::move(result.featureIndex);
data = std::move(result.tileData);
collisionTile.reset();
+ parsed = true;
+ renderable = true;
+ // We're waiting on a onPlacement event for this correlation ID to reset the pending state.
(void)resultCorrelationID;
+ logDebug("GeometryTile::onLayout");
observer->onTileChanged(*this);
}
void GeometryTile::onPlacement(PlacementResult result, const uint64_t resultCorrelationID) {
- loaded = true;
- renderable = true;
- if (resultCorrelationID == correlationID) {
- pending = false;
- }
symbolBuckets = std::move(result.symbolBuckets);
collisionTile = std::move(result.collisionTile);
if (result.glyphAtlasImage) {
@@ -148,14 +156,21 @@ void GeometryTile::onPlacement(PlacementResult result, const uint64_t resultCorr
if (collisionTile.get()) {
lastYStretch = collisionTile->yStretch;
}
+ parsed = true;
+ renderable = true;
+ if (resultCorrelationID == correlationID) {
+ pending = false;
+ }
+ logDebug("GeometryTile::onPlacement");
observer->onTileChanged(*this);
}
void GeometryTile::onError(std::exception_ptr err, const uint64_t resultCorrelationID) {
- loaded = true;
- pending = false;
- (void)resultCorrelationID;
- renderable = false;
+ parsed = true;
+ if (resultCorrelationID == correlationID) {
+ pending = false;
+ }
+ logDebug("GeometryTile::onError");
observer->onTileError(*this, err);
}