diff --git a/src/xenia/ui/window.cc b/src/xenia/ui/window.cc index 0f955924a..306faec9a 100644 --- a/src/xenia/ui/window.cc +++ b/src/xenia/ui/window.cc @@ -173,12 +173,15 @@ void Window::OnPaint(UIEvent* e) { ++frame_count_; ++fps_frame_count_; - uint64_t now_ns = xe::Clock::QueryHostSystemTime(); - if (now_ns > fps_update_time_ns_ + 1000 * 10000) { + static auto tick_frequency = Clock::QueryHostTickFrequency(); + auto now_ticks = Clock::QueryHostTickCount(); + // Average fps over 1 second. + if (now_ticks > fps_update_time_ticks_ + tick_frequency * 1) { fps_ = static_cast( fps_frame_count_ / - (static_cast(now_ns - fps_update_time_ns_) / 10000000.0)); - fps_update_time_ns_ = now_ns; + (static_cast(now_ticks - fps_update_time_ticks_) / + tick_frequency)); + fps_update_time_ticks_ = now_ticks; fps_frame_count_ = 0; } @@ -186,12 +189,13 @@ void Window::OnPaint(UIEvent* e) { // Prepare ImGui for use this frame. auto& io = imgui_drawer_->GetIO(); - if (!last_paint_time_ns_) { + if (!last_paint_time_ticks_) { io.DeltaTime = 0.0f; - last_paint_time_ns_ = now_ns; + last_paint_time_ticks_ = now_ticks; } else { - io.DeltaTime = (now_ns - last_paint_time_ns_) / 10000000.0f; - last_paint_time_ns_ = now_ns; + io.DeltaTime = (now_ticks - last_paint_time_ticks_) / + static_cast(tick_frequency); + last_paint_time_ticks_ = now_ticks; } io.DisplaySize = ImVec2(static_cast(scaled_width()), static_cast(scaled_height())); diff --git a/src/xenia/ui/window.h b/src/xenia/ui/window.h index 6cbc7a250..2cb5c8c34 100644 --- a/src/xenia/ui/window.h +++ b/src/xenia/ui/window.h @@ -180,9 +180,9 @@ class Window { uint32_t frame_count_ = 0; uint32_t fps_ = 0; - uint64_t fps_update_time_ns_ = 0; + uint64_t fps_update_time_ticks_ = 0; uint64_t fps_frame_count_ = 0; - uint64_t last_paint_time_ns_ = 0; + uint64_t last_paint_time_ticks_ = 0; bool modifier_shift_pressed_ = false; bool modifier_cntrl_pressed_ = false;