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:
Thiago Marcos P. Santos
2015-07-15 16:10:09 +03:00
parent 7d4349e308
commit c6e58515fc
5 changed files with 2 additions and 19 deletions

View File

@@ -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);
});
}

View File

@@ -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;

View File

@@ -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);

View File

@@ -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;

View File

@@ -23,7 +23,6 @@ public:
~VectorTileData();
Bucket* getBucket(const StyleLayer&) override;
size_t countBuckets() const;
void request(float pixelRatio,
const std::function<void()>& callback);