From 0a89bd83b3e2b8f310d960199df93b7eee3fc062 Mon Sep 17 00:00:00 2001 From: HF Date: Thu, 4 Aug 2022 12:48:40 +0200 Subject: [PATCH] fix incrememtal tile backup for unchanged chunks --- src/core/tilesBackup.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/core/tilesBackup.js b/src/core/tilesBackup.js index ea47f05..c7496f1 100644 --- a/src/core/tilesBackup.js +++ b/src/core/tilesBackup.js @@ -160,23 +160,34 @@ export async function incrementialBackupRedis( } const { abgr } = palette; - const compLength = Math.min(oldChunk.length, curChunk.length); - tileBuffer = new Uint32Array(TILE_SIZE ** 2); + const oldChunkLength = oldChunk.length; + const curChunkLength = curChunk.length; + if (oldChunkLength !== curChunkLength) { + tileBuffer = new Uint32Array(TILE_SIZE ** 2); + } + + const compLength = Math.min(oldChunkLength, curChunkLength); for (let i = 0; i < compLength; i += 1) { const curPxl = curChunk[i]; if (oldChunk[i] !== curPxl) { + if (!tileBuffer) { + tileBuffer = new Uint32Array(TILE_SIZE ** 2); + } tileBuffer[i] = abgr[curPxl & 0x3F]; } } - const oldChunkLength = oldChunk.length; - const curChunkLength = curChunk.length; + if (!tileBuffer) { + continue; + } for (let i = oldChunkLength; i < curChunkLength; i += 1) { + // current chunk longer than old chunk tileBuffer[i] = abgr[curChunk[i] & 0x3F]; } if (oldChunkLength > curChunkLength) { + // old chunk longer than current chunk const blank = abgr[0]; for (let i = curChunkLength; i < oldChunkLength; i += 1) { if (oldChunk[i] !== 0) {