make tileserver better

This commit is contained in:
HF 2022-06-20 16:47:23 +02:00
parent 0fba279f64
commit 6eaea5b00c
3 changed files with 21 additions and 15 deletions

View File

@ -90,9 +90,10 @@ function addIndexedSubtiletoTile(
const [dx, dy] = cell; const [dx, dy] = cell;
const chunkOffset = (dx + dy * subtilesInTile * TILE_SIZE) * TILE_SIZE; const chunkOffset = (dx + dy * subtilesInTile * TILE_SIZE) * TILE_SIZE;
const emptyR = palette.rgb[0]; const { rgb } = palette;
const emptyB = palette.rgb[1]; const emptyR = rgb[0];
const emptyG = palette.rgb[1]; const emptyB = rgb[1];
const emptyG = rgb[1];
let pos = 0; let pos = 0;
let clr; let clr;
@ -102,9 +103,9 @@ function addIndexedSubtiletoTile(
while (channelOffset < max) { while (channelOffset < max) {
if (pos < subtile.length) { if (pos < subtile.length) {
clr = (subtile[pos++] & 0x3F) * 3; clr = (subtile[pos++] & 0x3F) * 3;
buffer[channelOffset++] = palette.rgb[clr++]; buffer[channelOffset++] = rgb[clr++];
buffer[channelOffset++] = palette.rgb[clr++]; buffer[channelOffset++] = rgb[clr++];
buffer[channelOffset++] = palette.rgb[clr]; buffer[channelOffset++] = rgb[clr];
} else { } else {
buffer[channelOffset++] = emptyR; buffer[channelOffset++] = emptyR;
buffer[channelOffset++] = emptyB; buffer[channelOffset++] = emptyB;
@ -137,8 +138,9 @@ export async function createZoomTileFromChunk(
canvas, canvas,
canvasTileFolder, canvasTileFolder,
cell, cell,
gPalette = null,
) { ) {
const palette = new Palette(canvas.colors); const palette = gPalette || new Palette(canvas.colors);
const canvasSize = canvas.size; const canvasSize = canvas.size;
const [x, y] = cell; const [x, y] = cell;
const maxTiledZoom = getMaxTiledZoom(canvasSize); const maxTiledZoom = getMaxTiledZoom(canvasSize);
@ -221,8 +223,9 @@ export async function createZoomedTile(
canvas, canvas,
canvasTileFolder, canvasTileFolder,
cell, cell,
gPalette = null,
) { ) {
const palette = new Palette(canvas.colors); const palette = gPalette || new Palette(canvas.colors);
const tileRGBBuffer = new Uint8Array( const tileRGBBuffer = new Uint8Array(
TILE_SIZE * TILE_SIZE * TILE_ZOOM_LEVEL * TILE_ZOOM_LEVEL * 3, 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`; const filename = `${canvasTileFolder}/${zoom}/${cx}/${cy}.png`;
if (force || !fs.existsSync(filename)) { if (force || !fs.existsSync(filename)) {
const ret = await createZoomTileFromChunk( const ret = await createZoomTileFromChunk(
canvasSize,
canvasId, canvasId,
canvas,
canvasTileFolder, canvasTileFolder,
palette,
[cx, cy], [cx, cy],
palette,
); );
if (ret) cnts += 1; if (ret) cnts += 1;
cnt += 1; cnt += 1;
@ -490,9 +493,10 @@ export async function initializeTiles(
const filename = `${canvasTileFolder}/${zoom}/${cx}/${cy}.png`; const filename = `${canvasTileFolder}/${zoom}/${cx}/${cy}.png`;
if (force || !fs.existsSync(filename)) { if (force || !fs.existsSync(filename)) {
const ret = await createZoomedTile( const ret = await createZoomedTile(
canvas,
canvasTileFolder, canvasTileFolder,
palette,
[zoom, cx, cy], [zoom, cx, cy],
palette,
); );
if (ret) cnts += 1; if (ret) cnts += 1;
cnt += 1; cnt += 1;

View File

@ -42,7 +42,6 @@ class CanvasUpdater {
this.canvasTileFolder = `${TILE_FOLDER}/${id}`; this.canvasTileFolder = `${TILE_FOLDER}/${id}`;
this.firstZoomtileWidth = this.canvas.size / TILE_SIZE / TILE_ZOOM_LEVEL; this.firstZoomtileWidth = this.canvas.size / TILE_SIZE / TILE_ZOOM_LEVEL;
this.maxTiledZoom = getMaxTiledZoom(this.canvas.size); this.maxTiledZoom = getMaxTiledZoom(this.canvas.size);
this.startReloadingLoops();
} }
/* /*
@ -140,7 +139,7 @@ class CanvasUpdater {
/* /*
* initialize queues and start loops for updating tiles * initialize queues and start loops for updating tiles
*/ */
async startReloadingLoops() { async initialize() {
logger.info(`Tiling: Using folder ${this.canvasTileFolder}`); logger.info(`Tiling: Using folder ${this.canvasTileFolder}`);
if (!fs.existsSync(`${this.canvasTileFolder}/0`)) { if (!fs.existsSync(`${this.canvasTileFolder}/0`)) {
if (!fs.existsSync(this.canvasTileFolder)) { if (!fs.existsSync(this.canvasTileFolder)) {
@ -177,7 +176,7 @@ RedisCanvas.setChunkChangeCallback(registerChunkChange);
/* /*
* starting update loops for canvases * starting update loops for canvases
*/ */
export function startAllCanvasLoops() { export async function startAllCanvasLoops() {
if (!fs.existsSync(`${TILE_FOLDER}`)) fs.mkdirSync(`${TILE_FOLDER}`); if (!fs.existsSync(`${TILE_FOLDER}`)) fs.mkdirSync(`${TILE_FOLDER}`);
const ids = Object.keys(canvases); const ids = Object.keys(canvases);
for (let i = 0; i < ids.length; i += 1) { for (let i = 0; i < ids.length; i += 1) {
@ -186,7 +185,9 @@ export function startAllCanvasLoops() {
if (!canvas.v) { if (!canvas.v) {
// just 2D canvases // just 2D canvases
const updater = new CanvasUpdater(id); const updater = new CanvasUpdater(id);
CanvasUpdaters[ids[i]] = updater; // eslint-disable-next-line no-await-in-loop
await updater.initialize();
CanvasUpdaters[id] = updater;
} }
} }
} }

View File

@ -47,6 +47,7 @@ connectRedis()
// eslint-disable-next-line max-len // eslint-disable-next-line max-len
`Tiling: Error on executing task ${task} args ${args}: ${error.message}`, `Tiling: Error on executing task ${task} args ${args}: ${error.message}`,
); );
parentPort.postMessage('Failure!');
} }
}); });
}); });