14#if (configGENERATE_RUN_TIME_STATS == 1) && (configUSE_TRACE_FACILITY == 1)
15 UBaseType_t count = uxTaskGetNumberOfTasks();
16 if (count == 0)
return false;
19 if (!buf)
return false;
21 UBaseType_t got = uxTaskGetSystemState(buf.get(), count,
nullptr);
23 for (UBaseType_t i = 0; i < got; ++i) {
25 if (buf[i].pcTaskName && std::strncmp(buf[i].pcTaskName,
"IDLE", 4) == 0) {
26 idle += buf[i].ulRunTimeCounter;
31 wallUs =
static_cast<uint64_t
>(esp_timer_get_time());
42 uint64_t idle0, wall0, idle1, wall1;
43 if (!
sample(idle0, wall0))
return 0;
44 vTaskDelay(pdMS_TO_TICKS(windowMs));
45 if (!
sample(idle1, wall1))
return 0;
47 uint64_t wallDelta = (wall1 - wall0) *
static_cast<uint64_t
>(configNUMBER_OF_CORES);
48 if (wallDelta == 0)
return 0;
49 uint64_t idleDelta = idle1 - idle0;
50 if (idleDelta > wallDelta) idleDelta = wallDelta;
51 return static_cast<uint8_t
>(100 - (idleDelta * 100) / wallDelta);