This commit is contained in:
2024-09-25 11:50:34 +02:00
commit 834a6f7cff
120 changed files with 55330 additions and 0 deletions

144
project/src/Timer.cpp Normal file
View File

@@ -0,0 +1,144 @@
#include "Timer.h"
#include <iostream>
#include <numeric>
#include <iostream>
#include <fstream>
#include <float.h>
#include "SDL.h"
using namespace dae;
Timer::Timer()
{
const uint64_t countsPerSecond = SDL_GetPerformanceFrequency();
m_SecondsPerCount = 1.0f / static_cast<float>(countsPerSecond);
}
void Timer::Reset()
{
const uint64_t currentTime = SDL_GetPerformanceCounter();
m_BaseTime = currentTime;
m_PreviousTime = currentTime;
m_StopTime = 0;
m_FPSTimer = 0.0f;
m_FPSCount = 0;
m_IsStopped = false;
}
void Timer::Start()
{
const uint64_t startTime = SDL_GetPerformanceCounter();
if (m_IsStopped)
{
m_PausedTime += (startTime - m_StopTime);
m_PreviousTime = startTime;
m_StopTime = 0;
m_IsStopped = false;
}
}
void Timer::StartBenchmark(int numFrames)
{
if (m_BenchmarkActive)
{
std::cout << "(Benchmark already running)";
return;
}
m_BenchmarkActive = true;
m_BenchmarkAvg = 0.f;
m_BenchmarkHigh = FLT_MIN;
m_BenchmarkLow = FLT_MAX;
m_BenchmarkFrames = numFrames;
m_BenchmarkCurrFrame = 0;
m_Benchmarks.clear();
m_Benchmarks.resize(m_BenchmarkFrames);
std::cout << "**BENCHMARK STARTED**\n";
}
void Timer::Update()
{
if (m_IsStopped)
{
m_FPS = 0;
m_ElapsedTime = 0.0f;
m_TotalTime = (float)(((m_StopTime - m_PausedTime) - m_BaseTime) * m_BaseTime);
return;
}
const uint64_t currentTime = SDL_GetPerformanceCounter();
m_CurrentTime = currentTime;
m_ElapsedTime = (float)((m_CurrentTime - m_PreviousTime) * m_SecondsPerCount);
m_PreviousTime = m_CurrentTime;
if (m_ElapsedTime < 0.0f)
m_ElapsedTime = 0.0f;
if (m_ForceElapsedUpperBound && m_ElapsedTime > m_ElapsedUpperBound)
{
m_ElapsedTime = m_ElapsedUpperBound;
}
m_TotalTime = (float)(((m_CurrentTime - m_PausedTime) - m_BaseTime) * m_SecondsPerCount);
//FPS LOGIC
m_FPSTimer += m_ElapsedTime;
++m_FPSCount;
if (m_FPSTimer >= 1.0f)
{
m_dFPS = m_FPSCount / m_FPSTimer;
m_FPS = m_FPSCount;
m_FPSCount = 0;
m_FPSTimer = 0.0f;
if (m_BenchmarkActive)
{
m_Benchmarks[m_BenchmarkCurrFrame] = m_dFPS;
m_BenchmarkLow = std::min(m_BenchmarkLow, m_dFPS);
m_BenchmarkHigh = std::max(m_BenchmarkHigh, m_dFPS);
++m_BenchmarkCurrFrame;
if (m_BenchmarkCurrFrame >= m_BenchmarkFrames)
{
m_BenchmarkActive = false;
m_BenchmarkAvg = std::accumulate(m_Benchmarks.begin(), m_Benchmarks.end(), 0.f) / float(m_BenchmarkFrames);
//print
std::cout << "**BENCHMARK FINISHED**\n";
std::cout << ">> HIGH = " << m_BenchmarkHigh << std::endl;
std::cout << ">> LOW = " << m_BenchmarkLow << std::endl;
std::cout << ">> AVG = " << m_BenchmarkAvg << std::endl;
//file save
std::ofstream fileStream("benchmark.txt");
fileStream << "FRAMES = " << m_BenchmarkCurrFrame << std::endl;
fileStream << "HIGH = " << m_BenchmarkHigh << std::endl;
fileStream << "LOW = " << m_BenchmarkLow << std::endl;
fileStream << "AVG = " << m_BenchmarkAvg << std::endl;
fileStream.close();
}
}
}
}
void Timer::Stop()
{
if (!m_IsStopped)
{
const uint64_t currentTime = SDL_GetPerformanceCounter();
m_StopTime = currentTime;
m_IsStopped = true;
}
}