SIGN IN SIGN UP

perf(start-client-core): O(1) buffer drain in client frame decoder (#8009)

The frame decoder dropped consumed chunks from its buffer with
bufferList.shift(), which is O(n). When a single large frame (e.g. a big
RawStream payload) is assembled from many small network reads, the
extract loop calls shift() once per chunk, making reassembly O(n^2).

Track the first un-consumed chunk with a head pointer and advance it in
O(1) instead of shifting. Consumed slots are released for GC, and the
buffer is compacted when fully drained (O(1) reset) or once the consumed
prefix grows past a small threshold (amortized O(1) per chunk).

A micro-benchmark draining 1000 small chunks is ~11x faster.

Co-authored-by: Yagiz Nizipli <yagiz@nizipli.com>
F
Flo committed
c59788ca20f2d2e7f264a859ebe01b7646ba3154
Parent: 5253e70
Committed by GitHub <noreply@github.com> on 8/8/2026, 5:20:41 PM