Add heap leak counter will be removed to be toggled in the future.

This commit is contained in:
HarukiToreda 2025-03-31 14:34:01 -04:00
parent 2acb2fee79
commit 9993306751

View File

@ -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)