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";
} // namespace
SchedulerTask::SchedulerTask(const char *name, void (&setupCallback)(), void (&loopCallback)(), std::chrono::milliseconds loopInterval, bool intervalImportant, std::string (*perfInfo)()) :
m_name{name}, m_setupCallback{setupCallback}, m_loopCallback{loopCallback}, m_loopInterval{loopInterval}, m_intervalImportant{intervalImportant}, m_perfInfo{perfInfo}
SchedulerTask::SchedulerTask(const char *name, void (&setupCallback)(), void (&loopCallback)(), espchrono::millis_clock::duration loopInterval,
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)
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
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() : "");
}
@ -64,7 +66,7 @@ void SchedulerTask::pushStats(bool printTask)
{
m_callCount = m_callCountTemp;
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_callCountTemp = 0;
@ -74,9 +76,9 @@ void SchedulerTask::pushStats(bool printTask)
if (printTask)
ESP_LOGI(TAG, "name=%s, count=%i, last=%lldms, total=%lldms, max=%lldms",
m_name, m_callCount,
std::chrono::milliseconds{m_lastElapsed}.count(),
std::chrono::milliseconds{m_totalElapsed}.count(),
std::chrono::milliseconds{m_maxElapsed}.count()
std::chrono::floor<std::chrono::milliseconds>(m_lastElapsed).count(),
std::chrono::floor<std::chrono::milliseconds>(m_totalElapsed).count(),
std::chrono::floor<std::chrono::milliseconds>(m_maxElapsed).count()
);
}

View File

@ -14,13 +14,13 @@ class SchedulerTask
{
public:
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);
const char *name() const { return m_name; }
const std::chrono::milliseconds &lastElapsed() const { return m_lastElapsed; }
const std::chrono::milliseconds &averageElapsed() const { return m_averageElapsed; }
const std::chrono::milliseconds &maxElapsed() const { return m_maxElapsed; }
const espchrono::millis_clock::duration&lastElapsed() const { return m_lastElapsed; }
const espchrono::millis_clock::duration&averageElapsed() const { return m_averageElapsed; }
const espchrono::millis_clock::duration&maxElapsed() const { return m_maxElapsed; }
int callCount() const { return m_callCount; }
void setup() const { m_setupCallback(); }
@ -31,21 +31,21 @@ private:
const char * const m_name;
void (&m_setupCallback)();
void (&m_loopCallback)();
const std::chrono::milliseconds m_loopInterval;
const espchrono::millis_clock::duration m_loopInterval;
const bool m_intervalImportant;
std::string (* const m_perfInfo)();
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;
std::chrono::milliseconds m_averageElapsed;
std::chrono::milliseconds m_maxElapsed;
espchrono::millis_clock::duration m_totalElapsed;
espchrono::millis_clock::duration m_averageElapsed;
espchrono::millis_clock::duration m_maxElapsed;
int m_callCount{};
std::chrono::milliseconds m_totalElapsedTemp;
std::chrono::milliseconds m_maxElapsedTemp;
espchrono::millis_clock::duration m_totalElapsedTemp;
espchrono::millis_clock::duration m_maxElapsedTemp;
int m_callCountTemp{};
};
} // namespace espcpputils