From 2af69f78a6179334c6f59d4273bd72ae170fb821 Mon Sep 17 00:00:00 2001 From: Luke Hoersten Date: Wed, 15 Jul 2026 19:36:56 -0500 Subject: scrypted: temp_c on the stats line; docs: triple-buffer model + window tuning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Scrypted per-stream stats line gains temp=C from /state temp_c — free thermal trending under streaming load. - README Display strategy rewritten for the tear-free triple-buffer model: why the deferred fb-index reload tears under double buffering, why scan-tracked buffer roles beat vsync-waiting, and the tear_guard_engaged counter. - New 'TCP window + EMAC tuning' section documenting the measured window raise, the EMAC-RX-pool-below-window RTO regression, and the pool >= TCP_WND invariant; stale 'window bump is safe but won't help' backlog text updated. - Memory strategy updated (3 fbs, decoder writes into them directly, stream body ring). --- scrypted/scrypted-viewport.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'scrypted/scrypted-viewport.ts') diff --git a/scrypted/scrypted-viewport.ts b/scrypted/scrypted-viewport.ts index b7f2c65..9ca42e7 100644 --- a/scrypted/scrypted-viewport.ts +++ b/scrypted/scrypted-viewport.ts @@ -1487,6 +1487,7 @@ class ScryptedViewportProvider extends ScryptedDeviceBase // missed /state never wedges the logger. let painted = "?", paintedMb = "?", g2g = "?", paintedNum = -1; let recvStr = "?", decStr = "?", paintStr = "?", idleStr = "?"; + let tempStr = "?"; try { const st: any = await fetch(`http://${v.host}/state`, { signal: AbortSignal.timeout(800), @@ -1501,6 +1502,9 @@ class ScryptedViewportProvider extends ScryptedDeviceBase paintStr = `${fs.paint_min_us}/${fs.paint_avg_us}/${fs.paint_max_us}`; idleStr = `${fs.idle_min_us}/${fs.idle_avg_us}/${fs.idle_max_us}`; } + // On-die junction temp (°C); free thermal trending under + // streaming load, the hottest thing this device does. + if (typeof st?.temp_c === "number") tempStr = st.temp_c.toFixed(1); if (fs?.last_paint_event_us_low) { const nowUsLow = (Date.now() * 1000) >>> 0; const diff = (nowUsLow - fs.last_paint_event_us_low) >>> 0; @@ -1541,7 +1545,7 @@ class ScryptedViewportProvider extends ScryptedDeviceBase `${mbPerSec.toFixed(2)}MB/s sent / ${paintedMb}MB/s painted | ` + `socket.write p50=${p50}ms p95=${p95}ms max=${max}ms backpressured=${socketBackpressured} bp=${framesSampled > 0 ? ((framesUnderBp / framesSampled) * 100).toFixed(0) : "?"}% ` + `node_buf=${(nodeBufBytes / 1024).toFixed(0)}KB≈${nodeBufMs}ms/${v.maxNodeBufMb}MB cap | ` + - `recv=${recvStr}us dec=${decStr}us paint=${paintStr}us idle=${idleStr}us | g2g=${g2g}`); + `recv=${recvStr}us dec=${decStr}us paint=${paintStr}us idle=${idleStr}us | temp=${tempStr}C | g2g=${g2g}`); droppedFrames = 0; droppedOldest = 0; -- cgit v1.2.3