mirror of
https://github.com/meshtastic/firmware.git
synced 2025-08-22 04:58:01 +00:00
Add heap leak counter will be removed to be toggled in the future.
This commit is contained in:
parent
2acb2fee79
commit
9993306751
@ -2488,7 +2488,6 @@ static void drawMemoryScreen(OLEDDisplay *display, OLEDDisplayUiState *state, in
|
||||
// === Layout ===
|
||||
const int rowYOffset = FONT_HEIGHT_SMALL - 3;
|
||||
const int barHeight = 6;
|
||||
|
||||
const int labelX = x;
|
||||
const int barsOffset = (screenWidth > 128) ? 24 : 0;
|
||||
const int barX = x + 40 + barsOffset;
|
||||
@ -2496,9 +2495,14 @@ static void drawMemoryScreen(OLEDDisplay *display, OLEDDisplayUiState *state, in
|
||||
|
||||
int rowY = y + rowYOffset;
|
||||
|
||||
auto drawUsageRow = [&](const char *label, uint32_t used, uint32_t total) {
|
||||
if (total == 0)
|
||||
return;
|
||||
// === Heap delta tracking ===
|
||||
static uint32_t previousHeapFree = 0;
|
||||
static int32_t lastHeapDelta = 0;
|
||||
static int32_t totalHeapDelta = 0;
|
||||
static int deltaChangeCount = 0;
|
||||
|
||||
auto drawUsageRow = [&](const char *label, uint32_t used, uint32_t total, bool isHeap = false) {
|
||||
if (total == 0) return;
|
||||
|
||||
int percent = (used * 100) / total;
|
||||
|
||||
@ -2535,6 +2539,42 @@ static void drawMemoryScreen(OLEDDisplay *display, OLEDDisplayUiState *state, in
|
||||
display->drawString(SCREEN_WIDTH - 2, rowY, combinedStr);
|
||||
|
||||
rowY += rowYOffset;
|
||||
|
||||
// === Heap delta (inline with heap row only)
|
||||
if (isHeap && previousHeapFree > 0) {
|
||||
int32_t delta = (int32_t)(memGet.getFreeHeap() - previousHeapFree);
|
||||
lastHeapDelta = delta;
|
||||
|
||||
if (delta != 0) {
|
||||
totalHeapDelta += delta;
|
||||
deltaChangeCount++;
|
||||
|
||||
char deltaStr[16];
|
||||
snprintf(deltaStr, sizeof(deltaStr), "%ld", delta);
|
||||
|
||||
int deltaX = centerX - display->getStringWidth(deltaStr) / 2 - 8;
|
||||
int deltaY = rowY + 1;
|
||||
|
||||
// Triangle
|
||||
if (delta > 0) {
|
||||
display->drawLine(deltaX, deltaY + 6, deltaX + 3, deltaY);
|
||||
display->drawLine(deltaX + 3, deltaY, deltaX + 6, deltaY + 6);
|
||||
display->drawLine(deltaX, deltaY + 6, deltaX + 6, deltaY + 6);
|
||||
} else {
|
||||
display->drawLine(deltaX, deltaY, deltaX + 3, deltaY + 6);
|
||||
display->drawLine(deltaX + 3, deltaY + 6, deltaX + 6, deltaY);
|
||||
display->drawLine(deltaX, deltaY, deltaX + 6, deltaY);
|
||||
}
|
||||
|
||||
display->setTextAlignment(TEXT_ALIGN_CENTER);
|
||||
display->drawString(centerX + 6, deltaY, deltaStr);
|
||||
rowY += rowYOffset;
|
||||
}
|
||||
}
|
||||
|
||||
if (isHeap) {
|
||||
previousHeapFree = memGet.getFreeHeap();
|
||||
}
|
||||
};
|
||||
|
||||
// === Memory values ===
|
||||
@ -2561,7 +2601,7 @@ static void drawMemoryScreen(OLEDDisplay *display, OLEDDisplayUiState *state, in
|
||||
#endif
|
||||
|
||||
// === Draw memory rows
|
||||
drawUsageRow("Heap:", heapUsed, heapTotal);
|
||||
drawUsageRow("Heap:", heapUsed, heapTotal, true);
|
||||
drawUsageRow("PSRAM:", psramUsed, psramTotal);
|
||||
#ifdef ESP32
|
||||
if (flashTotal > 0)
|
||||
@ -2569,6 +2609,22 @@ static void drawMemoryScreen(OLEDDisplay *display, OLEDDisplayUiState *state, in
|
||||
#endif
|
||||
if (hasSD && sdTotal > 0)
|
||||
drawUsageRow("SD:", sdUsed, sdTotal);
|
||||
|
||||
// === Final summary (always visible)
|
||||
char summaryStr[32];
|
||||
snprintf(summaryStr, sizeof(summaryStr), "seen: %dx total: %ldB", deltaChangeCount, totalHeapDelta);
|
||||
|
||||
// Draw triangle manually
|
||||
int triY = rowY + 4;
|
||||
int triX = centerX - display->getStringWidth(summaryStr) / 2 - 8;
|
||||
|
||||
display->drawLine(triX, triY + 6, triX + 3, triY);
|
||||
display->drawLine(triX + 3, triY, triX + 6, triY + 6);
|
||||
display->drawLine(triX, triY + 6, triX + 6, triY + 6);
|
||||
|
||||
// Draw the text to the right of the triangle
|
||||
display->setTextAlignment(TEXT_ALIGN_LEFT);
|
||||
display->drawString(triX + 10, rowY + 2, summaryStr);
|
||||
}
|
||||
|
||||
#if defined(ESP_PLATFORM) && defined(USE_ST7789)
|
||||
|
Loading…
Reference in New Issue
Block a user