mirror of
https://github.com/meshtastic/firmware.git
synced 2025-08-22 13:08:06 +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 ===
|
// === Layout ===
|
||||||
const int rowYOffset = FONT_HEIGHT_SMALL - 3;
|
const int rowYOffset = FONT_HEIGHT_SMALL - 3;
|
||||||
const int barHeight = 6;
|
const int barHeight = 6;
|
||||||
|
|
||||||
const int labelX = x;
|
const int labelX = x;
|
||||||
const int barsOffset = (screenWidth > 128) ? 24 : 0;
|
const int barsOffset = (screenWidth > 128) ? 24 : 0;
|
||||||
const int barX = x + 40 + barsOffset;
|
const int barX = x + 40 + barsOffset;
|
||||||
@ -2496,9 +2495,14 @@ static void drawMemoryScreen(OLEDDisplay *display, OLEDDisplayUiState *state, in
|
|||||||
|
|
||||||
int rowY = y + rowYOffset;
|
int rowY = y + rowYOffset;
|
||||||
|
|
||||||
auto drawUsageRow = [&](const char *label, uint32_t used, uint32_t total) {
|
// === Heap delta tracking ===
|
||||||
if (total == 0)
|
static uint32_t previousHeapFree = 0;
|
||||||
return;
|
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;
|
int percent = (used * 100) / total;
|
||||||
|
|
||||||
@ -2535,6 +2539,42 @@ static void drawMemoryScreen(OLEDDisplay *display, OLEDDisplayUiState *state, in
|
|||||||
display->drawString(SCREEN_WIDTH - 2, rowY, combinedStr);
|
display->drawString(SCREEN_WIDTH - 2, rowY, combinedStr);
|
||||||
|
|
||||||
rowY += rowYOffset;
|
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 ===
|
// === Memory values ===
|
||||||
@ -2561,7 +2601,7 @@ static void drawMemoryScreen(OLEDDisplay *display, OLEDDisplayUiState *state, in
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// === Draw memory rows
|
// === Draw memory rows
|
||||||
drawUsageRow("Heap:", heapUsed, heapTotal);
|
drawUsageRow("Heap:", heapUsed, heapTotal, true);
|
||||||
drawUsageRow("PSRAM:", psramUsed, psramTotal);
|
drawUsageRow("PSRAM:", psramUsed, psramTotal);
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
if (flashTotal > 0)
|
if (flashTotal > 0)
|
||||||
@ -2569,6 +2609,22 @@ static void drawMemoryScreen(OLEDDisplay *display, OLEDDisplayUiState *state, in
|
|||||||
#endif
|
#endif
|
||||||
if (hasSD && sdTotal > 0)
|
if (hasSD && sdTotal > 0)
|
||||||
drawUsageRow("SD:", sdUsed, sdTotal);
|
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)
|
#if defined(ESP_PLATFORM) && defined(USE_ST7789)
|
||||||
|
Loading…
Reference in New Issue
Block a user