From c70ebdfe158f8065ee250a6bc2dde3532ce8e7f8 Mon Sep 17 00:00:00 2001 From: dijunkun Date: Sun, 28 Dec 2025 19:58:08 +0800 Subject: [PATCH] [fix] correct file send rate calculation by using data channel feedback --- src/gui/render_callback.cpp | 29 +++++++++++++++-------------- submodules/minirtc | 2 +- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/gui/render_callback.cpp b/src/gui/render_callback.cpp index 7b4cb78..0a0c5bb 100644 --- a/src/gui/render_callback.cpp +++ b/src/gui/render_callback.cpp @@ -361,26 +361,27 @@ void Render::OnReceiveDataBufferCb(const char* data, size_t size, props->file_sent_bytes_ = ack.acked_offset; props->file_total_bytes_ = ack.total_size; - // Update rate calculation - auto now = std::chrono::steady_clock::now(); uint32_t rate_bps = 0; { - std::lock_guard lock(props->file_transfer_mutex_); - auto elapsed = std::chrono::duration_cast( - now - props->file_send_last_update_time_) - .count(); + uint32_t data_channel_bitrate = + props->net_traffic_stats_.data_outbound_stats.bitrate; - if (elapsed >= 100) { - uint64_t bytes_sent_since_last = - ack.acked_offset - props->file_send_last_bytes_; - rate_bps = - static_cast((bytes_sent_since_last * 8 * 1000) / elapsed); - props->file_send_rate_bps_ = rate_bps; - props->file_send_last_bytes_ = ack.acked_offset; - props->file_send_last_update_time_ = now; + if (data_channel_bitrate > 0 && props->file_sending_.load()) { + rate_bps = static_cast(data_channel_bitrate * 0.99f); + + uint32_t current_rate = props->file_send_rate_bps_.load(); + if (current_rate > 0) { + // 70% old + 30% new for smoother display + rate_bps = static_cast(current_rate * 0.7 + rate_bps * 0.3); + } } else { rate_bps = props->file_send_rate_bps_.load(); } + + props->file_send_rate_bps_ = rate_bps; + props->file_send_last_bytes_ = ack.acked_offset; + auto now = std::chrono::steady_clock::now(); + props->file_send_last_update_time_ = now; } // Update file transfer list: update progress and rate diff --git a/submodules/minirtc b/submodules/minirtc index ab76847..fc5591e 160000 --- a/submodules/minirtc +++ b/submodules/minirtc @@ -1 +1 @@ -Subproject commit ab76847c6a6edfae129572806030c37c35b79d7f +Subproject commit fc5591eec79a400a3a8ff86dd43dd680738e33a7