diff --git a/src/fps_metrics.h b/src/fps_metrics.h index 0cab909d..646875b7 100644 --- a/src/fps_metrics.h +++ b/src/fps_metrics.h @@ -9,6 +9,8 @@ #include #include #include +#include +#include struct metric_t { std::string name; @@ -25,6 +27,7 @@ class fpsMetrics { bool run = false; bool thread_init = false; bool terminate = false; + bool resetting = false; void calculate(){ thread_init = true; @@ -105,6 +108,9 @@ class fpsMetrics { }; void update(uint64_t now, double fps){ + if (resetting) + return; + fps_stats.push_back({now, fps}); uint64_t ten_minute_duration = 600000000000ULL; // 10 minutes in nanoseconds @@ -114,8 +120,8 @@ class fpsMetrics { fps_stats.erase( std::remove_if( - fps_stats.begin(), - fps_stats.end(), + fps_stats.begin(), + fps_stats.end(), [ten_minutes_ago](const std::pair& entry) { return entry.first < ten_minutes_ago; } @@ -126,11 +132,22 @@ class fpsMetrics { } void update_thread(){ + if (resetting) + return; + { std::lock_guard lock(mtx); run = true; } cv.notify_one(); + std::cout << fps_stats.size() << std::endl; + } + + void reset_metrics(){ + resetting = true; + while (run){} + fps_stats.clear(); + resetting = false; } ~fpsMetrics(){ diff --git a/src/keybinds.cpp b/src/keybinds.cpp index c09f70c9..f328e052 100644 --- a/src/keybinds.cpp +++ b/src/keybinds.cpp @@ -3,6 +3,7 @@ #include "timing.hpp" #include "logging.h" #include "keybinds.h" +#include "fps_metrics.h" void check_keybinds(struct overlay_params& params, uint32_t vendorID){ using namespace std::chrono_literals; @@ -94,4 +95,10 @@ void check_keybinds(struct overlay_params& params, uint32_t vendorID){ next_hud_position(params); last_f12_press = now; } + + if (elapsedF12 >= keyPressDelay && + keys_are_pressed(params.reset_fps_metrics)) { + last_f12_press = now; + fpsmetrics->reset_metrics(); + } } diff --git a/src/overlay_params.cpp b/src/overlay_params.cpp index d513f028..8dcc24d7 100644 --- a/src/overlay_params.cpp +++ b/src/overlay_params.cpp @@ -156,6 +156,7 @@ parse_string_to_keysym_vec(const char *str) #define parse_upload_logs parse_string_to_keysym_vec #define parse_toggle_fps_limit parse_string_to_keysym_vec #define parse_toggle_preset parse_string_to_keysym_vec +#define parse_reset_fps_metrics parse_string_to_keysym_vec #else #define parse_toggle_hud(x) {} @@ -166,6 +167,7 @@ parse_string_to_keysym_vec(const char *str) #define parse_upload_logs(x) {} #define parse_toggle_fps_limit(x) {} #define parse_toggle_preset(x) {} +#define parse_reset_fps_metrics(x) {} #endif // NOTE: This is NOT defined as an OVERLAY_PARAM and will be called manually @@ -735,6 +737,7 @@ parse_overlay_config(struct overlay_params *params, params->toggle_hud = { XK_Shift_R, XK_F12 }; params->toggle_hud_position = { XK_Shift_R, XK_F11 }; params->toggle_preset = { XK_Shift_R, XK_F10 }; + params->reset_fps_metrics = { XK_Shift_R, XK_F9}; params->toggle_fps_limit = { XK_Shift_L, XK_F1 }; params->toggle_logging = { XK_Shift_L, XK_F2 }; params->reload_cfg = { XK_Shift_L, XK_F4 }; @@ -745,6 +748,7 @@ parse_overlay_config(struct overlay_params *params, #ifdef _WIN32 params->toggle_hud = { VK_F12 }; params->toggle_preset = { VK_F10 }; + params->reset_fps_metrics = { VK_F9}; params->toggle_fps_limit = { VK_F3 }; params->toggle_logging = { VK_F2 }; params->reload_cfg = { VK_F4 }; diff --git a/src/overlay_params.h b/src/overlay_params.h index 3a301117..825aece5 100644 --- a/src/overlay_params.h +++ b/src/overlay_params.h @@ -138,6 +138,7 @@ typedef unsigned long KeySym; OVERLAY_PARAM_CUSTOM(toggle_preset) \ OVERLAY_PARAM_CUSTOM(toggle_fps_limit) \ OVERLAY_PARAM_CUSTOM(toggle_logging) \ + OVERLAY_PARAM_CUSTOM(reset_fps_metrics) \ OVERLAY_PARAM_CUSTOM(reload_cfg) \ OVERLAY_PARAM_CUSTOM(upload_log) \ OVERLAY_PARAM_CUSTOM(upload_logs) \ @@ -286,6 +287,7 @@ struct overlay_params { std::vector upload_log; std::vector upload_logs; std::vector toggle_hud_position; + std::vector reset_fps_metrics; std::string time_format, output_folder, output_file; std::string pci_dev; std::string media_player_name;