Cogs.Foundation
Loading...
Searching...
No Matches
Timer.h
Go to the documentation of this file.
1#pragma once
2
3#include "../FoundationBase.h"
4
5#include <cstdint>
6
7namespace Cogs
8{
9#if defined(EMSCRIPTEN)
10 typedef double TimePerf;
11 typedef int64_t Time;
12#else
13 typedef int64_t TimePerf;
14 typedef int64_t Time;
15#endif
16
21
25
30
34
37 {
38 public:
39 static inline Timer startNew()
40 {
41 Timer timer;
42 timer.start();
43 return timer;
44 }
45
46 void start()
47 {
48 running = true;
49 startTime = Cogs::perfTime();
50 }
51 void stop()
52 {
53 running = false;
54 stopTime = Cogs::perfTime();
55 }
56
57 int64_t elapsedMicroseconds() { if(running) stopTime = Cogs::perfTime(); return perfTimeToMicroseconds(scalePerfTime(stopTime - startTime)); }
58 int64_t elapsedMilliseconds() { if(running) stopTime = Cogs::perfTime(); return perfTimeToMilliseconds(scalePerfTime(stopTime - startTime)); }
59 double elapsedSeconds() { if(running) stopTime = Cogs::perfTime(); return perfTimeToSeconds(scalePerfTime(stopTime - startTime)); }
60
63
64#if defined(EMSCRIPTEN)
65 void setScale(int64_t s) { scale = static_cast<double>(s) / 1000.0; }
66 void resetScale() { scale = 1.0; }
67 int64_t getScale() const { return static_cast<int64_t>(1000.0 * scale); }
68 TimePerf scalePerfTime(TimePerf time) { return time*scale; }
69#else
70 void setScale(int64_t s) { scale = s; }
71 void resetScale() { scale = 1000; }
72 int64_t getScale() const { return scale; }
73 TimePerf scalePerfTime(TimePerf time) { return time*scale/1000; }
74#endif
75
76 private:
77 TimePerf startTime = {};
78 TimePerf stopTime = {};
79#if defined(EMSCRIPTEN)
80 double scale = 1.0f;
81#else
82 int64_t scale = 1000;
83#endif
84 bool running = false;
85 };
86}
#define COGSFOUNDATION_API
Definition: FoundationBase.h:31
Old timer class.
Definition: Timer.h:37
TimePerf scalePerfTime(TimePerf time)
Definition: Timer.h:73
void setScale(int64_t s)
Definition: Timer.h:70
void stop()
Definition: Timer.h:51
void start()
Definition: Timer.h:46
static int64_t currentTimeMicroseconds()
Definition: Timer.h:61
double elapsedSeconds()
Definition: Timer.h:59
int64_t elapsedMicroseconds()
Definition: Timer.h:57
int64_t getScale() const
Definition: Timer.h:72
void resetScale()
Definition: Timer.h:71
int64_t elapsedMilliseconds()
Definition: Timer.h:58
static Timer startNew()
Definition: Timer.h:39
static int64_t currentTimeMilliseconds()
Definition: Timer.h:62
Main Cogs namespace.
Definition: MortonCode.h:5
int64_t TimePerf
Definition: Timer.h:13
COGSFOUNDATION_API int64_t perfTimeToMicroseconds(TimePerf time)
Convertion functions for timestamps.
Definition: Timer.Emscripten.cpp:18
COGSFOUNDATION_API int64_t perfTimeToMilliseconds(TimePerf time)
Definition: Timer.Emscripten.cpp:22
COGSFOUNDATION_API int64_t currentTimeToMilliseconds(Time time)
Definition: Timer.Emscripten.cpp:35
COGSFOUNDATION_API TimePerf perfTime()
High resolution performance timer. Returns an implementation defined absolute timestamp,...
Definition: Timer.Emscripten.cpp:6
int64_t Time
Definition: Timer.h:14
COGSFOUNDATION_API Time currentTimeReference()
Definition: Timer.cpp:20
COGSFOUNDATION_API double perfTimeToSeconds(TimePerf time)
Definition: Timer.Emscripten.cpp:26
COGSFOUNDATION_API double currentTimeToSeconds(Time time)
Definition: Timer.Emscripten.cpp:39
COGSFOUNDATION_API TimePerf perfTimeReference()
Functions that provide a reference time point at the start of the application startup....
Definition: Timer.cpp:16
COGSFOUNDATION_API int64_t currentTimeToMicroseconds(Time time)
Definition: Timer.Emscripten.cpp:31
COGSFOUNDATION_API Time currentTime()
High resolution clock time (NTP / UTC time). Returns an implementation defined absolute timestamp,...
Definition: Timer.Emscripten.cpp:11