Feature/waterfall view phase2#143
Merged
georgidhristov merged 1 commit intoJul 5, 2026
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Waterfall/Timeline View — Phase 2
What
Adds interactivity to the Phase 1 waterfall bars: hover tooltips showing
per-call metadata, and a time-axis ruler with millisecond gridlines scaled
to the parent request's total duration.
Why
Phase 1 shipped static, non-interactive bars. Users could see proportional
duration visually, but not exact timestamps, exact durations, or the target
URL/status without scrolling down to the matching outgoing-request card.
This phase closes that gap with hover-based detail, without adding zoom/pan
complexity (explicitly deferred to Phase 3).
Scope
.wf-bar: start offset, duration, target URL, status.tick marks in milliseconds (InvariantCulture formatted).
matching the existing
debugprobe-ui.jsconventions (same pattern ascopy buttons / row filtering).
Files changed
BuildWaterfallSection(DebugEntry entry)to render the ruler row and embed
data-wf-start,data-wf-duration,data-wf-url,data-wf-statusattributes on each.wf-bar..waterfall-ruler-row,.wf-ruler-label-placeholder,.wf-ruler-ticks,.wf-ruler-tick, gridline styling on.wf-track, and.wf-tooltip/.wf-tooltip-urlstyles.mouseenter/mousemove/
mouseleaveevent bindings on.wf-barelements, with viewport-boundschecking to avoid tooltip clipping off-screen.
Details_page_renders_waterfall_section_with_ruler_and_tooltips_when_outgoing_requests_exist,verifying the ruler markup,
data-wf-*attributes, and correct HTML-encoding.Security
data-wf-urluses the existingGetDisplayTarget()redaction output —never the raw request URL — so redacted/sensitive URL data is never
leaked into the tooltip.
data-wf-*attribute values are HTML-encoded server-side beforerendering, and the client-side tooltip script escapes values again before
inserting into the DOM (defense in depth against XSS).
Testing
dotnet test: all tests passing, no regressions.ShopApi/SampleApi:/demo/ExecuteExternalRequests(POST), opened/debug/{id}.target URL, and status (verified on both success (201/200) calls).
mousemoveand stays within viewport bounds.