Free Heap when not on Message screen

This commit is contained in:
HarukiToreda
2025-10-15 03:06:59 -04:00
parent 62eaabc940
commit c8f3cbb0f9
5 changed files with 35 additions and 9 deletions

View File

@@ -481,6 +481,7 @@ void menuHandler::messageResponseMenu()
} else if (selected == DismissAll) {
messageStore.clearAllMessages();
graphics::MessageRenderer::clearThreadRegistries();
graphics::MessageRenderer::clearMessageCache();
} else if (selected == DismissOldest) {
auto mode = graphics::MessageRenderer::getThreadMode();
int ch = graphics::MessageRenderer::getThreadChannel();
@@ -919,9 +920,6 @@ void menuHandler::favoriteBaseMenu()
graphics::MessageRenderer::setThreadMode(graphics::MessageRenderer::ThreadMode::DIRECT, -1,
graphics::UIRenderer::currentFavoriteNodeNum);
// Reset scroll state for a fresh view
graphics::MessageRenderer::resetScrollState();
// Manually create and send a UIFrameEvent to trigger the jump
UIFrameEvent evt;
evt.action = UIFrameEvent::Action::SWITCH_TO_TEXTMESSAGE;

View File

@@ -209,8 +209,19 @@ void resetScrollState()
scrollStartDelay = millis();
lastTime = millis();
didReset = false; // <-- now valid
didReset = false;
}
// Fully free cached message data from heap
void clearMessageCache()
{
std::vector<std::string>().swap(cachedLines);
std::vector<int>().swap(cachedHeights);
// Reset scroll so we rebuild cleanly next time we enter the screen
resetScrollState();
}
// Current thread state
static ThreadMode currentMode = ThreadMode::ALL;
static int currentChannel = -1;

View File

@@ -60,6 +60,9 @@ void setThreadFor(const StoredMessage &sm, const meshtastic_MeshPacket &packet);
// Handles a new incoming/outgoing message: banner, wake, thread select, scroll reset
void handleNewMessage(const StoredMessage &sm, const meshtastic_MeshPacket &packet);
// Clear Message Line Cache from Message Renderer
void clearMessageCache();
} // namespace MessageRenderer
} // namespace graphics
#endif