Feat: Integrate update loop tracing into EditorStore methods
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user