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