From 6ab7136c3c835b039a97c52df0179ffbe4b41f44 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Tue, 25 Nov 2025 17:44:54 +0100 Subject: [PATCH] add "ticks per render" metric --- src/client/ClientGameRunner.ts | 8 ++++++++ src/client/InputHandler.ts | 2 ++ src/client/graphics/layers/PerformanceOverlay.ts | 13 +++++++++++++ 3 files changed, 23 insertions(+) diff --git a/src/client/ClientGameRunner.ts b/src/client/ClientGameRunner.ts index 2f3641b22..ce88d861a 100644 --- a/src/client/ClientGameRunner.ts +++ b/src/client/ClientGameRunner.ts @@ -213,6 +213,7 @@ export class ClientGameRunner { private lastProcessedTick: number = 0; private backlogTurns: number = 0; private backlogGrowing: boolean = false; + private lastRenderedTick: number = 0; private pendingUpdates: GameUpdateViewData[] = []; private pendingStart = 0; @@ -518,12 +519,19 @@ export class ClientGameRunner { // Only emit metrics when ALL processing is complete if (this.pendingStart >= this.pendingUpdates.length) { + const ticksPerRender = + this.lastRenderedTick === 0 + ? lastTick + : lastTick - this.lastRenderedTick; + this.lastRenderedTick = lastTick; + this.renderer.tick(); this.eventBus.emit( new TickMetricsEvent( lastTickDuration, this.currentTickDelay, this.backlogTurns, + ticksPerRender, ), ); diff --git a/src/client/InputHandler.ts b/src/client/InputHandler.ts index e18e616e8..bd95e7201 100644 --- a/src/client/InputHandler.ts +++ b/src/client/InputHandler.ts @@ -131,6 +131,8 @@ export class TickMetricsEvent implements GameEvent { public readonly tickDelay?: number, // Number of turns the client is behind the server (if known) public readonly backlogTurns?: number, + // Number of ticks applied since last render + public readonly ticksPerRender?: number, ) {} } diff --git a/src/client/graphics/layers/PerformanceOverlay.ts b/src/client/graphics/layers/PerformanceOverlay.ts index 8bc8f4a6a..531f19f0b 100644 --- a/src/client/graphics/layers/PerformanceOverlay.ts +++ b/src/client/graphics/layers/PerformanceOverlay.ts @@ -233,6 +233,7 @@ export class PerformanceOverlay extends LitElement implements Layer { event.tickExecutionDuration, event.tickDelay, event.backlogTurns, + event.ticksPerRender, ); }); } @@ -425,10 +426,14 @@ export class PerformanceOverlay extends LitElement implements Layer { @state() private backlogTurns: number = 0; + @state() + private ticksPerRender: number = 0; + updateTickMetrics( tickExecutionDuration?: number, tickDelay?: number, backlogTurns?: number, + ticksPerRender?: number, ) { if (!this.isVisible || !this.userSettings.performanceOverlay()) return; @@ -470,6 +475,10 @@ export class PerformanceOverlay extends LitElement implements Layer { this.backlogTurns = backlogTurns; } + if (ticksPerRender !== undefined) { + this.ticksPerRender = ticksPerRender; + } + this.requestUpdate(); } @@ -615,6 +624,10 @@ export class PerformanceOverlay extends LitElement implements Layer { ${this.tickDelayAvg.toFixed(2)}ms (max: ${this.tickDelayMax}ms) +
+ Ticks per render: + ${this.ticksPerRender} +
Backlog turns: ${this.backlogTurns}