From 2f44027a436fc0010c603a073d54c9c4045d4809 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Tue, 28 Apr 2026 17:59:48 +0200 Subject: [PATCH] Improve tracing logic for UI snapshots and camera state changes --- src/app/App.tsx | 48 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/src/app/App.tsx b/src/app/App.tsx index 1b3fd572..5eca908c 100644 --- a/src/app/App.tsx +++ b/src/app/App.tsx @@ -4287,9 +4287,31 @@ export function App({ store, initialStatusMessage }: AppProps) { }, [editorState.projectDocument.time]); useEffect(() => { - return editorSimulationController.subscribeUiSnapshot( - setEditorSimulationSnapshot - ); + return editorSimulationController.subscribeUiSnapshot((snapshot) => { + const previousSnapshot = editorSimulationSnapshotTraceRef.current; + const clockChanged = + previousSnapshot.clock === null || snapshot.clock === null + ? previousSnapshot.clock !== snapshot.clock + : !areRuntimeClockStatesEqual(previousSnapshot.clock, snapshot.clock); + + traceUpdateLoopEvent( + "App.editorSimulationController.subscribeUiSnapshot", + { + previousSnapshot: + summarizeEditorSimulationUiSnapshotForTrace(previousSnapshot), + nextSnapshot: summarizeEditorSimulationUiSnapshotForTrace(snapshot), + sameSnapshotObject: previousSnapshot === snapshot, + frameVersionChanged: + previousSnapshot.frameVersion !== snapshot.frameVersion, + sceneVersionChanged: + previousSnapshot.sceneVersion !== snapshot.sceneVersion, + clockChanged + } + ); + + editorSimulationSnapshotTraceRef.current = snapshot; + setEditorSimulationSnapshot(snapshot); + }); }, [editorSimulationController]); useEffect(() => { @@ -14933,6 +14955,26 @@ export function App({ store, initialStatusMessage }: AppProps) { onTerrainBrushCommit={handleCommitTerrainBrushStroke} onCommitCreation={handleCommitCreation} onCameraStateChange={(cameraState) => { + const previousCameraState = + editorState.viewportPanels[panelId].cameraState; + const cameraStatesEqual = + areViewportPanelCameraStatesEqual( + previousCameraState, + cameraState + ); + + traceUpdateLoopEvent("App.onCameraStateChange", { + panelId, + previousCameraState: + summarizeUpdateLoopCameraState(previousCameraState), + nextCameraState: + summarizeUpdateLoopCameraState(cameraState), + equalityGuardConsideredDifferent: !cameraStatesEqual, + deltas: summarizeUpdateLoopCameraStateDeltas( + previousCameraState, + cameraState + ) + }); store.setViewportPanelCameraState(panelId, cameraState); }} onToolPreviewChange={(toolPreview) => {