From 6eaea5b00c50db825ee7969f3fdda77c40a4cb52 Mon Sep 17 00:00:00 2001 From: HF Date: Mon, 20 Jun 2022 16:47:23 +0200 Subject: [PATCH] make tileserver better --- src/core/Tile.js | 26 +++++++++++++++----------- src/core/tileserver.js | 9 +++++---- src/workers/tilewriter.js | 1 + 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/core/Tile.js b/src/core/Tile.js index a0c9034..e40a5a9 100644 --- a/src/core/Tile.js +++ b/src/core/Tile.js @@ -90,9 +90,10 @@ function addIndexedSubtiletoTile( const [dx, dy] = cell; const chunkOffset = (dx + dy * subtilesInTile * TILE_SIZE) * TILE_SIZE; - const emptyR = palette.rgb[0]; - const emptyB = palette.rgb[1]; - const emptyG = palette.rgb[1]; + const { rgb } = palette; + const emptyR = rgb[0]; + const emptyB = rgb[1]; + const emptyG = rgb[1]; let pos = 0; let clr; @@ -102,9 +103,9 @@ function addIndexedSubtiletoTile( while (channelOffset < max) { if (pos < subtile.length) { clr = (subtile[pos++] & 0x3F) * 3; - buffer[channelOffset++] = palette.rgb[clr++]; - buffer[channelOffset++] = palette.rgb[clr++]; - buffer[channelOffset++] = palette.rgb[clr]; + buffer[channelOffset++] = rgb[clr++]; + buffer[channelOffset++] = rgb[clr++]; + buffer[channelOffset++] = rgb[clr]; } else { buffer[channelOffset++] = emptyR; buffer[channelOffset++] = emptyB; @@ -137,8 +138,9 @@ export async function createZoomTileFromChunk( canvas, canvasTileFolder, cell, + gPalette = null, ) { - const palette = new Palette(canvas.colors); + const palette = gPalette || new Palette(canvas.colors); const canvasSize = canvas.size; const [x, y] = cell; const maxTiledZoom = getMaxTiledZoom(canvasSize); @@ -221,8 +223,9 @@ export async function createZoomedTile( canvas, canvasTileFolder, cell, + gPalette = null, ) { - const palette = new Palette(canvas.colors); + const palette = gPalette || new Palette(canvas.colors); const tileRGBBuffer = new Uint8Array( TILE_SIZE * TILE_SIZE * TILE_ZOOM_LEVEL * TILE_ZOOM_LEVEL * 3, ); @@ -461,11 +464,11 @@ export async function initializeTiles( const filename = `${canvasTileFolder}/${zoom}/${cx}/${cy}.png`; if (force || !fs.existsSync(filename)) { const ret = await createZoomTileFromChunk( - canvasSize, canvasId, + canvas, canvasTileFolder, - palette, [cx, cy], + palette, ); if (ret) cnts += 1; cnt += 1; @@ -490,9 +493,10 @@ export async function initializeTiles( const filename = `${canvasTileFolder}/${zoom}/${cx}/${cy}.png`; if (force || !fs.existsSync(filename)) { const ret = await createZoomedTile( + canvas, canvasTileFolder, - palette, [zoom, cx, cy], + palette, ); if (ret) cnts += 1; cnt += 1; diff --git a/src/core/tileserver.js b/src/core/tileserver.js index 5e451c8..93b05aa 100644 --- a/src/core/tileserver.js +++ b/src/core/tileserver.js @@ -42,7 +42,6 @@ class CanvasUpdater { this.canvasTileFolder = `${TILE_FOLDER}/${id}`; this.firstZoomtileWidth = this.canvas.size / TILE_SIZE / TILE_ZOOM_LEVEL; this.maxTiledZoom = getMaxTiledZoom(this.canvas.size); - this.startReloadingLoops(); } /* @@ -140,7 +139,7 @@ class CanvasUpdater { /* * initialize queues and start loops for updating tiles */ - async startReloadingLoops() { + async initialize() { logger.info(`Tiling: Using folder ${this.canvasTileFolder}`); if (!fs.existsSync(`${this.canvasTileFolder}/0`)) { if (!fs.existsSync(this.canvasTileFolder)) { @@ -177,7 +176,7 @@ RedisCanvas.setChunkChangeCallback(registerChunkChange); /* * starting update loops for canvases */ -export function startAllCanvasLoops() { +export async function startAllCanvasLoops() { if (!fs.existsSync(`${TILE_FOLDER}`)) fs.mkdirSync(`${TILE_FOLDER}`); const ids = Object.keys(canvases); for (let i = 0; i < ids.length; i += 1) { @@ -186,7 +185,9 @@ export function startAllCanvasLoops() { if (!canvas.v) { // just 2D canvases const updater = new CanvasUpdater(id); - CanvasUpdaters[ids[i]] = updater; + // eslint-disable-next-line no-await-in-loop + await updater.initialize(); + CanvasUpdaters[id] = updater; } } } diff --git a/src/workers/tilewriter.js b/src/workers/tilewriter.js index c71a239..8c5b02c 100644 --- a/src/workers/tilewriter.js +++ b/src/workers/tilewriter.js @@ -47,6 +47,7 @@ connectRedis() // eslint-disable-next-line max-len `Tiling: Error on executing task ${task} args ${args}: ${error.message}`, ); + parentPort.postMessage('Failure!'); } }); });