When an tile is rendered the writing to disk can be done in background

concurrently to the rendering of the next tile.
This commit is contained in:
Sascha L. Teichmann
2017-03-06 15:43:30 +01:00
parent 2cba483d32
commit 6a1356f0eb
5 changed files with 118 additions and 58 deletions

View File

@ -30,10 +30,29 @@ func createTiles(
jobs chan blockPos,
done *sync.WaitGroup) {
defer done.Done()
defer btc.Close()
wFns := make(chan func() (bool, error))
// Writing already rendered tiles to disk can be done in background.
go func() {
for wfn := range wFns {
if _, err := wfn(); err != nil {
log.Printf("WARN: writing file failed: %v.\n", err)
}
}
}()
defer func() {
close(wFns)
btc.Close()
done.Done()
}()
for job := range jobs {
btc.CreateTile(job.x-1, job.z-1, job.i, job.j)
if err := btc.RenderArea(job.x-1, job.z-1); err != nil {
log.Printf("WARN: rendering failed: %v.\n", err)
continue
}
wFns <- btc.WriteFunc(job.i, job.j, nil)
}
}
@ -77,7 +96,7 @@ func createBaseLevel(
btc := common.NewBaseTileCreator(
client, colors, bg,
int16(yMin), int16(yMax),
transparent, baseDir, nil)
transparent, baseDir)
go createTiles(btc, jobs, &done)
}