fwt_software/timing.h

116 lines
3.4 KiB
C++

#pragma once
#include <iostream>
#include <string>
#include <chrono>
#include <ctime>
class Timer
{
public:
Timer()
{
Reset();
}
void Reset()
{
m_Start = std::chrono::high_resolution_clock::now();
}
float Elapsed()
{
return std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now() - m_Start).count() * 0.001f * 0.001f * 0.001f;
}
float ElapsedMillis()
{
return Elapsed() * 1000.0f;
}
long long Stamp_millis()
{
// Get the current time point with nanosecond precision
auto now = std::chrono::system_clock::now();
// Calculate the number of nanoseconds since the epoch
auto since_epoch = now.time_since_epoch();
long long milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(since_epoch).count();
return milliseconds;
}
std::string GetFileStamp()
{
time_t now = time(nullptr);
struct tm* ltm = localtime(&now);
std::string stamp = std::to_string(1900 + ltm->tm_year) + "_" + std::to_string(1 + ltm->tm_mon) + "_" + std::to_string(ltm->tm_mday) + "_" + std::to_string(ltm->tm_hour) + "_" + std::to_string(ltm->tm_min);
//printf(stamp.c_str());
return stamp;
}
std::string GetStringStamp()
{
time_t now = time(nullptr);
struct tm* ltm = localtime(&now);
std::string stamp = std::to_string(1900 + ltm->tm_year) + "_" + std::to_string(1 + ltm->tm_mon) + "_" + std::to_string(ltm->tm_mday) + "_" + std::to_string(ltm->tm_hour) + "_" + std::to_string(ltm->tm_min) + "_" + std::to_string(ltm->tm_sec);
//printf(stamp.c_str());
return stamp;
}
std::string GetDirStamp()
{
time_t now = time(nullptr);
struct tm* ltm = localtime(&now);
std::string stamp = std::to_string(1900 + ltm->tm_year) + "_" + std::to_string(1 + ltm->tm_mon) + "_" + std::to_string(ltm->tm_mday) + "_" + std::to_string(ltm->tm_hour);
//printf(stamp.c_str());
return stamp;
}
private:
std::chrono::time_point<std::chrono::high_resolution_clock> m_Start;
};
class ScopedTimer
{
public:
ScopedTimer(const std::string& name)
: m_Name(name) {}
~ScopedTimer()
{
float time = m_Timer.ElapsedMillis();
std::cout << "[TIMER] " << m_Name << " - " << time << "ms\n";
}
private:
std::string m_Name;
Timer m_Timer;
};
class NanoUnixTimer
{
public:
std::string Stamp_string()
{
// Get the current time point with nanosecond precision
auto now = std::chrono::system_clock::now();
// Calculate the number of nanoseconds since the epoch
auto since_epoch = now.time_since_epoch();
auto milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(since_epoch).count();
// Convert the nanoseconds to a string
return std::to_string(milliseconds);
}
long long Stamp_longlong()
{
// Get the current time point with nanosecond precision
auto now = std::chrono::system_clock::now();
// Calculate the number of nanoseconds since the epoch
auto since_epoch = now.time_since_epoch();
long long milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(since_epoch).count();
return milliseconds;
}
};