Keep updating until all the tiles are State::parsed
This is needed because of a race that can occur now that we requests Glyphs from the Map Thread: The glyph might arrive at the moment a tile is being parsed and they won't be notified again of any new data, remaining forever at the partial state.
This commit is contained in:
@@ -240,14 +240,8 @@ bool Source::handlePartialTile(const TileID& id, Worker&) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// The signal is only emitted if there was an actual change on the tile. The
|
||||
// tile can be in a "partial" state waiting for resources and get reparsed on
|
||||
// the arrival of new resources that were needed by another tile.
|
||||
size_t bucketCount = data->countBuckets();
|
||||
return data->reparse([this, data, bucketCount]() {
|
||||
if (data->countBuckets() > bucketCount) {
|
||||
emitTileLoaded(false);
|
||||
}
|
||||
return data->reparse([this, data]() {
|
||||
emitTileLoaded(false);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -44,11 +44,6 @@ Bucket* TileWorker::getBucket(const StyleLayer& layer) const {
|
||||
return it->second.get();
|
||||
}
|
||||
|
||||
size_t TileWorker::countBuckets() const {
|
||||
std::lock_guard<std::mutex> lock(bucketsMutex);
|
||||
return buckets.size();
|
||||
}
|
||||
|
||||
TileParseResult TileWorker::parse(const GeometryTile& geometryTile) {
|
||||
partialParse = false;
|
||||
|
||||
|
||||
@@ -41,7 +41,6 @@ public:
|
||||
~TileWorker();
|
||||
|
||||
Bucket* getBucket(const StyleLayer&) const;
|
||||
size_t countBuckets() const;
|
||||
|
||||
TileParseResult parse(const GeometryTile&);
|
||||
void redoPlacement(float angle, bool collisionDebug);
|
||||
|
||||
@@ -98,10 +98,6 @@ Bucket* VectorTileData::getBucket(const StyleLayer& layer) {
|
||||
return tileWorker.getBucket(layer);
|
||||
}
|
||||
|
||||
size_t VectorTileData::countBuckets() const {
|
||||
return tileWorker.countBuckets();
|
||||
}
|
||||
|
||||
void VectorTileData::redoPlacement(float angle, bool collisionDebug) {
|
||||
if (angle == currentAngle && collisionDebug == currentCollisionDebug)
|
||||
return;
|
||||
|
||||
@@ -23,7 +23,6 @@ public:
|
||||
~VectorTileData();
|
||||
|
||||
Bucket* getBucket(const StyleLayer&) override;
|
||||
size_t countBuckets() const;
|
||||
|
||||
void request(float pixelRatio,
|
||||
const std::function<void()>& callback);
|
||||
|
||||
Reference in New Issue
Block a user