New micros clock

This commit is contained in:
2022-01-19 18:21:02 +01:00
parent 4d36c0a994
commit 247f89af97
2 changed files with 21 additions and 19 deletions

View File

@ -14,8 +14,10 @@ namespace {
constexpr const char * const TAG = "ESPCPPUTILS"; constexpr const char * const TAG = "ESPCPPUTILS";
} // namespace } // namespace
SchedulerTask::SchedulerTask(const char *name, void (&setupCallback)(), void (&loopCallback)(), std::chrono::milliseconds loopInterval, bool intervalImportant, std::string (*perfInfo)()) : SchedulerTask::SchedulerTask(const char *name, void (&setupCallback)(), void (&loopCallback)(), espchrono::millis_clock::duration loopInterval,
m_name{name}, m_setupCallback{setupCallback}, m_loopCallback{loopCallback}, m_loopInterval{loopInterval}, m_intervalImportant{intervalImportant}, m_perfInfo{perfInfo} bool intervalImportant, std::string (*perfInfo)()) :
m_name{name}, m_setupCallback{setupCallback}, m_loopCallback{loopCallback}, m_loopInterval{loopInterval},
m_intervalImportant{intervalImportant}, m_perfInfo{perfInfo}
{ {
} }
@ -53,10 +55,10 @@ trotzdem:
if (m_lastElapsed < 100ms) if (m_lastElapsed < 100ms)
ESP_LOGV(TAG, "task %s hang for %lldms (heap8=%zd)", ESP_LOGV(TAG, "task %s hang for %lldms (heap8=%zd)",
m_name, std::chrono::milliseconds{m_lastElapsed}.count(), heap_caps_get_free_size(MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT)); m_name, std::chrono::floor<std::chrono::milliseconds>(m_lastElapsed).count(), heap_caps_get_free_size(MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT));
else else
ESP_LOGW(TAG, "task %s hang for %lldms (heap8=%zd) %s", ESP_LOGW(TAG, "task %s hang for %lldms (heap8=%zd) %s",
m_name, std::chrono::milliseconds{m_lastElapsed}.count(), heap_caps_get_free_size(MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT), m_name, std::chrono::floor<std::chrono::milliseconds>(m_lastElapsed).count(), heap_caps_get_free_size(MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT),
m_perfInfo ? m_perfInfo().c_str() : ""); m_perfInfo ? m_perfInfo().c_str() : "");
} }
@ -64,7 +66,7 @@ void SchedulerTask::pushStats(bool printTask)
{ {
m_callCount = m_callCountTemp; m_callCount = m_callCountTemp;
m_totalElapsed = m_totalElapsedTemp; m_totalElapsed = m_totalElapsedTemp;
m_averageElapsed = m_callCount > 0 ? (m_totalElapsed / m_callCount) : std::chrono::milliseconds{}; m_averageElapsed = m_callCount > 0 ? (m_totalElapsed / m_callCount) : espchrono::millis_clock::duration{};
m_maxElapsed = m_maxElapsedTemp; m_maxElapsed = m_maxElapsedTemp;
m_callCountTemp = 0; m_callCountTemp = 0;
@ -74,9 +76,9 @@ void SchedulerTask::pushStats(bool printTask)
if (printTask) if (printTask)
ESP_LOGI(TAG, "name=%s, count=%i, last=%lldms, total=%lldms, max=%lldms", ESP_LOGI(TAG, "name=%s, count=%i, last=%lldms, total=%lldms, max=%lldms",
m_name, m_callCount, m_name, m_callCount,
std::chrono::milliseconds{m_lastElapsed}.count(), std::chrono::floor<std::chrono::milliseconds>(m_lastElapsed).count(),
std::chrono::milliseconds{m_totalElapsed}.count(), std::chrono::floor<std::chrono::milliseconds>(m_totalElapsed).count(),
std::chrono::milliseconds{m_maxElapsed}.count() std::chrono::floor<std::chrono::milliseconds>(m_maxElapsed).count()
); );
} }

View File

@ -14,13 +14,13 @@ class SchedulerTask
{ {
public: public:
SchedulerTask(const char *name, void (&setupCallback)(), void (&loopCallback)(), SchedulerTask(const char *name, void (&setupCallback)(), void (&loopCallback)(),
std::chrono::milliseconds loopInterval, bool intervalImportant = false, espchrono::millis_clock::duration loopInterval, bool intervalImportant = false,
std::string (*perfInfo)() = nullptr); std::string (*perfInfo)() = nullptr);
const char *name() const { return m_name; } const char *name() const { return m_name; }
const std::chrono::milliseconds &lastElapsed() const { return m_lastElapsed; } const espchrono::millis_clock::duration&lastElapsed() const { return m_lastElapsed; }
const std::chrono::milliseconds &averageElapsed() const { return m_averageElapsed; } const espchrono::millis_clock::duration&averageElapsed() const { return m_averageElapsed; }
const std::chrono::milliseconds &maxElapsed() const { return m_maxElapsed; } const espchrono::millis_clock::duration&maxElapsed() const { return m_maxElapsed; }
int callCount() const { return m_callCount; } int callCount() const { return m_callCount; }
void setup() const { m_setupCallback(); } void setup() const { m_setupCallback(); }
@ -31,21 +31,21 @@ private:
const char * const m_name; const char * const m_name;
void (&m_setupCallback)(); void (&m_setupCallback)();
void (&m_loopCallback)(); void (&m_loopCallback)();
const std::chrono::milliseconds m_loopInterval; const espchrono::millis_clock::duration m_loopInterval;
const bool m_intervalImportant; const bool m_intervalImportant;
std::string (* const m_perfInfo)(); std::string (* const m_perfInfo)();
std::optional<espchrono::millis_clock::time_point> m_lastUpdate; std::optional<espchrono::millis_clock::time_point> m_lastUpdate;
std::chrono::milliseconds m_lastElapsed; espchrono::millis_clock::duration m_lastElapsed;
std::chrono::milliseconds m_totalElapsed; espchrono::millis_clock::duration m_totalElapsed;
std::chrono::milliseconds m_averageElapsed; espchrono::millis_clock::duration m_averageElapsed;
std::chrono::milliseconds m_maxElapsed; espchrono::millis_clock::duration m_maxElapsed;
int m_callCount{}; int m_callCount{};
std::chrono::milliseconds m_totalElapsedTemp; espchrono::millis_clock::duration m_totalElapsedTemp;
std::chrono::milliseconds m_maxElapsedTemp; espchrono::millis_clock::duration m_maxElapsedTemp;
int m_callCountTemp{}; int m_callCountTemp{};
}; };
} // namespace espcpputils } // namespace espcpputils