diff options
| author | Luke Hoersten <[email protected]> | 2026-06-20 21:01:23 -0500 |
|---|---|---|
| committer | Luke Hoersten <[email protected]> | 2026-06-20 21:01:23 -0500 |
| commit | a438a6303e94cea99f4f4c51017d958d0b44b0ac (patch) | |
| tree | 6817ead24ea7199d6e94a1f26cd9f9f7620cfdae /main/stream_server.c | |
| parent | d1c8d45d5dc8ae09f03e2f0a9c6b3ac1910b8cdc (diff) | |
README: stream-server task split is the critical change that closed the painted<sent gap
Document the architecture pivot. The per-frame budget table now
reflects the long-lived TCP stream socket on port 81 (replaced the
HTTP /frame pattern) and the new recv/decode/paint timings:
recv 14-18ms on the wire (pure body), dec ~5ms, paint <35us, with
decode-task idle ~30ms per frame waiting on recv.
The critical change wasn't a TCP tuning knob — it was splitting
recv off its own FreeRTOS task with a 3-buffer PSRAM ring and a
1-deep latest-frame slot to the decode/paint task (d1c8d45). The
single-task loop blocked the socket for 6ms during decode+paint,
which against the IDF-default 5760-byte window forced a stop-go
cycle that capped painted at ~17fps. Raising the window to 65535
made it worse (g2g grew to 17s) because lwIP RX couldn't drain
the bursts and there's no way to skip-oldest on the kernel queue.
The task split eliminated the coupling: recv-task drains
continuously regardless of decode timing, the kernel buffer stays
near-empty, and painted now matches sent at the source rate.
Backlog entries for body shrink and OTA marked done.
Diffstat (limited to 'main/stream_server.c')
0 files changed, 0 insertions, 0 deletions
