aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/crepe/manager/LoopTimerManager.cpp2
-rw-r--r--src/crepe/manager/LoopTimerManager.h8
-rw-r--r--src/test/LoopTimerTest.cpp18
3 files changed, 22 insertions, 6 deletions
diff --git a/src/crepe/manager/LoopTimerManager.cpp b/src/crepe/manager/LoopTimerManager.cpp
index 9819632..a6e4788 100644
--- a/src/crepe/manager/LoopTimerManager.cpp
+++ b/src/crepe/manager/LoopTimerManager.cpp
@@ -31,7 +31,7 @@ void LoopTimerManager::update() {
this->delta_time = this->maximum_delta_time;
}
if (this->delta_time > 0s) {
- this->actual_fps = 1.0 / duration_cast<seconds>(this->delta_time).count();
+ this->actual_fps = static_cast<unsigned>(1.0 / this->delta_time.count());
} else {
this->actual_fps = 0;
}
diff --git a/src/crepe/manager/LoopTimerManager.h b/src/crepe/manager/LoopTimerManager.h
index 91403e4..76b02d3 100644
--- a/src/crepe/manager/LoopTimerManager.h
+++ b/src/crepe/manager/LoopTimerManager.h
@@ -6,7 +6,7 @@
namespace crepe {
-typedef std::chrono::duration<double> duration_t;
+typedef std::chrono::duration<float> duration_t;
typedef std::chrono::duration<unsigned long long, std::micro> elapsed_time_t;
/**
@@ -55,7 +55,7 @@ public:
*
* \return Current FPS.
*/
- unsigned get_fps() const;
+ unsigned int get_fps() const;
/**
* \brief Get the current time scale.
@@ -149,9 +149,9 @@ private:
private:
//! Target frames per second.
- unsigned target_fps = 60;
+ unsigned int target_fps = 60;
//! Actual frames per second.
- unsigned actual_fps = 0;
+ unsigned int actual_fps = 0;
//! Time scale for speeding up or slowing down the game (0 = pause, < 1 = slow down, 1 = normal speed, > 1 = speed up).
float time_scale = 1;
//! Maximum delta time in seconds to avoid large jumps.
diff --git a/src/test/LoopTimerTest.cpp b/src/test/LoopTimerTest.cpp
index d76bf45..7bd6305 100644
--- a/src/test/LoopTimerTest.cpp
+++ b/src/test/LoopTimerTest.cpp
@@ -30,7 +30,7 @@ TEST_F(LoopTimerTest, EnforcesTargetFrameRate) {
auto elapsed_ms = duration_cast<milliseconds>(elapsed_time).count();
// For 60 FPS, the target frame time is around 16.67ms
- ASSERT_NEAR(elapsed_ms, 16.7, 1);
+ ASSERT_NEAR(elapsed_ms, 16.7, 5);
}
TEST_F(LoopTimerTest, SetTargetFps) {
@@ -79,3 +79,19 @@ TEST_F(LoopTimerTest, DISABLED_getCurrentTime) {
ASSERT_NEAR(loop_timer.get_elapsed_time().count(), elapsed_time, 5);
}
+TEST_F(LoopTimerTest, getFPS) {
+ // Set the target FPS to 60 (which gives a target time per frame of ~16.67 ms)
+ loop_timer.set_target_framerate(60);
+
+ auto start_time = steady_clock::now();
+ loop_timer.enforce_frame_rate();
+
+ auto elapsed_time = steady_clock::now() - start_time;
+ loop_timer.update();
+ unsigned int fps = loop_timer.get_fps();
+ auto elapsed_ms = duration_cast<milliseconds>(elapsed_time).count();
+
+ // For 60 FPS, the target frame time is around 16.67ms
+ ASSERT_NEAR(elapsed_ms, 16.7, 1);
+ ASSERT_NEAR(fps, 60, 2);
+}