fork download
  1. #include <chrono>
  2. #include <iostream>
  3. #include <thread>
  4. #include <string>
  5. using namespace std;
  6. using namespace std::chrono;
  7. using namespace std::this_thread;
  8.  
  9. typedef std::chrono::high_resolution_clock Clock;
  10. struct LogFPS
  11. {
  12. LogFPS(string name, Clock::time_point time) : _name(name), _time(time), _frameCount(0) {}
  13. void tick()
  14. {
  15. _frameCount++;
  16. Clock::time_point newTime = Clock::now();
  17. milliseconds totalTicks = duration_cast<milliseconds>(newTime - _time);
  18. if (totalTicks.count() > 1000)
  19. {
  20. cout << _name << " calls per second : " << _frameCount << endl;
  21. _frameCount = 0;
  22. _time = newTime;
  23. }
  24.  
  25. }
  26. string _name;
  27. int _frameCount;
  28. Clock::time_point _time;
  29. };
  30.  
  31. int main()
  32. {
  33. Clock::time_point mLastEndTime;
  34. milliseconds mDeltaTime(0);
  35. milliseconds frameTime(0);
  36.  
  37. const milliseconds kMaxDeltatime((int)((1.0f / 60.0f)*1000.0f));
  38. const milliseconds updateFrameCost(5);
  39. const milliseconds renderFrameCost(10);
  40.  
  41. mLastEndTime = Clock::now();
  42.  
  43. LogFPS rFPS(string("RenderFrame"), mLastEndTime);
  44. LogFPS uFPS(string("UpdateFrame"), mLastEndTime);
  45.  
  46. while(true)
  47. {
  48. Clock::time_point currentTime = Clock::now();
  49. frameTime = duration_cast<milliseconds>(currentTime-mLastEndTime);
  50. mLastEndTime = currentTime;
  51.  
  52. while (frameTime.count() > 0)
  53. {
  54. frameTime -= min(frameTime, kMaxDeltatime);
  55. sleep_for(updateFrameCost); // fake state processing
  56. uFPS.tick();
  57. }
  58. sleep_for(renderFrameCost); // fake renderframe
  59. rFPS.tick();
  60. }
  61. }
  62.  
Time limit exceeded #stdin #stdout 5s 2988KB
stdin
Standard input is empty
stdout
UpdateFrame calls per second : 87
RenderFrame calls per second : 45
UpdateFrame calls per second : 87
RenderFrame calls per second : 44
UpdateFrame calls per second : 88
RenderFrame calls per second : 44
UpdateFrame calls per second : 88
RenderFrame calls per second : 44
UpdateFrame calls per second : 88
RenderFrame calls per second : 44
UpdateFrame calls per second : 88
RenderFrame calls per second : 44
UpdateFrame calls per second : 88
RenderFrame calls per second : 44
UpdateFrame calls per second : 88
RenderFrame calls per second : 44
UpdateFrame calls per second : 88
RenderFrame calls per second : 44
UpdateFrame calls per second : 88
RenderFrame calls per second : 44