From 93ebd1084b27b535e093f35b4c76b78b0a0f4757 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Tue, 28 Apr 2026 17:57:26 +0200 Subject: [PATCH] Feat: Integrate update loop tracing into EditorStore methods --- src/app/editor-store.ts | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/src/app/editor-store.ts b/src/app/editor-store.ts index f4d7d1d5..da86394d 100644 --- a/src/app/editor-store.ts +++ b/src/app/editor-store.ts @@ -66,6 +66,11 @@ import { type ViewportPanelCameraState, type ViewportQuadSplit } from "../viewport-three/viewport-layout"; +import { + summarizeUpdateLoopCameraState, + summarizeUpdateLoopCameraStateDeltas, + traceUpdateLoopEvent +} from "../debug/update-loop-trace"; export interface EditorStoreState { projectDocument: ProjectDocument; @@ -408,12 +413,25 @@ export class EditorStore { panelId: ViewportPanelId, cameraState: ViewportPanelCameraState ) { - if ( - areViewportPanelCameraStatesEqual( - this.viewportPanels[panelId].cameraState, + const previousCameraState = this.viewportPanels[panelId].cameraState; + const cameraStatesEqual = areViewportPanelCameraStatesEqual( + previousCameraState, + cameraState + ); + + traceUpdateLoopEvent("EditorStore.setViewportPanelCameraState", { + panelId, + previousCameraState: + summarizeUpdateLoopCameraState(previousCameraState), + nextCameraState: summarizeUpdateLoopCameraState(cameraState), + equalityGuardConsideredDifferent: !cameraStatesEqual, + deltas: summarizeUpdateLoopCameraStateDeltas( + previousCameraState, cameraState ) - ) { + }); + + if (cameraStatesEqual) { return; } @@ -424,7 +442,7 @@ export class EditorStore { cameraState: cloneViewportPanelCameraState(cameraState) } }; - this.emit(); + this.emit("setViewportPanelCameraState"); } setViewportQuadSplit(viewportQuadSplit: ViewportQuadSplit) { @@ -795,7 +813,12 @@ export class EditorStore { return document; } - private emit() { + private emit(reason?: string) { + traceUpdateLoopEvent("EditorStore.emit", { + reason: reason ?? "unspecified", + listenerCount: this.listeners.size + }); + this.snapshot = this.createSnapshot(); for (const listener of this.listeners) {