prepareTiles method

Future<void> prepareTiles(
  1. bool debugFile,
  2. double maxDeviationPixel,
  3. int instanceCount
)

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