prepareTiles method
Prepares all tiles for this sub-file by processing the POIs and ways in parallel isolates.
Implementation
/// parallel isolates.
Future<void> prepareTiles(bool debugFile, double maxDeviationPixel, int instanceCount) async {
var session = PerformanceProfiler().startSession(category: "SubfileCreator.prepareTiles");
List<IsolateTileConstructor> tileConstructor = [];
// each instance must process this number of consecutive tiles
final int iterationCount = 20;
for (int i = 0; i < instanceCount; ++i) {
tileConstructor.add(
await IsolateTileConstructor.create(debugFile, _poiinfos, _wayinfos, zoomlevelRange, maxDeviationPixel, Math.min(_maxX - _minX + 1, iterationCount)),
);
}
// the isolates now hove the infos, we can remove them from memory here
_poiinfos.clear();
_wayinfos.clear();
List<Future> futures = [];
int current = 0;
int counter = 0;
await _processAsync(
"preparing tiles",
(tile) async {
Future future = _future(tileConstructor[current], tile);
futures.add(future);
++counter;
if (counter >= iterationCount) {
counter = 0;
++current;
current = current % instanceCount;
}
},
(int processedTiles, int sumTiles) async {
if (futures.length > 1000 || processedTiles == sumTiles) {
await Future.wait(futures);
futures.clear();
tileBuffer.cacheToDisk(processedTiles, sumTiles);
}
},
);
await tileBuffer.writeComplete();
for (int i = 0; i < instanceCount; ++i) {
tileConstructor[i].dispose();
}
tileConstructor.clear();
session.complete();
}