mirror of
https://github.com/meshtastic/firmware.git
synced 2025-10-27 15:02:41 +00:00
Free Heap when not on Message screen
This commit is contained in:
parent
62eaabc940
commit
c8f3cbb0f9
@ -251,7 +251,7 @@ void MessageStore::saveToFlash()
|
|||||||
|
|
||||||
void MessageStore::loadFromFlash()
|
void MessageStore::loadFromFlash()
|
||||||
{
|
{
|
||||||
liveMessages.clear();
|
std::deque<StoredMessage>().swap(liveMessages);
|
||||||
resetMessagePool(); // reset pool when loading
|
resetMessagePool(); // reset pool when loading
|
||||||
|
|
||||||
#ifdef FSCom
|
#ifdef FSCom
|
||||||
@ -289,7 +289,7 @@ void MessageStore::loadFromFlash() {}
|
|||||||
// Clear all messages (RAM + persisted queue)
|
// Clear all messages (RAM + persisted queue)
|
||||||
void MessageStore::clearAllMessages()
|
void MessageStore::clearAllMessages()
|
||||||
{
|
{
|
||||||
liveMessages.clear();
|
std::deque<StoredMessage>().swap(liveMessages);
|
||||||
resetMessagePool();
|
resetMessagePool();
|
||||||
|
|
||||||
#ifdef FSCom
|
#ifdef FSCom
|
||||||
|
|||||||
@ -715,6 +715,23 @@ int32_t Screen::runOnce()
|
|||||||
if (displayHeight == 0) {
|
if (displayHeight == 0) {
|
||||||
displayHeight = dispdev->getHeight();
|
displayHeight = dispdev->getHeight();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Detect frame transitions and clear message cache when leaving text message screen
|
||||||
|
{
|
||||||
|
static int8_t lastFrameIndex = -1;
|
||||||
|
int8_t currentFrameIndex = ui->getUiState()->currentFrame;
|
||||||
|
int8_t textMsgIndex = framesetInfo.positions.textMessage;
|
||||||
|
|
||||||
|
if (lastFrameIndex != -1 && currentFrameIndex != lastFrameIndex) {
|
||||||
|
|
||||||
|
if (lastFrameIndex == textMsgIndex && currentFrameIndex != textMsgIndex) {
|
||||||
|
graphics::MessageRenderer::clearMessageCache();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lastFrameIndex = currentFrameIndex;
|
||||||
|
}
|
||||||
|
|
||||||
menuHandler::handleMenuSwitch(dispdev);
|
menuHandler::handleMenuSwitch(dispdev);
|
||||||
|
|
||||||
// Show boot screen for first logo_timeout seconds, then switch to normal operation.
|
// Show boot screen for first logo_timeout seconds, then switch to normal operation.
|
||||||
@ -1320,9 +1337,6 @@ void Screen::showFrame(FrameDirection direction)
|
|||||||
|
|
||||||
lastScreenTransition = millis();
|
lastScreenTransition = millis();
|
||||||
setFastFramerate();
|
setFastFramerate();
|
||||||
|
|
||||||
// Reset scroll state when switching away from text message screen
|
|
||||||
graphics::MessageRenderer::resetScrollState();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -481,6 +481,7 @@ void menuHandler::messageResponseMenu()
|
|||||||
} else if (selected == DismissAll) {
|
} else if (selected == DismissAll) {
|
||||||
messageStore.clearAllMessages();
|
messageStore.clearAllMessages();
|
||||||
graphics::MessageRenderer::clearThreadRegistries();
|
graphics::MessageRenderer::clearThreadRegistries();
|
||||||
|
graphics::MessageRenderer::clearMessageCache();
|
||||||
} else if (selected == DismissOldest) {
|
} else if (selected == DismissOldest) {
|
||||||
auto mode = graphics::MessageRenderer::getThreadMode();
|
auto mode = graphics::MessageRenderer::getThreadMode();
|
||||||
int ch = graphics::MessageRenderer::getThreadChannel();
|
int ch = graphics::MessageRenderer::getThreadChannel();
|
||||||
@ -919,9 +920,6 @@ void menuHandler::favoriteBaseMenu()
|
|||||||
graphics::MessageRenderer::setThreadMode(graphics::MessageRenderer::ThreadMode::DIRECT, -1,
|
graphics::MessageRenderer::setThreadMode(graphics::MessageRenderer::ThreadMode::DIRECT, -1,
|
||||||
graphics::UIRenderer::currentFavoriteNodeNum);
|
graphics::UIRenderer::currentFavoriteNodeNum);
|
||||||
|
|
||||||
// Reset scroll state for a fresh view
|
|
||||||
graphics::MessageRenderer::resetScrollState();
|
|
||||||
|
|
||||||
// Manually create and send a UIFrameEvent to trigger the jump
|
// Manually create and send a UIFrameEvent to trigger the jump
|
||||||
UIFrameEvent evt;
|
UIFrameEvent evt;
|
||||||
evt.action = UIFrameEvent::Action::SWITCH_TO_TEXTMESSAGE;
|
evt.action = UIFrameEvent::Action::SWITCH_TO_TEXTMESSAGE;
|
||||||
|
|||||||
@ -209,8 +209,19 @@ void resetScrollState()
|
|||||||
scrollStartDelay = millis();
|
scrollStartDelay = millis();
|
||||||
lastTime = 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
|
// Current thread state
|
||||||
static ThreadMode currentMode = ThreadMode::ALL;
|
static ThreadMode currentMode = ThreadMode::ALL;
|
||||||
static int currentChannel = -1;
|
static int currentChannel = -1;
|
||||||
|
|||||||
@ -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
|
// Handles a new incoming/outgoing message: banner, wake, thread select, scroll reset
|
||||||
void handleNewMessage(const StoredMessage &sm, const meshtastic_MeshPacket &packet);
|
void handleNewMessage(const StoredMessage &sm, const meshtastic_MeshPacket &packet);
|
||||||
|
|
||||||
|
// Clear Message Line Cache from Message Renderer
|
||||||
|
void clearMessageCache();
|
||||||
|
|
||||||
} // namespace MessageRenderer
|
} // namespace MessageRenderer
|
||||||
} // namespace graphics
|
} // namespace graphics
|
||||||
#endif
|
#endif
|
||||||
Loading…
Reference in New Issue
Block a user