A 2D tile-based sandbox game.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

PerfCounter.h 1.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #include "util.h"
  2. #include <array>
  3. namespace Swan {
  4. class PerfCounter {
  5. public:
  6. template<typename T = double, size_t size = 64>
  7. class Counter {
  8. public:
  9. void count(T val) {
  10. buf_[idx_] = val;
  11. idx_ = (idx_ + 1) % size;
  12. }
  13. // Fill a buffer with data, in the order they were written
  14. template<typename DestT = T>
  15. void fill(std::array<DestT, size> &buf) {
  16. size_t r = idx_;
  17. size_t w = 0;
  18. do {
  19. buf[w++] = (DestT)buf_[r];
  20. r = (r + 1) % size;
  21. } while (r != idx_);
  22. }
  23. private:
  24. T buf_[size] = {};
  25. size_t idx_ = 0;
  26. };
  27. void render();
  28. void countTotalTime(double secs) { total_time_.count(secs); }
  29. void countFrameTime(double secs) { frame_time_.count(secs); }
  30. void countGameUpdate(double secs) { game_update_.count(secs); }
  31. void countGameTick(double secs) { game_tick_.count(secs); }
  32. void countGameDraw(double secs) { game_draw_.count(secs); }
  33. void countGameUpdatesPerFrame(double count) { game_updates_per_frame_.count(count); }
  34. void countRenderPresent(double secs) { render_present_.count(secs); }
  35. void countMemoryUsage(double bytes) { memory_usage_.count(bytes); }
  36. private:
  37. Counter<> total_time_;
  38. Counter<> frame_time_;
  39. Counter<> game_update_;
  40. Counter<> game_tick_;
  41. Counter<> game_draw_;
  42. Counter<> game_updates_per_frame_;
  43. Counter<> render_present_;
  44. Counter<> memory_usage_;
  45. };
  46. }