fix: start web stats capture from boot on >=4MB PSRAM boards

Этот коммит содержится в:
Jared Dohrman
2026-04-17 14:42:51 +10:00
родитель 29aa60ea2f
Коммит 05fcffc838
4 изменённых файлов: 30 добавлений и 9 удалений
+18
Просмотреть файл
@@ -64,6 +64,14 @@ bool shouldUseLiveOnlyStats() {
#endif
}
bool hasBootAutoCapturePsram() {
#if defined(ESP32)
return psramFound() && ESP.getPsramSize() >= (4UL * 1024UL * 1024UL);
#else
return false;
#endif
}
template <typename T>
T* allocHistoryBuffer(size_t count) {
#if defined(ESP32)
@@ -291,6 +299,9 @@ void StatsHistory::begin(bool enabled, ArchiveStorage* archive) {
_enabled = enabled;
_next_summary_flush_ms = millis() + kSummaryFlushIntervalMs;
_next_event_flush_ms = millis() + kEventFlushIntervalMs;
if (_enabled && shouldAutoActivateFromBoot()) {
activate();
}
}
void StatsHistory::setArchive(ArchiveStorage* archive) {
@@ -315,6 +326,9 @@ void StatsHistory::setEnabled(bool enabled) {
_last_access_ms = 0;
_next_summary_flush_ms = millis() + kSummaryFlushIntervalMs;
_next_event_flush_ms = millis() + kEventFlushIntervalMs;
if (shouldAutoActivateFromBoot()) {
activate();
}
}
}
@@ -397,6 +411,10 @@ bool StatsHistory::supportsPersistence() const {
return !_live_only;
}
bool StatsHistory::shouldAutoActivateFromBoot() const {
return _enabled && !_live_only && hasBootAutoCapturePsram();
}
bool StatsHistory::isAccessActive(uint32_t now_ms) const {
if (!_live_only) {
return true;
+1
Просмотреть файл
@@ -106,6 +106,7 @@ private:
bool ensureBuffers();
void releaseBuffers();
bool supportsPersistence() const;
bool shouldAutoActivateFromBoot() const;
bool isAccessActive(uint32_t now_ms) const;
bool restoreSummaryLog();
bool restoreEventsLog();
+1 -1
Просмотреть файл
@@ -1684,7 +1684,7 @@ const char kWebPanelAppHtml[] PROGMEM = R"HTML(
function sparkStrokeColor(key, points) {
if (key === "packets") return "#d97706";
if (key === "signal") return "#3b82f6";
if (key === "noise_floor") return "#ef4444";
if (key === "noise_floor") return "#94a3b8";
if (key === "memory") {
const values = Array.isArray(points) ? points.map((item) => item && item[1]).filter((value) => Number.isFinite(value)) : [];
const current = values.length ? values[values.length - 1] : NaN;