prepareTiles method

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

Implementation

Future<void> prepareTiles(bool debugFile, double maxDeviationPixel, int instanceCount) async {
  Timing timing = Timing(log: _log);
  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();
  timing.done(10000, "prepare tiles for baseZoomLevel $baseZoomLevel completed");
}