2012-12-20 00:45:04 -04:00
|
|
|
#ifndef AP_PERFMON_H
|
|
|
|
#define AP_PERFMON_H
|
|
|
|
|
|
|
|
// macros to make integrating into code easier
|
|
|
|
#define AP_PERFMON_REGISTER static uint8_t myFunc = AP_PerfMon::recordFunctionName(__func__); AP_PerfMon perfMon(myFunc);
|
|
|
|
#define AP_PERFMON_REGISTER_NAME(functionName) static uint8_t myFunc = AP_PerfMon::recordFunctionName(functionName); AP_PerfMon perfMon(myFunc);
|
|
|
|
|
2013-10-11 00:20:50 -03:00
|
|
|
#define AP_PERFMON_REGISTER_FN(func_name) static uint8_t func_name ## _num = AP_PerfMon::recordFunctionName(#func_name);
|
|
|
|
#define AP_PERFMON_FUNCTION(func_name) AP_PerfMon perfMon(func_name ## _num);
|
|
|
|
|
|
|
|
|
|
|
|
#define PERFMON_MAX_FUNCTIONS 12
|
2012-12-20 00:45:04 -04:00
|
|
|
#define PERFMON_FUNCTION_NAME_LENGTH 10
|
|
|
|
|
2015-08-11 03:28:45 -03:00
|
|
|
#include <AP_HAL/AP_HAL.h>
|
|
|
|
#include <AP_Math/AP_Math.h>
|
2012-12-20 00:45:04 -04:00
|
|
|
|
|
|
|
class AP_PerfMon
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
// static methods
|
|
|
|
static uint8_t recordFunctionName(const char funcName[]);
|
|
|
|
static void DisplayResults();
|
|
|
|
static void ClearAll();
|
|
|
|
static void DisplayAndClear(uint32_t display_after_seconds); // will display results after this many milliseconds. should be called regularly
|
|
|
|
|
|
|
|
// public methods
|
|
|
|
AP_PerfMon(uint8_t funcNum); // Constructor - records function start time
|
|
|
|
~AP_PerfMon(); // Destructor - records function end time
|
|
|
|
void stop(); // stops recording time spent in this function - meant to be called by a child.
|
|
|
|
void start(); // restarts recording time spent in this function
|
|
|
|
|
|
|
|
private:
|
|
|
|
// static variables
|
|
|
|
static uint8_t nextFuncNum;
|
|
|
|
static char functionNames[PERFMON_MAX_FUNCTIONS][PERFMON_FUNCTION_NAME_LENGTH];
|
|
|
|
static uint32_t time[PERFMON_MAX_FUNCTIONS];
|
|
|
|
static uint32_t numCalls[PERFMON_MAX_FUNCTIONS];
|
|
|
|
static uint32_t maxTime[PERFMON_MAX_FUNCTIONS];
|
|
|
|
static uint32_t allStartTime;
|
|
|
|
static uint32_t allEndTime;
|
|
|
|
static AP_PerfMon* lastCreated;
|
|
|
|
static bool _enabled;
|
|
|
|
|
|
|
|
// instance variables
|
|
|
|
uint8_t _funcNum;
|
|
|
|
unsigned long _startTime;
|
|
|
|
unsigned long _time_this_iteration;
|
|
|
|
AP_PerfMon* _parent;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif // AP_PERFMON_H
|