CPUUsageTracker.h 819 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #pragma once
  2. #ifdef ESP32
  3. #include <stdint.h>
  4. #include "esp_attr.h"
  5. #include "esp_timer.h"
  6. #include "freertos/FreeRTOS.h"
  7. #include "freertos/task.h"
  8. class CPUUsageTracker {
  9. public:
  10. void begin();
  11. float getCore0Util() const {
  12. return (float)_sma_sum * (1.0f / (SMA_WINDOW * 255.0f));
  13. }
  14. private:
  15. static constexpr uint8_t SMA_WINDOW = 64; // power of 2 — enables & mask
  16. static volatile uint32_t s_ticks[2]; // [0] = idle ticks, [1] = busy ticks
  17. static TaskHandle_t s_idle_handle;
  18. static void IRAM_ATTR s_tick_hook();
  19. static void s_sample_cb(void* arg);
  20. uint32_t _last_idle = 0;
  21. uint32_t _last_busy = 0;
  22. uint8_t _sma_buf[SMA_WINDOW] = {};
  23. uint8_t _sma_idx = 0;
  24. volatile uint16_t _sma_sum = 0;
  25. esp_timer_handle_t _timer = nullptr;
  26. void _onSample();
  27. };
  28. #endif