From 522f5f85b9606e5378035c82ec85eb993db1f0b5 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Fri, 27 Mar 2026 15:17:45 +0100 Subject: [PATCH 1/2] Re-factor the `StatTimer` class to track started times in a private `Map` --- src/display/display_utils.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/display/display_utils.js b/src/display/display_utils.js index 3cf8e7b6f..a05b47182 100644 --- a/src/display/display_utils.js +++ b/src/display/display_utils.js @@ -417,28 +417,28 @@ function getPdfFilenameFromUrl(url, defaultFilename = "document.pdf") { } class StatTimer { - started = Object.create(null); + #started = new Map(); times = []; time(name) { - if (name in this.started) { + if (this.#started.has(name)) { warn(`Timer is already running for ${name}`); } - this.started[name] = Date.now(); + this.#started.set(name, Date.now()); } timeEnd(name) { - if (!(name in this.started)) { + if (!this.#started.has(name)) { warn(`Timer has not been started for ${name}`); } this.times.push({ name, - start: this.started[name], + start: this.#started.get(name), end: Date.now(), }); // Remove timer from started so it can be called again. - delete this.started[name]; + this.#started.delete(name); } toString() { From 256be7f3a6bf998d91a1d96e8c90e9bf8aa9c788 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Fri, 27 Mar 2026 15:28:45 +0100 Subject: [PATCH 2/2] Remove manual loops in the `StatTimer.prototype.toString` method We can use Array methods instead, which is a tiny bit shorter. --- src/display/display_utils.js | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/display/display_utils.js b/src/display/display_utils.js index a05b47182..cfe1c6ad4 100644 --- a/src/display/display_utils.js +++ b/src/display/display_utils.js @@ -443,15 +443,11 @@ class StatTimer { toString() { // Find the longest name for padding purposes. - const outBuf = []; - let longest = 0; - for (const { name } of this.times) { - longest = Math.max(name.length, longest); - } - for (const { name, start, end } of this.times) { - outBuf.push(`${name.padEnd(longest)} ${end - start}ms\n`); - } - return outBuf.join(""); + const longest = Math.max(...this.times.map(t => t.name.length)); + + return this.times + .map(t => `${t.name.padEnd(longest)} ${t.end - t.start}ms\n`) + .join(""); } }