#include <cstdlib>
#include <iostream>
#include <chrono>
#include <ctime>
#include <queue>
using namespace std;
int main()
{
// your code goes here
std::chrono::steady_clock::time_point t0, t1, tp;
int isNotFirst = 0;
double elapsed_s = 0, g_samples_s = 0;
std::queue<double> g_fps;
size_t nb_samples;
for (int i = 0; i < 10; ++i)
{
t0 = std::chrono::steady_clock::now();
int r = (std::rand() % 10) + 25; // 25 ~ 34
std::this_thread::sleep_for(std::chrono::milliseconds(r));
t1 = std::chrono::steady_clock::now();
elapsed_s = (double)r / 1000;//std::chrono::duration_cast<std::chrono::duration<double>(t1 - t0).count();
double fps = 0, avg_fps = 0;
if (isNotFirst)
{
nb_samples = g_fps.size();
elapsed_s = r;//std::chrono::duration_cast<std::chrono::duration<double>>(t0 - tp).count();
g_samples_s += elapsed_s;
g_fps.push(elapsed_s);
if (nb_samples >= 10)
{
g_samples_s -= g_fps.front();
g_fps.pop();
}
else nb_samples++;
fps = 1 / elapsed_s;
avg_fps = nb_samples / g_samples_s;
}
tp = t0;
isNotFirst = 1;
printf("%d. %.2f/%.2f fps\r\n", i, fps, avg_fps);
}
return 0;
}