From 2990f55dfb3954a05ed63b157054f820d762cb97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B0=D0=BD=D0=B8=D1=97=D0=BB=20=D0=93=D1=80=D0=B8?= =?UTF-8?q?=D0=B3=D0=BE=D1=80=27=D1=94=D0=B2?= Date: Thu, 19 Jun 2025 05:38:39 +0300 Subject: [PATCH] Minor "buffers" cleanup Remove the canvas context loss handling as it was incorrect, simplify the error conditions in makeOffscreenBuffer and remove commented out code. --- src/js/core/buffer_maintainer.js | 44 ++++---------------------------- src/js/core/buffer_utils.js | 23 +---------------- src/js/game/map_view.js | 14 +++------- 3 files changed, 10 insertions(+), 71 deletions(-) diff --git a/src/js/core/buffer_maintainer.js b/src/js/core/buffer_maintainer.js index 1d6bffb9..410a8244 100644 --- a/src/js/core/buffer_maintainer.js +++ b/src/js/core/buffer_maintainer.js @@ -1,7 +1,6 @@ import { GameRoot } from "../game/root"; -import { clearBufferBacklog, freeCanvas, getBufferStats, makeOffscreenBuffer } from "./buffer_utils"; +import { clearBufferBacklog, freeCanvas, makeOffscreenBuffer } from "./buffer_utils"; import { createLogger } from "./logging"; -import { round1Digit } from "./utils"; /** * @typedef {{ @@ -35,7 +34,7 @@ export class BufferMaintainer { * Returns the buffer stats */ getStats() { - let stats = { + const stats = { rootKeys: 0, subKeys: 0, vramBytes: 0, @@ -59,25 +58,16 @@ export class BufferMaintainer { * for a few iterations */ garbargeCollect() { - let totalKeys = 0; - let deletedKeys = 0; const minIteration = this.iterationIndex; this.cache.forEach((subCache, key) => { - let unusedSubKeys = []; + const unusedSubKeys = []; // Filter sub cache subCache.forEach((cacheEntry, subKey) => { - if ( - cacheEntry.lastUse < minIteration || - // @ts-ignore - cacheEntry.canvas._contextLost - ) { + if (cacheEntry.lastUse < minIteration) { unusedSubKeys.push(subKey); freeCanvas(cacheEntry.canvas); - ++deletedKeys; - } else { - ++totalKeys; } }); @@ -90,30 +80,6 @@ export class BufferMaintainer { // Make sure our backlog never gets too big clearBufferBacklog(); - // if (G_IS_DEV) { - // const bufferStats = getBufferStats(); - // const mbUsed = round1Digit(bufferStats.vramUsage / (1024 * 1024)); - // logger.log( - // "GC: Remove", - // (deletedKeys + "").padStart(4), - // ", Remain", - // (totalKeys + "").padStart(4), - // "(", - // (bufferStats.bufferCount + "").padStart(4), - // "total", - // ")", - - // "(", - // (bufferStats.backlogSize + "").padStart(4), - // "backlog", - // ")", - - // "VRAM:", - // mbUsed, - // "MB" - // ); - // } - ++this.iterationIndex; } @@ -180,7 +146,7 @@ export class BufferMaintainer { * */ getForKeyOrNullNoUpdate({ key, subKey }) { - let parent = this.cache.get(key); + const parent = this.cache.get(key); if (!parent) { return null; } diff --git a/src/js/core/buffer_utils.js b/src/js/core/buffer_utils.js index c21108a5..9434a5e8 100644 --- a/src/js/core/buffer_utils.js +++ b/src/js/core/buffer_utils.js @@ -82,15 +82,7 @@ export function clearBufferBacklog() { * @returns {[HTMLCanvasElement, CanvasRenderingContext2D]} */ export function makeOffscreenBuffer(w, h, { smooth = true, reusable = true, label = "buffer" }) { - assert(w > 0 && h > 0, "W or H < 0"); - if (w % 1 !== 0 || h % 1 !== 0) { - // console.warn("Subpixel offscreen buffer size:", w, h); - } - if (w < 1 || h < 1) { - logger.error("Offscreen buffer size < 0:", w, "x", h); - w = Math.max(1, w); - h = Math.max(1, h); - } + assert(w >= 1 && h >= 1, "Invalid offscreen buffer size: W or H < 1"); const recommendedSize = 1024 * 1024; if (w * h > recommendedSize) { @@ -140,20 +132,7 @@ export function makeOffscreenBuffer(w, h, { smooth = true, reusable = true, labe // Initial state context.save(); - - canvas.addEventListener("webglcontextlost", () => { - console.warn("canvas::webglcontextlost", canvas); - // @ts-ignore - canvas._contextLost = true; - }); - canvas.addEventListener("contextlost", () => { - console.warn("canvas::contextlost", canvas); - // @ts-ignore - canvas._contextLost = true; - }); } - // @ts-ignore - canvas._contextLost = false; // @ts-ignore canvas.label = label; diff --git a/src/js/game/map_view.js b/src/js/game/map_view.js index a7d14cb5..685ec3e6 100644 --- a/src/js/game/map_view.js +++ b/src/js/game/map_view.js @@ -1,11 +1,11 @@ +import { freeCanvas, makeOffscreenBuffer } from "../core/buffer_utils"; import { globalConfig } from "../core/config"; import { DrawParameters } from "../core/draw_parameters"; -import { BaseMap } from "./map"; -import { freeCanvas, makeOffscreenBuffer } from "../core/buffer_utils"; import { Entity } from "./entity"; -import { THEME } from "./theme"; -import { MapChunkView } from "./map_chunk_view"; +import { BaseMap } from "./map"; import { MapChunkAggregate } from "./map_chunk_aggregate"; +import { MapChunkView } from "./map_chunk_view"; +import { THEME } from "./theme"; /** * This is the view of the map, it extends the map which is the raw model and allows @@ -241,12 +241,6 @@ export class MapView extends BaseMap { key = "placing"; } - // @ts-ignore` - if (this.cachedBackgroundCanvases[key]._contextLost) { - freeCanvas(this.cachedBackgroundCanvases[key]); - this.internalInitializeCachedBackgroundCanvases(); - } - parameters.context.fillStyle = parameters.context.createPattern( this.cachedBackgroundCanvases[key], "repeat"