[core] Clear tiles when GeoJSON data changes
In tile and static mode clear tiles when data changes in order to avoid render tests being flaky.
This commit is contained in:
@@ -85,27 +85,25 @@ void RenderGeoJSONSource::update(Immutable<style::Source::Impl> baseImpl_,
|
||||
enabled = needsRendering;
|
||||
|
||||
auto data_ = impl().getData().lock();
|
||||
if (!data_) {
|
||||
// In Continuous mode, keep the existing tiles if the new data_ is not
|
||||
// yet available, thus providing smart style transitions without flickering.
|
||||
// In other modes, allow clearing the tile pyramid first, before the early
|
||||
// return in order to avoid render tests being flaky.
|
||||
if (parameters.mode != MapMode::Continuous) tilePyramid.clearAll();
|
||||
return;
|
||||
}
|
||||
|
||||
if (data.lock() != data_) {
|
||||
data = data_;
|
||||
tilePyramid.reduceMemoryUse();
|
||||
const uint8_t maxZ = impl().getZoomRange().max;
|
||||
for (const auto& pair : tilePyramid.getTiles()) {
|
||||
if (pair.first.canonical.z <= maxZ) {
|
||||
static_cast<GeoJSONTile*>(pair.second.get())
|
||||
->updateData(data_->getTile(pair.first.canonical), needsRelayout);
|
||||
if (parameters.mode != MapMode::Continuous) {
|
||||
// Clearing the tile pyramid in order to avoid render tests being flaky.
|
||||
tilePyramid.clearAll();
|
||||
} else if (data_) {
|
||||
tilePyramid.reduceMemoryUse();
|
||||
const uint8_t maxZ = impl().getZoomRange().max;
|
||||
for (const auto& pair : tilePyramid.getTiles()) {
|
||||
if (pair.first.canonical.z <= maxZ) {
|
||||
static_cast<GeoJSONTile*>(pair.second.get())
|
||||
->updateData(data_->getTile(pair.first.canonical), needsRelayout);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!data_) return;
|
||||
|
||||
tilePyramid.update(layers,
|
||||
needsRendering,
|
||||
needsRelayout,
|
||||
|
||||
Reference in New Issue
Block a user