From 395052be8f61cb1366172ac92887f246782bd1ad Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Sun, 22 May 2022 17:40:15 +0100 Subject: [PATCH] Debounce dynamic info sending --- src/client/game.cpp | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/client/game.cpp b/src/client/game.cpp index c5e7d0beff29f..e4b8957359c74 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -828,6 +828,7 @@ class Game { Server *server = nullptr; ClientDynamicInfo client_display_info{}; + float dynamic_info_send_timer = 0; IWritableTextureSource *texture_src = nullptr; IWritableShaderSource *shader_src = nullptr; @@ -1093,13 +1094,25 @@ void Game::run() && !(*kill || g_gamecallback->shutdown_requested || (server && server->isShutdownRequested()))) { - const auto current_display_info = getCurrentDynamicInfo(); - if (!current_display_info.equal(client_display_info)) { - client_display_info = current_display_info; - client->sendUpdateClientInfo(current_display_info); + // Calculate dtime = + // m_rendering_engine->run() from this iteration + // + Sleep time until the wanted FPS are reached + draw_times.limit(device, &dtime); + + const auto current_dynamic_info = getCurrentDynamicInfo(); + if (!current_dynamic_info.equal(client_display_info)) { + client_display_info = current_dynamic_info; + dynamic_info_send_timer = 0.2f; } - const auto ¤t_screen_size = current_display_info.render_target_size; + if (dynamic_info_send_timer > 0) { + dynamic_info_send_timer -= dtime; + if (dynamic_info_send_timer <= 0) { + client->sendUpdateClientInfo(current_dynamic_info); + } + } + + const auto ¤t_screen_size = current_dynamic_info.render_target_size; // Verify if window size has changed and save it if it's the case // Ensure evaluating settings->getBool after verifying screensize @@ -1112,11 +1125,6 @@ void Game::run() previous_screen_size = current_screen_size; } - // Calculate dtime = - // m_rendering_engine->run() from this iteration - // + Sleep time until the wanted FPS are reached - draw_times.limit(device, &dtime); - // Prepare render data for next iteration updateStats(&stats, draw_times, dtime);