commit 2bd550c9be8c222c9f46b0fa5c4c948426c9c780
parent 5f611c85dfc771cd6ff3258c044c27ecfed3f733
Author: Dan Baker <dbaker@mozilla.com>
Date: Tue, 2 Dec 2025 00:01:57 -0700
Bug 2000941 - Vendor libwebrtc from 7e2fb13a72
Upstream commit: https://webrtc.googlesource.com/src/+/7e2fb13a7284a4b05a47ac972fec33fc772a2e05
Replace RateTracker with BitrateTracker in Connection
RateTracker uses global functions to query time, with Bitrate tracker it
is possible to rely on the propagated clock. Extra functionality of the
RateTracker of tracking sum of all input values is updated with direct
update of the collected statistic values.
Bug: webrtc:439515766
Change-Id: Ib906065d89dd20899a9404d1f893717ff9775c96
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/410861
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Auto-Submit: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Per Kjellander <perkj@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#45725}
Diffstat:
5 files changed, 23 insertions(+), 19 deletions(-)
diff --git a/third_party/libwebrtc/README.mozilla.last-vendor b/third_party/libwebrtc/README.mozilla.last-vendor
@@ -1,4 +1,4 @@
# ./mach python dom/media/webrtc/third_party_build/vendor-libwebrtc.py --from-local /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc --commit mozpatches libwebrtc
-libwebrtc updated from /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-12-02T06:59:02.115966+00:00.
+libwebrtc updated from /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-12-02T07:01:44.490410+00:00.
# base of lastest vendoring
-fc1cbcf052
+7e2fb13a72
diff --git a/third_party/libwebrtc/p2p/BUILD.gn b/third_party/libwebrtc/p2p/BUILD.gn
@@ -207,11 +207,13 @@ rtc_library("connection") {
"../api/task_queue",
"../api/transport:enums",
"../api/transport:stun_types",
+ "../api/units:data_rate",
"../api/units:time_delta",
"../api/units:timestamp",
"../logging:ice_log",
"../rtc_base:async_packet_socket",
"../rtc_base:base64",
+ "../rtc_base:bitrate_tracker",
"../rtc_base:byte_buffer",
"../rtc_base:callback_list",
"../rtc_base:checks",
@@ -229,7 +231,6 @@ rtc_library("connection") {
"../rtc_base:network",
"../rtc_base:network_constants",
"../rtc_base:platform_thread_types",
- "../rtc_base:rate_tracker",
"../rtc_base:rtc_numerics",
"../rtc_base:safe_minmax",
"../rtc_base:sigslot_trampoline",
@@ -844,7 +845,6 @@ rtc_library("tcp_port") {
"../rtc_base:ip_address",
"../rtc_base:logging",
"../rtc_base:net_helper",
- "../rtc_base:rate_tracker",
"../rtc_base:socket",
"../rtc_base:socket_address",
"../rtc_base:timeutils",
diff --git a/third_party/libwebrtc/p2p/base/connection.cc b/third_party/libwebrtc/p2p/base/connection.cc
@@ -11,7 +11,6 @@
#include "p2p/base/connection.h"
#include <algorithm>
-#include <cmath>
#include <cstddef>
#include <cstdint>
#include <memory>
@@ -30,6 +29,7 @@
#include "api/sequence_checker.h"
#include "api/task_queue/task_queue_base.h"
#include "api/transport/stun.h"
+#include "api/units/data_rate.h"
#include "api/units/time_delta.h"
#include "api/units/timestamp.h"
#include "logging/rtc_event_log/events/rtc_event_ice_candidate_pair.h"
@@ -239,8 +239,8 @@ Connection::Connection(const Environment& env,
port_(std::move(port)),
local_candidate_(port_->Candidates()[index]),
remote_candidate_(remote_candidate),
- recv_rate_tracker_(100, 10u),
- send_rate_tracker_(100, 10u),
+ recv_rate_tracker_(/*max_window_size=*/TimeDelta::Seconds(1)),
+ send_rate_tracker_(/*max_window_size=*/TimeDelta::Seconds(1)),
last_send_data_(Timestamp::Zero()),
write_state_(STATE_WRITE_INIT),
receiving_(false),
@@ -504,7 +504,8 @@ void Connection::OnReadPacket(const ReceivedIpPacket& packet) {
// This is a data packet, pass it along.
last_data_received_ = env_.clock().CurrentTime();
UpdateReceiving(last_data_received_);
- recv_rate_tracker_.AddSamples(packet.payload().size());
+ recv_rate_tracker_.Update(packet.payload().size(), last_data_received_);
+ stats_.recv_total_bytes += packet.payload().size();
stats_.packets_received++;
if (received_packet_callback_) {
received_packet_callback_(this, packet);
@@ -1727,10 +1728,11 @@ uint32_t Connection::prflx_priority() const {
ConnectionInfo Connection::stats() {
RTC_DCHECK_RUN_ON(network_thread_);
- stats_.recv_bytes_second = round(recv_rate_tracker_.ComputeRate());
- stats_.recv_total_bytes = recv_rate_tracker_.TotalSampleCount();
- stats_.sent_bytes_second = round(send_rate_tracker_.ComputeRate());
- stats_.sent_total_bytes = send_rate_tracker_.TotalSampleCount();
+ Timestamp now = env_.clock().CurrentTime();
+ stats_.recv_bytes_second =
+ recv_rate_tracker_.Rate(now).value_or(DataRate::Zero()).bps<size_t>();
+ stats_.sent_bytes_second =
+ send_rate_tracker_.Rate(now).value_or(DataRate::Zero()).bps<size_t>();
stats_.receiving = receiving_;
stats_.writable = write_state_ == STATE_WRITABLE;
stats_.timeout = write_state_ == STATE_WRITE_TIMEOUT;
@@ -1919,7 +1921,7 @@ int ProxyConnection::Send(const void* data,
mutable_stats().sent_discarded_packets++;
mutable_stats().sent_discarded_bytes += size;
} else {
- send_rate_tracker().AddSamplesAtTime(now.ms(), sent);
+ AddSentBytesToStats(sent, now);
}
set_last_send_data(now);
return sent;
diff --git a/third_party/libwebrtc/p2p/base/connection.h b/third_party/libwebrtc/p2p/base/connection.h
@@ -41,11 +41,11 @@
#include "p2p/base/transport_description.h"
#include "p2p/dtls/dtls_stun_piggyback_callbacks.h"
#include "rtc_base/async_packet_socket.h"
+#include "rtc_base/bitrate_tracker.h"
#include "rtc_base/callback_list.h"
#include "rtc_base/network.h"
#include "rtc_base/network/received_packet.h"
#include "rtc_base/numerics/event_based_exponential_moving_average.h"
-#include "rtc_base/rate_tracker.h"
#include "rtc_base/system/rtc_export.h"
#include "rtc_base/thread_annotations.h"
#include "rtc_base/weak_ptr.h"
@@ -438,7 +438,10 @@ class RTC_EXPORT Connection : public CandidatePairInterface {
const Environment& env() { return env_; }
ConnectionInfo& mutable_stats() { return stats_; }
- RateTracker& send_rate_tracker() { return send_rate_tracker_; }
+ void AddSentBytesToStats(int size, Timestamp now) {
+ send_rate_tracker_.Update(size, now);
+ stats_.sent_total_bytes += size;
+ }
void set_last_send_data(Timestamp now) { last_send_data_ = now; }
private:
@@ -485,8 +488,8 @@ class RTC_EXPORT Connection : public CandidatePairInterface {
Candidate remote_candidate_;
ConnectionInfo stats_;
- RateTracker recv_rate_tracker_;
- RateTracker send_rate_tracker_;
+ BitrateTracker recv_rate_tracker_;
+ BitrateTracker send_rate_tracker_;
Timestamp last_send_data_;
WriteState write_state_ RTC_GUARDED_BY(network_thread_);
diff --git a/third_party/libwebrtc/p2p/base/tcp_port.cc b/third_party/libwebrtc/p2p/base/tcp_port.cc
@@ -95,7 +95,6 @@
#include "rtc_base/net_helper.h"
#include "rtc_base/network/received_packet.h"
#include "rtc_base/network/sent_packet.h"
-#include "rtc_base/rate_tracker.h"
#include "rtc_base/socket.h"
#include "rtc_base/socket_address.h"
#include "rtc_base/weak_ptr.h"
@@ -415,7 +414,7 @@ int TCPConnection::Send(const void* data,
mutable_stats().sent_discarded_packets++;
error_ = socket_->GetError();
} else {
- send_rate_tracker().AddSamplesAtTime(now.ms(), sent);
+ AddSentBytesToStats(sent, now);
}
set_last_send_data(now);
return sent;