From 1f1feed3ae1772d3cf73a7140cb3c9363e839832 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Sat, 24 Dec 2022 09:54:05 +0100 Subject: [PATCH] fix limit weblog buffer --- src/web/WebLogService.cpp | 17 ++++++++++------- src/web/WebLogService.h | 1 + 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/web/WebLogService.cpp b/src/web/WebLogService.cpp index 146eaa2c1..3c85b0b99 100644 --- a/src/web/WebLogService.cpp +++ b/src/web/WebLogService.cpp @@ -54,6 +54,7 @@ void WebLogService::begin() { void WebLogService::start() { EMSESP::webSettingsService.read([&](WebSettings & settings) { maximum_log_messages_ = settings.weblog_buffer; + limit_log_messages_ = maximum_log_messages_; compact_ = settings.weblog_compact; uuid::log::Logger::register_handler(this, (uuid::log::Level)settings.weblog_level); }); @@ -78,10 +79,10 @@ size_t WebLogService::maximum_log_messages() const { } void WebLogService::maximum_log_messages(size_t count) { - if (count > maximum_log_messages_ && ESP.getMaxAllocHeap() < 41984) { - return; - } maximum_log_messages_ = std::max((size_t)1, count); + if (limit_log_messages_ > maximum_log_messages_) { + limit_log_messages_ = maximum_log_messages_; + } while (log_messages_.size() > maximum_log_messages_) { log_messages_.pop_front(); } @@ -114,12 +115,14 @@ WebLogService::QueuedLogMessage::QueuedLogMessage(unsigned long id, std::shared_ void WebLogService::operator<<(std::shared_ptr message) { #ifndef EMSESP_STANDALONE - if (maximum_log_messages_ > 10 && ESP.getMaxAllocHeap() < 41984) { - maximum_log_messages(maximum_log_messages_ > 25 ? maximum_log_messages_ - 25 : 10); - // EMSESP::logger().warning("Low memory: WebLog buffer reduced to %d entries", maximum_log_messages_); + size_t maxAlloc = ESP.getMaxAllocHeap(); + if (limit_log_messages_ > 5 && maxAlloc < 446080) { + --limit_log_messages_; + } else if (limit_log_messages_ < maximum_log_messages_ && maxAlloc > 51200) { + ++limit_log_messages_; } #endif - if (log_messages_.size() >= maximum_log_messages_) { + while (log_messages_.size() >= limit_log_messages_) { log_messages_.pop_front(); } diff --git a/src/web/WebLogService.h b/src/web/WebLogService.h index 1a8b4bd8c..de23fafa2 100644 --- a/src/web/WebLogService.h +++ b/src/web/WebLogService.h @@ -70,6 +70,7 @@ class WebLogService : public uuid::log::Handler { uint64_t last_transmit_ = 0; // Last transmit time size_t maximum_log_messages_ = MAX_LOG_MESSAGES; // Maximum number of log messages to buffer before they are output + size_t limit_log_messages_ = MAX_LOG_MESSAGES; // dynamic limit unsigned long log_message_id_ = 0; // The next identifier to use for queued log messages unsigned long log_message_id_tail_ = 0; // last event shown on the screen after fetch std::deque log_messages_; // Queued log messages, in the order they were received