35 FORCEINLINE
void Reset()
37 using namespace std::chrono;
38 StartTime = high_resolution_clock::now();
41 template<
typename TDuration>
42 TDuration GetElapsed()
const
44 using namespace std::chrono;
45 static_assert(std::disjunction_v<
46 std::is_same<TDuration, microseconds>,
47 std::is_same<TDuration, milliseconds>,
48 std::is_same<TDuration, seconds>>,
"Timer format not supported");
49 return duration_cast<TDuration>(high_resolution_clock::now() - StartTime);
52 FORCEINLINE
float GetDeltaTime()
54 using namespace std::chrono;
55 const time_point<high_resolution_clock> Now = high_resolution_clock::now();
56 const duration<float, std::milli> DeltaTime = Now - LastTime;
59 return DeltaTime.count();
63 std::chrono::time_point<std::chrono::high_resolution_clock> StartTime{};
64 std::chrono::time_point<std::chrono::high_resolution_clock> LastTime{};
104 uint32_t Samples = 0;
107 FFrameData(
const float InTime) : Time(InTime) {}
109 operator float()
const {
return Time; }
111 inline FFrameData& operator+=(
const float InTime)
118 FORCEINLINE
void SetFrameTiming(
const char* InName,
const float InTime)
120 std::scoped_lock<std::mutex> ScopedLock(FrameDataMutex);
121 if (FrameDataMap.find(InName) == FrameDataMap.end())
123 FrameDataMap[InName] = 0.0f;
126 FFrameData& FrameData = FrameDataMap[InName];
127 FrameData.Time += InTime;
131 FORCEINLINE
void Clear()
133 std::scoped_lock<std::mutex> ScopedLock(FrameDataMutex);
134 FrameDataMap.clear();
137 const std::unordered_map<const char*, FFrameData>& GetFrameData()
const
143 std::unordered_map<const char*, FFrameData> FrameDataMap{};
144 inline static std::mutex FrameDataMutex;