diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2023-04-10 08:55:09 +0200 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2023-04-10 10:35:00 +0200 |
commit | 94acd44723424f8ff5a9532c3030a637956c738a (patch) | |
tree | eae74dbff526460640e5dba1b5b152536fa358d1 /main | |
parent | fdcff54e1d845343cdfe39040aac6f7ff9b4163a (diff) |
main: rewrite flaky fps counter
Diffstat (limited to 'main')
-rw-r--r-- | main/draw.cpp | 20 | ||||
-rw-r--r-- | main/main-impl.hpp | 2 |
2 files changed, 13 insertions, 9 deletions
diff --git a/main/draw.cpp b/main/draw.cpp index f388b60e..56f4b61e 100644 --- a/main/draw.cpp +++ b/main/draw.cpp @@ -62,6 +62,8 @@ void main_impl::recalc_viewport(Vector2i fb_size, Vector2i win_size) noexcept // -- user-- app.on_viewport_event(fb_size); + + fps_sample_timeline.start(); } global_coords main_impl::pixel_to_tile(Vector2d position) const noexcept @@ -189,15 +191,15 @@ void main_impl::do_update() float dt = timeline.previousFrameDuration(); if (dt > 0) { - const float RC1 = dt_expected.do_sleep ? 1.f : 1.f/5, RC2 = 1.f/10; - const float alpha1 = dt/(dt + RC1); - const float alpha2 = dt/(dt + RC2); - - _frame_time1 = _frame_time1*(1-alpha1) + alpha1*dt; - _frame_time2 = _frame_time1*(1-alpha2) + alpha2*dt; - constexpr float max_deviation = 5 * 1e-3f; - if (std::fabs(_frame_time1 - _frame_time2) > max_deviation) - _frame_time1 = _frame_time2; + if (fps_sample_timeline.currentFrameDuration() > 1.f/15) + { + fps_sample_timeline.nextFrame(); + constexpr float RC = 10; + const float alpha = 1/(1 + RC); + _frame_time = _frame_time*(1-alpha) + alpha*dt; + } + if (dt >= 1.f/55 && dt_expected.value < 1e-1f) + fm_debug("frame took %.1f milliseconds", dt*1e3f); } else { diff --git a/main/main-impl.hpp b/main/main-impl.hpp index 20b1aa41..fc20c947 100644 --- a/main/main-impl.hpp +++ b/main/main-impl.hpp @@ -112,6 +112,8 @@ private: bool do_sleep = false; } dt_expected; + Timeline fps_sample_timeline; + void recalc_viewport(Vector2i fb_size, Vector2i win_size) noexcept; void draw_world() noexcept; |