From 69a4dfcbb96fd76c10ed337687b0cb2a24ef611f Mon Sep 17 00:00:00 2001 From: dijunkun Date: Wed, 15 Oct 2025 11:26:45 +0800 Subject: [PATCH] [feat] add fps display in net traffic stats window --- src/single_window/control_bar.cpp | 5 +++++ src/single_window/render.h | 5 ++++- src/single_window/render_callback_func.cpp | 14 ++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/single_window/control_bar.cpp b/src/single_window/control_bar.cpp index cf560bd..a18064e 100644 --- a/src/single_window/control_bar.cpp +++ b/src/single_window/control_bar.cpp @@ -314,6 +314,11 @@ int Render::NetTrafficStats(std::shared_ptr& props) { ImGui::TableNextColumn(); LossRateDisplay(props->net_traffic_stats_.total_inbound_stats.loss_rate); + ImGui::TableNextColumn(); + ImGui::Text("FPS"); + ImGui::TableNextColumn(); + ImGui::Text("%d", props->fps_); + ImGui::EndTable(); } diff --git a/src/single_window/render.h b/src/single_window/render.h index c8b713b..8b7a190 100644 --- a/src/single_window/render.h +++ b/src/single_window/render.h @@ -65,7 +65,7 @@ class Render { float control_window_min_width_ = 20; float control_window_max_width_ = 230; float control_window_min_height_ = 40; - float control_window_max_height_ = 150; + float control_window_max_height_ = 170; float control_window_width_ = 230; float control_window_height_ = 40; float control_bar_pos_x_ = 0; @@ -110,6 +110,9 @@ class Render { ImVec2 control_window_pos_; ConnectionStatus connection_status_ = ConnectionStatus::Closed; TraversalMode traversal_mode_ = TraversalMode::UnknownMode; + int fps_ = 0; + int frame_count_ = 0; + std::chrono::steady_clock::time_point last_time_; XNetTrafficStats net_traffic_stats_; }; diff --git a/src/single_window/render_callback_func.cpp b/src/single_window/render_callback_func.cpp index 292774b..16eda9e 100644 --- a/src/single_window/render_callback_func.cpp +++ b/src/single_window/render_callback_func.cpp @@ -233,6 +233,20 @@ void Render::OnReceiveVideoBufferCb(const XVideoFrame* video_frame, event.user.data1 = props; SDL_PushEvent(&event); props->streaming_ = true; + + if (props->net_traffic_stats_button_pressed_) { + props->frame_count_++; + auto now = std::chrono::steady_clock::now(); + auto elapsed = std::chrono::duration_cast( + now - props->last_time_) + .count(); + + if (elapsed >= 1000) { + props->fps_ = props->frame_count_ * 1000 / elapsed; + props->frame_count_ = 0; + props->last_time_ = now; + } + } } }