Heap tracing (#1861)

* Update sdkconfig.esp32cam-dev-task-analysis.defaults

* Update defines.h

* Update platformio.ini

* Update main.cpp

* Update defines.h

* Update ClassFlowCNNGeneral.cpp

* Update platformio.ini
This commit is contained in:
Nicolas Liaudat
2023-01-18 22:57:11 +01:00
committed by GitHub
parent 0df54d1c5b
commit 17eb382b66
5 changed files with 83 additions and 2 deletions

View File

@@ -12,7 +12,12 @@
static const char* TAG = "CNN"; static const char* TAG = "CNN";
//#define DEBUG_DETAIL_ON //#ifdef CONFIG_HEAP_TRACING_STANDALONE
#ifdef HEAP_TRACING_CLASS_FLOW_CNN_GENERAL_DO_ALING_AND_CUT
#include <esp_heap_trace.h>
#define NUM_RECORDS 300
static heap_trace_record_t trace_record[NUM_RECORDS]; // This buffer must be in internal RAM
#endif
ClassFlowCNNGeneral::ClassFlowCNNGeneral(ClassFlowAlignment *_flowalign, t_CNNType _cnntype) : ClassFlowImage(NULL, TAG) ClassFlowCNNGeneral::ClassFlowCNNGeneral(ClassFlowAlignment *_flowalign, t_CNNType _cnntype) : ClassFlowImage(NULL, TAG)
@@ -462,6 +467,14 @@ string ClassFlowCNNGeneral::getHTMLSingleStep(string host)
bool ClassFlowCNNGeneral::doFlow(string time) bool ClassFlowCNNGeneral::doFlow(string time)
{ {
#ifdef HEAP_TRACING_CLASS_FLOW_CNN_GENERAL_DO_ALING_AND_CUT
//register a buffer to record the memory trace
ESP_ERROR_CHECK( heap_trace_init_standalone(trace_record, NUM_RECORDS) );
// start tracing
ESP_ERROR_CHECK( heap_trace_start(HEAP_TRACE_LEAKS) );
#endif
if (disabled) if (disabled)
return true; return true;
@@ -474,6 +487,12 @@ bool ClassFlowCNNGeneral::doFlow(string time)
doNeuralNetwork(time); doNeuralNetwork(time);
RemoveOldLogs(); RemoveOldLogs();
#ifdef HEAP_TRACING_CLASS_FLOW_CNN_GENERAL_DO_ALING_AND_CUT
ESP_ERROR_CHECK( heap_trace_stop() );
heap_trace_dump();
#endif
return true; return true;
} }

View File

@@ -33,6 +33,17 @@
// server_tflite.cpp // server_tflite.cpp
//#define TASK_ANALYSIS_ON //#define TASK_ANALYSIS_ON
//Memory leak tracing
//https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/heap_debug.html#heap-information
//need CONFIG_HEAP_TRACING_STANDALONE=y or #define CONFIG_HEAP_TRACING_STANDALONE
//all setup is predifined in [env:esp32cam-dev-task-analysis]
//#define HEAP_TRACING_MAIN_WIFI || HEAP_TRACING_MAIN_START //enable heap tracing per function in main.cpp
//all defines in [env:esp32cam-dev-task-analysis]
//#define HEAP_TRACING_MAIN_WIFI
//#define HEAP_TRACING_MAIN_START
//#define HEAP_TRACING_CLASS_FLOW_CNN_GENERAL_DO_ALING_AND_CUT
/* Uncomment this to keep the logfile open for appending. /* Uncomment this to keep the logfile open for appending.
* If commented out, the logfile gets opened/closed for each log measage (old behaviour) */ * If commented out, the logfile gets opened/closed for each log measage (old behaviour) */
// ClassLogFile // ClassLogFile

View File

@@ -62,6 +62,13 @@
#endif #endif
#endif #endif
//#ifdef CONFIG_HEAP_TRACING_STANDALONE
#if defined HEAP_TRACING_MAIN_WIFI || defined HEAP_TRACING_MAIN_START
#include <esp_heap_trace.h>
#define NUM_RECORDS 300
static heap_trace_record_t trace_record[NUM_RECORDS]; // This buffer must be in internal RAM
#endif
extern const char* GIT_TAG; extern const char* GIT_TAG;
extern const char* GIT_REV; extern const char* GIT_REV;
extern const char* GIT_BRANCH; extern const char* GIT_BRANCH;
@@ -162,6 +169,13 @@ void task_MainInitError_blink(void *pvParameter)
extern "C" void app_main(void) extern "C" void app_main(void)
{ {
//#ifdef CONFIG_HEAP_TRACING_STANDALONE
#if defined HEAP_TRACING_MAIN_WIFI || defined HEAP_TRACING_MAIN_START
//register a buffer to record the memory trace
ESP_ERROR_CHECK( heap_trace_init_standalone(trace_record, NUM_RECORDS) );
#endif
TickType_t xDelay; TickType_t xDelay;
#ifdef DISABLE_BROWNOUT_DETECTOR #ifdef DISABLE_BROWNOUT_DETECTOR
@@ -224,6 +238,10 @@ extern "C" void app_main(void)
CheckStartAPMode(); // if no wlan.ini and/or config.ini --> AP ist startet and this function does not exit anymore until reboot CheckStartAPMode(); // if no wlan.ini and/or config.ini --> AP ist startet and this function does not exit anymore until reboot
#endif #endif
#ifdef HEAP_TRACING_MAIN_WIFI
ESP_ERROR_CHECK( heap_trace_start(HEAP_TRACE_LEAKS) );
#endif
char *ssid = NULL, *passwd = NULL, *hostname = NULL, *ip = NULL, *gateway = NULL, *netmask = NULL, *dns = NULL; int rssithreashold = 0; char *ssid = NULL, *passwd = NULL, *hostname = NULL, *ip = NULL, *gateway = NULL, *netmask = NULL, *dns = NULL; int rssithreashold = 0;
LoadWlanFromFile(WLAN_CONFIG_FILE, ssid, passwd, hostname, ip, gateway, netmask, dns, rssithreashold); LoadWlanFromFile(WLAN_CONFIG_FILE, ssid, passwd, hostname, ip, gateway, netmask, dns, rssithreashold);
@@ -257,6 +275,15 @@ extern "C" void app_main(void)
ESP_LOGD(TAG, "main: sleep for: %ldms", (long) xDelay); ESP_LOGD(TAG, "main: sleep for: %ldms", (long) xDelay);
vTaskDelay( xDelay ); vTaskDelay( xDelay );
#ifdef HEAP_TRACING_MAIN_WIFI
ESP_ERROR_CHECK( heap_trace_stop() );
heap_trace_dump();
#endif
#ifdef HEAP_TRACING_MAIN_START
ESP_ERROR_CHECK( heap_trace_start(HEAP_TRACE_LEAKS) );
#endif
LogFile.WriteToFile(ESP_LOG_INFO, TAG, "================================================="); LogFile.WriteToFile(ESP_LOG_INFO, TAG, "=================================================");
LogFile.WriteToFile(ESP_LOG_INFO, TAG, "================== Main Started ================="); LogFile.WriteToFile(ESP_LOG_INFO, TAG, "================== Main Started =================");
LogFile.WriteToFile(ESP_LOG_INFO, TAG, "================================================="); LogFile.WriteToFile(ESP_LOG_INFO, TAG, "=================================================");
@@ -269,6 +296,11 @@ extern "C" void app_main(void)
std::string zw = getCurrentTimeString("%Y%m%d-%H%M%S"); std::string zw = getCurrentTimeString("%Y%m%d-%H%M%S");
ESP_LOGD(TAG, "time %s", zw.c_str()); ESP_LOGD(TAG, "time %s", zw.c_str());
#ifdef HEAP_TRACING_MAIN_START
ESP_ERROR_CHECK( heap_trace_stop() );
heap_trace_dump();
#endif
/* Check if PSRAM can be initalized */ /* Check if PSRAM can be initalized */
esp_err_t ret; esp_err_t ret;
ret = esp_spiram_init(); ret = esp_spiram_init();

View File

@@ -193,6 +193,10 @@ extends = env:esp32cam-dev, esp32cam-debug
build_flags = build_flags =
;-D DEBUG_DETAIL_ON ; if esp32cam-debug not in extends ;-D DEBUG_DETAIL_ON ; if esp32cam-debug not in extends
-D TASK_ANALYSIS_ON -D TASK_ANALYSIS_ON
;please use only one HEAP tracing at time.
-D HEAP_TRACING_MAIN_WIFI
;-D HEAP_TRACING_MAIN_START
;-D HEAP_TRACING_CLASS_FLOW_CNN_GENERAL_DO_ALING_AND_CUT
; Overwrite espcam build_flags to not include ENABLE_SOFTAP ; Overwrite espcam build_flags to not include ENABLE_SOFTAP

View File

@@ -1,3 +1,18 @@
CONFIG_FREERTOS_USE_TRACE_FACILITY=1 CONFIG_FREERTOS_USE_TRACE_FACILITY=1
CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID=y CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID=y
CONFIG_HEAP_TRACING_STANDALONE=y
CONFIG_HEAP_POISONING_LIGHT=y
CONFIG_HEAP_TASK_TRACKING=y
# General options for additional checks
CONFIG_HEAP_POISONING_COMPREHENSIVE=y
CONFIG_COMPILER_WARN_WRITE_STRINGS=y
CONFIG_BOOTLOADER_LOG_LEVEL_WARN=y
CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK=y
CONFIG_COMPILER_STACK_CHECK_MODE_STRONG=y
CONFIG_COMPILER_STACK_CHECK=y
CONFIG_ESP_TASK_WDT=n