Conversation
Add a production-facing Http3Client::webtransport_datagram_queue_capacity, so a caller (e.g. a content-process credit grant) can read a session's outgoing-datagram queue state without going through the test-only path. The underlying transport-level DatagramQueueCapacity snapshot and per-session accessor already existed but were only reachable from #[cfg(test)] code; drop that gate now that there's a real caller.
|
This PR is part of a stack of 9 bookmarks:
Created with jj-stack |
There was a problem hiding this comment.
Copilot review overview
🟢 Approval recommended
No blocking issues remain, and the trait change is consistent with the documented compatibility policy for main.
Review effort: Balanced
Findings: None
What changed in this PR
Exposes per-session outgoing datagram queue capacity through the WebTransport client API.
Changes:
- Adds a capacity accessor with WebTransport session validation.
- Preserves outgoing datagram statistics during session cleanup.
- Tests queue isolation, invalid session IDs, and cleanup accounting.
| File | Description |
|---|---|
| neqo-http3/tests/connect_udp.rs | Tests rejection of CONNECT-UDP sessions. |
| neqo-http3/src/webtransport.rs | Exposes the client capacity accessor. |
| neqo-http3/src/features/extended_connect/tests/webtransport/datagrams.rs | Tests capacity isolation and cleanup statistics. |
| neqo-http3/src/features/extended_connect/session.rs | Makes the capacity helper available outside tests. |
| neqo-http3/src/connection.rs | Validates capacity requests and records cleanup statistics. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## users/jesup/report_datagrams #4037 +/- ##
=============================================================
Coverage 96.92% 96.93%
=============================================================
Files 119 119
Lines 41579 41584 +5
Branches 41579 41584 +5
=============================================================
+ Hits 40301 40308 +7
+ Misses 1254 1252 -2
Partials 24 24
Flags with carried forward coverage won't be shown. Click here to find out more.
|
Failed Interop TestsQUIC Interop Runner, client vs. server, differences relative to
All resultsSucceeded Interop TestsQUIC Interop Runner, client vs. server neqo-pr as client
neqo-pr as server
Unsupported Interop TestsQUIC Interop Runner, client vs. server neqo-pr as client
neqo-pr as server
|
Merging this PR will improve performance by 4.41%
Performance Changes
Tip Curious why performance improved? Comment Comparing |
Benchmark resultsNo significant performance differences relative to 0989fca. All resultstransfer/1-conn/1-100mb-req (aka. Upload)/mtu-1500 time: [49.628 ms 49.663 ms 49.698 ms]
thrpt: [1.9650 GiB/s 1.9664 GiB/s 1.9678 GiB/s]
Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high mildtransfer/1-conn/1-100mb-resp (aka. Download)/mtu-1500 time: [49.230 ms 49.275 ms 49.322 ms]
thrpt: [1.9800 GiB/s 1.9819 GiB/s 1.9837 GiB/s]
Found 3 outliers among 100 measurements (3.00%)
3 (3.00%) high mildtransfer/1-conn/1-1b-resp (aka. HPS)/mtu-1500 time: [2.9813 ms 2.9823 ms 2.9832 ms]
thrpt: [335.21 B/s 335.31 B/s 335.42 B/s]
Found 10 outliers among 100 measurements (10.00%)
4 (4.00%) low mild
4 (4.00%) high mild
2 (2.00%) high severetransfer/1-conn/10_000-parallel-1b-resp (aka. RPS)/mtu-1500 time: [67.187 ms 67.472 ms 67.761 ms]
thrpt: [147.58 Kelem/s 148.21 Kelem/s 148.84 Kelem/s]
Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high mildstreams-flow-controlled/walltime/1-streams/each-4194304-bytes time: [10.395 ms 10.397 ms 10.399 ms]
thrpt: [384.65 MiB/s 384.73 MiB/s 384.81 MiB/s]
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildstreams-flow-controlled/walltime/10-streams/each-1048576-bytes time: [28.012 ms 28.020 ms 28.029 ms]
thrpt: [356.78 MiB/s 356.89 MiB/s 357.00 MiB/s]
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildstreams/walltime/1-streams/each-1000-bytes time: [131.48 µs 132.07 µs 132.83 µs]
thrpt: [7.1798 MiB/s 7.2207 MiB/s 7.2535 MiB/s]
Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high mildstreams/walltime/1000-streams/each-1-bytes time: [3.7416 ms 3.7551 ms 3.7683 ms]
thrpt: [259.15 KiB/s 260.07 KiB/s 261.00 KiB/s]streams/walltime/1000-streams/each-1000-bytes time: [11.143 ms 11.147 ms 11.151 ms]
thrpt: [85.523 MiB/s 85.555 MiB/s 85.587 MiB/s]
Found 3 outliers among 100 measurements (3.00%)
3 (3.00%) low mildtransfer/walltime/pacing-false/same-seed time: [2.0423 ms 2.0431 ms 2.0441 ms]
thrpt: [1.9110 GiB/s 1.9119 GiB/s 1.9126 GiB/s]transfer/walltime/pacing-false/varying-seeds time: [2.0499 ms 2.0508 ms 2.0518 ms]
thrpt: [1.9038 GiB/s 1.9048 GiB/s 1.9056 GiB/s]transfer/walltime/pacing-true/same-seed time: [2.0738 ms 2.0750 ms 2.0765 ms]
thrpt: [1.8812 GiB/s 1.8825 GiB/s 1.8836 GiB/s]transfer/walltime/pacing-true/varying-seeds time: [2.1143 ms 2.1164 ms 2.1188 ms]
thrpt: [1.8436 GiB/s 1.8457 GiB/s 1.8475 GiB/s]
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildInstructions per cycleCriterion reported no significant timing changes. All benchmarks
Profiles for profiler.firefox.com (62)
Download data for |
Client/server transfer resultsPerformance differences relative to 0989fca. Transfer of 33554432 bytes over loopback, min. 100 runs. All unit-less numbers are in milliseconds.
Table above only shows statistically significant changes. See all results below. All resultsTransfer of 33554432 bytes over loopback, min. 100 runs. All unit-less numbers are in milliseconds.
Download data for |
No description provided.