add "ticks per render" metric

This commit is contained in:
scamiv
2025-11-25 17:44:54 +01:00
parent a21f066700
commit 6ab7136c3c
3 changed files with 23 additions and 0 deletions
+8
View File
@@ -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,
),
);
+2
View File
@@ -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,
) {}
}
@@ -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 {
<span>${this.tickDelayAvg.toFixed(2)}ms</span>
(max: <span>${this.tickDelayMax}ms</span>)
</div>
<div class="performance-line">
Ticks per render:
<span>${this.ticksPerRender}</span>
</div>
<div class="performance-line">
Backlog turns:
<span>${this.backlogTurns}</span>