Feat: Integrate update loop tracing into EditorStore methods

This commit is contained in:
2026-04-28 17:57:26 +02:00
parent 098e8e2d04
commit 93ebd1084b

View File

@@ -66,6 +66,11 @@ import {
type ViewportPanelCameraState, type ViewportPanelCameraState,
type ViewportQuadSplit type ViewportQuadSplit
} from "../viewport-three/viewport-layout"; } from "../viewport-three/viewport-layout";
import {
summarizeUpdateLoopCameraState,
summarizeUpdateLoopCameraStateDeltas,
traceUpdateLoopEvent
} from "../debug/update-loop-trace";
export interface EditorStoreState { export interface EditorStoreState {
projectDocument: ProjectDocument; projectDocument: ProjectDocument;
@@ -408,12 +413,25 @@ export class EditorStore {
panelId: ViewportPanelId, panelId: ViewportPanelId,
cameraState: ViewportPanelCameraState cameraState: ViewportPanelCameraState
) { ) {
if ( const previousCameraState = this.viewportPanels[panelId].cameraState;
areViewportPanelCameraStatesEqual( const cameraStatesEqual = areViewportPanelCameraStatesEqual(
this.viewportPanels[panelId].cameraState, previousCameraState,
cameraState
);
traceUpdateLoopEvent("EditorStore.setViewportPanelCameraState", {
panelId,
previousCameraState:
summarizeUpdateLoopCameraState(previousCameraState),
nextCameraState: summarizeUpdateLoopCameraState(cameraState),
equalityGuardConsideredDifferent: !cameraStatesEqual,
deltas: summarizeUpdateLoopCameraStateDeltas(
previousCameraState,
cameraState cameraState
) )
) { });
if (cameraStatesEqual) {
return; return;
} }
@@ -424,7 +442,7 @@ export class EditorStore {
cameraState: cloneViewportPanelCameraState(cameraState) cameraState: cloneViewportPanelCameraState(cameraState)
} }
}; };
this.emit(); this.emit("setViewportPanelCameraState");
} }
setViewportQuadSplit(viewportQuadSplit: ViewportQuadSplit) { setViewportQuadSplit(viewportQuadSplit: ViewportQuadSplit) {
@@ -795,7 +813,12 @@ export class EditorStore {
return document; return document;
} }
private emit() { private emit(reason?: string) {
traceUpdateLoopEvent("EditorStore.emit", {
reason: reason ?? "unspecified",
listenerCount: this.listeners.size
});
this.snapshot = this.createSnapshot(); this.snapshot = this.createSnapshot();
for (const listener of this.listeners) { for (const listener of this.listeners) {