From d00fc588d3c25f236ff603c524f7a669c7b429b7 Mon Sep 17 00:00:00 2001 From: Jared Dohrman Date: Fri, 17 Apr 2026 21:05:47 +1000 Subject: [PATCH] fix(web-panel): apply 4-color thresholds to largest-block memory meters --- src/helpers/web/WebPanelServer.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/helpers/web/WebPanelServer.cpp b/src/helpers/web/WebPanelServer.cpp index 23d2b73a..74e94865 100644 --- a/src/helpers/web/WebPanelServer.cpp +++ b/src/helpers/web/WebPanelServer.cpp @@ -1340,6 +1340,13 @@ const char kWebPanelAppHtml[] PROGMEM = R"HTML( if (percent >= 35) return "warn"; return "bad"; } + function toneForLargestBlockPercent(percent) { + if (!Number.isFinite(percent)) return "bad"; + if (percent >= 75) return ""; + if (percent >= 55) return "ok"; + if (percent >= 35) return "warn"; + return "bad"; + } function colorForHeapFreePercent(percent) { const tone = toneForHeapFreePercent(percent); if (tone === "ok") return "#6ea43f"; @@ -1511,11 +1518,13 @@ const char kWebPanelAppHtml[] PROGMEM = R"HTML( const psramFree = memory.psram_free || 0; const psramMax = memory.psram_max || 0; const heapFreePct = pctRange(heapFree, 0, 128 * 1024); + const heapLargestPct = pctRatio(heapMax, heapFree); + const psramLargestPct = pctRatio(psramMax, psramFree); return `

Memory

${renderMeter("Heap Free", formatBytes(heapFree), heapFreePct, "total free heap", toneForHeapFreePercent(heapFreePct))} - ${renderMeter("Heap Largest Block", formatBytes(heapMax), pctRatio(heapMax, heapFree), "largest alloc vs free", false)} - ${renderMeter("PSRAM Largest Block", formatBytes(psramMax), pctRatio(psramMax, psramFree), "largest alloc vs free", false)} + ${renderMeter("Heap Largest Block", formatBytes(heapMax), heapLargestPct, "largest alloc vs free", toneForLargestBlockPercent(heapLargestPct))} + ${renderMeter("PSRAM Largest Block", formatBytes(psramMax), psramLargestPct, "largest alloc vs free", toneForLargestBlockPercent(psramLargestPct))}
${renderMetric("Heap Free", formatBytes(heapFree))} ${renderMetric("Heap Min", formatBytes(memory.heap_min || 0))}