Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
ad8b7f1
Merge branch 'main' of github.com:vercel/workflow
karthikscale3 Jan 27, 2026
e0cb61b
Merge branch 'main' of github.com:vercel/workflow
karthikscale3 Jan 28, 2026
051cadc
Merge branch 'main' of github.com:vercel/workflow
karthikscale3 Jan 29, 2026
af8ac1f
Merge branch 'main' of github.com:vercel/workflow
karthikscale3 Jan 29, 2026
e68e7d2
Merge branch 'main' of github.com:vercel/workflow
karthikscale3 Jan 30, 2026
8305e5b
Merge branch 'main' of github.com:vercel/workflow
karthikscale3 Jan 30, 2026
f3da688
Merge branch 'main' of github.com:vercel/workflow
karthikscale3 Jan 31, 2026
f8ee413
Merge branch 'main' of github.com:vercel/workflow
karthikscale3 Feb 1, 2026
589cbd7
Merge branch 'main' of github.com:vercel/workflow
karthikscale3 Feb 2, 2026
e979fdf
Merge branch 'main' of github.com:vercel/workflow
karthikscale3 Feb 3, 2026
d4baed2
Merge branch 'main' of github.com:vercel/workflow
karthikscale3 Feb 6, 2026
53503a4
Merge branch 'main' of github.com:vercel/workflow
karthikscale3 Feb 10, 2026
d51e2e4
Merge branch 'main' of github.com:vercel/workflow
karthikscale3 Feb 13, 2026
5123088
Merge branch 'main' of github.com:vercel/workflow
karthikscale3 Feb 13, 2026
dd1a307
Merge branch 'main' of github.com:vercel/workflow
karthikscale3 Feb 13, 2026
00bcfcd
Merge branch 'main' of github.com:vercel/workflow
karthikscale3 Feb 14, 2026
f6a157b
Merge branch 'main' of github.com:vercel/workflow
karthikscale3 Feb 15, 2026
816f35b
Merge branch 'main' of github.com:vercel/workflow
karthikscale3 Feb 16, 2026
2b87dce
Merge branch 'main' of github.com:vercel/workflow
karthikscale3 Feb 17, 2026
146de28
Merge branch 'main' of github.com:vercel/workflow
karthikscale3 Feb 18, 2026
a4fae48
[web-shared] reduce redundant render
karthikscale3 Feb 18, 2026
ada9de7
[web-shared] add changeset
karthikscale3 Feb 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/loose-clocks-tease.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@workflow/web-shared": patch
---

Minor perf hardening for trace viewer
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ export function TraceViewerTimeline({
null
);
const prevSpanMapRef = useRef<ReturnType<typeof parseTrace>['map']>({});
const prevSizeRef = useRef<{ width: number; height: number } | null>(null);

useEffect(() => {
const { root: newRoot, map: newSpanMap } = parseTrace(trace);
Expand Down Expand Up @@ -149,19 +150,36 @@ export function TraceViewerTimeline({
// references) does NOT restart.
const oldRoot = prevRootRef.current;
const oldSpanMap = prevSpanMapRef.current;
let didChange = false;

oldRoot.endTime = newRoot.endTime;
oldRoot.duration = newRoot.duration;
if (
oldRoot.endTime !== newRoot.endTime ||
oldRoot.duration !== newRoot.duration
) {
oldRoot.endTime = newRoot.endTime;
oldRoot.duration = newRoot.duration;
didChange = true;
}

for (const [id, newNode] of Object.entries(newSpanMap)) {
const oldNode = oldSpanMap[id];
if (oldNode) {
oldNode.endTime = newNode.endTime;
oldNode.duration = newNode.duration;
if (
oldNode.endTime !== newNode.endTime ||
oldNode.duration !== newNode.duration
) {
oldNode.endTime = newNode.endTime;
oldNode.duration = newNode.duration;
didChange = true;
}
Object.assign(oldNode.span, newNode.span);
}
}

if (!didChange) {
return;
}

// Trigger re-render (scale/markers) without restarting the worker.
// useLiveTick handles continuous scale recalculation for live runs.
dispatch({ type: 'forceRender' });
Expand Down Expand Up @@ -193,11 +211,23 @@ export function TraceViewerTimeline({
const onResize = (): void => {
const padding = 2 * TIMELINE_PADDING;
const rect = $el.getBoundingClientRect();
const nextWidth = rect.width - padding;
const nextHeight = rect.height;
const prevSize = prevSizeRef.current;

if (
prevSize &&
prevSize.width === nextWidth &&
prevSize.height === nextHeight
) {
return;
}
prevSizeRef.current = { width: nextWidth, height: nextHeight };

dispatch({
type: 'setSize',
width: rect.width - padding,
height: rect.height,
width: nextWidth,
height: nextHeight,
});
};

Expand Down