fix(workbench): seal terminal trace timing (#1993)
This commit is contained in:
@@ -133,7 +133,11 @@ export function mergeRunnerTrace(previous: ChatMessage["runnerTrace"], next: Non
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function mergeTraceTimingProjection(previous: unknown, next: unknown): TraceSnapshot["timing"] | null {
|
type TraceTimingMergeOptions = {
|
||||||
|
preserveVisibleTerminalDuration?: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
function mergeTraceTimingProjection(previous: unknown, next: unknown, options: TraceTimingMergeOptions = {}): TraceSnapshot["timing"] | null {
|
||||||
const previousTiming = traceTimingCandidate(previous);
|
const previousTiming = traceTimingCandidate(previous);
|
||||||
const nextTiming = traceTimingCandidate(next);
|
const nextTiming = traceTimingCandidate(next);
|
||||||
if (!previousTiming && !nextTiming) return null;
|
if (!previousTiming && !nextTiming) return null;
|
||||||
@@ -142,12 +146,16 @@ function mergeTraceTimingProjection(previous: unknown, next: unknown): TraceSnap
|
|||||||
const startedAt = earliestTraceTimestamp(previousTiming.startedAt, nextTiming.startedAt);
|
const startedAt = earliestTraceTimestamp(previousTiming.startedAt, nextTiming.startedAt);
|
||||||
const lastEventAt = latestTraceTimestamp(previousTiming.lastEventAt, nextTiming.lastEventAt);
|
const lastEventAt = latestTraceTimestamp(previousTiming.lastEventAt, nextTiming.lastEventAt);
|
||||||
const finishedAt = latestTraceTimestamp(previousTiming.finishedAt, nextTiming.finishedAt);
|
const finishedAt = latestTraceTimestamp(previousTiming.finishedAt, nextTiming.finishedAt);
|
||||||
const elapsedDurationMs = traceElapsedMs(startedAt, finishedAt ?? lastEventAt);
|
const runningElapsedDurationMs = traceElapsedMs(startedAt, lastEventAt);
|
||||||
|
const terminalElapsedDurationMs = traceElapsedMs(startedAt, finishedAt);
|
||||||
const terminalTiming = traceTimingIsTerminal(next) || finishedAt !== null;
|
const terminalTiming = traceTimingIsTerminal(next) || finishedAt !== null;
|
||||||
const previousTerminalDurationMs = previousTiming.finishedAt ? previousTiming.durationMs : null;
|
const previousTerminalDurationMs = previousTiming.finishedAt ? previousTiming.durationMs : null;
|
||||||
|
const preservedVisibleTerminalDurationMs = options.preserveVisibleTerminalDuration && !finishedAt
|
||||||
|
? firstTraceDuration(previousTiming.durationMs)
|
||||||
|
: null;
|
||||||
const durationMs = terminalTiming
|
const durationMs = terminalTiming
|
||||||
? maxTraceDuration(previousTiming.durationMs, nextTiming.durationMs, elapsedDurationMs, previousTerminalDurationMs)
|
? maxTraceDuration(finishedAt ? nextTiming.durationMs : null, terminalElapsedDurationMs, previousTerminalDurationMs, preservedVisibleTerminalDurationMs)
|
||||||
: maxTraceDuration(previousTiming.durationMs, nextTiming.durationMs, elapsedDurationMs);
|
: maxTraceDuration(previousTiming.durationMs, nextTiming.durationMs, runningElapsedDurationMs);
|
||||||
return {
|
return {
|
||||||
...previousTiming,
|
...previousTiming,
|
||||||
...nextTiming,
|
...nextTiming,
|
||||||
|
|||||||
Reference in New Issue
Block a user