perf(client-mod): candidate WebSocket codec, codecBenchmark and decision rule

TCP_NODELAY on ws/wss; ClientFrameEncoder (one message per batch) and
ClientFrameDecoder (retained slices) with tests. The decision rule is
recorded before the measured runs; the verdict follows in a later commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
layue13andClaude Opus 5.5 committed 2026-10-23 16:29:46 +08:00
1 parent 6224d3deb4
commit 1decc44081
11 files changed
+1720 -53

No files matched your search

@@ -0,0 +1,14 @@
# Client mod: own WebSocket codec instead of Netty 4.0.10's — 2026-10-23
## Decision rule (set before the measured runs)
Encoder (`ClientFrameEncoder`) is kept only if all hold:
- median messages per 1000 packets is at most a third of the base median;
- median event-loop CPU ns/packet is not above the base median;
- a lone packet still leaves in the event-loop task right after its write (`ClientFrameEncoderTest.lonePacketLeavesInTheTaskRightAfterItsWrite`).
Decoder (`ClientFrameDecoder`) is kept only if, in both decode views (codec only, and codec plus vanilla's splitter), the median event-loop CPU ns/byte and the median allocated bytes/byte are each at least 25% below the base median, and the candidate's min–max range does not overlap the base's for either metric.
If the decoder misses and the encoder meets its rule, only the encoder is kept.
Order: six JVMs, base/candidate/candidate/base/base/candidate (the starting variant alternates per pair), each with one warm-up phase and three measured phases per mode. Results are the median and [min–max] of the 9 measured phases per variant.