tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit e02ab74ab331e1e4823777a315a6525dd6cfd9f1
parent e027f000e1003f9b28e8855331c2c59986d2f96e
Author: Michael Froman <mfroman@mozilla.com>
Date:   Thu,  9 Oct 2025 15:06:18 -0500

Bug 1993083 - Vendor libwebrtc from ef3327412d

Upstream commit: https://webrtc.googlesource.com/src/+/ef3327412d2b9132e7a20e69d7f879703ab688df
    Use strong time type for metrics::kMinRunTime constant

    Bug: webrc:42223979
    Change-Id: Icda7a419435eb7b7fa84a7c600b0fca95587268a
    Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/401060
    Commit-Queue: Harald Alvestrand <hta@webrtc.org>
    Auto-Submit: Danil Chapovalov <danilchap@webrtc.org>
    Reviewed-by: Harald Alvestrand <hta@webrtc.org>
    Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
    Cr-Commit-Position: refs/heads/main@{#45175}

Diffstat:
Mthird_party/libwebrtc/README.mozilla.last-vendor | 4++--
Mthird_party/libwebrtc/call/call.cc | 2+-
Mthird_party/libwebrtc/modules/rtp_rtcp/source/ulpfec_receiver.cc | 2+-
Mthird_party/libwebrtc/modules/video_coding/codecs/vp8/screenshare_layers.cc | 2+-
Mthird_party/libwebrtc/modules/video_coding/codecs/vp8/screenshare_layers_unittest.cc | 2+-
Mthird_party/libwebrtc/moz-patch-stack/s0057.patch | 6+++---
Mthird_party/libwebrtc/moz-patch-stack/s0058.patch | 2+-
Mthird_party/libwebrtc/moz-patch-stack/s0059.patch | 2+-
Mthird_party/libwebrtc/moz-patch-stack/s0103.patch | 2+-
Mthird_party/libwebrtc/moz-patch-stack/s0120.patch | 2+-
Mthird_party/libwebrtc/system_wrappers/BUILD.gn | 1+
Mthird_party/libwebrtc/system_wrappers/include/metrics.h | 3++-
Mthird_party/libwebrtc/video/call_stats2.cc | 2+-
Mthird_party/libwebrtc/video/call_stats2_unittest.cc | 3+--
Mthird_party/libwebrtc/video/end_to_end_tests/histogram_tests.cc | 12++++++------
Mthird_party/libwebrtc/video/end_to_end_tests/stats_tests.cc | 12++++++------
Mthird_party/libwebrtc/video/receive_statistics_proxy.cc | 16++++++++--------
Mthird_party/libwebrtc/video/receive_statistics_proxy.h | 3++-
Mthird_party/libwebrtc/video/receive_statistics_proxy_unittest.cc | 40+++++++++++++++-------------------------
Mthird_party/libwebrtc/video/send_statistics_proxy.cc | 25+++++++++++++------------
Mthird_party/libwebrtc/video/send_statistics_proxy.h | 2+-
Mthird_party/libwebrtc/video/send_statistics_proxy_unittest.cc | 46+++++++++++++++++++++++-----------------------
22 files changed, 92 insertions(+), 99 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 /home/mfroman/mozilla/elm/.moz-fast-forward/moz-libwebrtc --commit mozpatches libwebrtc -libwebrtc updated from /home/mfroman/mozilla/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-10-09T20:05:02.894973+00:00. +libwebrtc updated from /home/mfroman/mozilla/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-10-09T20:06:11.104089+00:00. # base of lastest vendoring -da3b3240cb +ef3327412d diff --git a/third_party/libwebrtc/call/call.cc b/third_party/libwebrtc/call/call.cc @@ -643,7 +643,7 @@ Call::SendStats::~SendStats() { return; TimeDelta elapsed = clock_->CurrentTime() - *first_sent_packet_time_; - if (elapsed.seconds() < metrics::kMinRunTimeInSeconds) + if (elapsed < metrics::kMinRunTime) return; const int kMinRequiredPeriodicSamples = 5; diff --git a/third_party/libwebrtc/modules/rtp_rtcp/source/ulpfec_receiver.cc b/third_party/libwebrtc/modules/rtp_rtcp/source/ulpfec_receiver.cc @@ -53,7 +53,7 @@ UlpfecReceiver::~UlpfecReceiver() { if (packet_counter_.first_packet_time != Timestamp::MinusInfinity()) { const Timestamp now = clock_->CurrentTime(); TimeDelta elapsed = (now - packet_counter_.first_packet_time); - if (elapsed.seconds() >= metrics::kMinRunTimeInSeconds) { + if (elapsed >= metrics::kMinRunTime) { if (packet_counter_.num_packets > 0) { RTC_HISTOGRAM_PERCENTAGE( "WebRTC.Video.ReceivedFecPacketsInPercent", diff --git a/third_party/libwebrtc/modules/video_coding/codecs/vp8/screenshare_layers.cc b/third_party/libwebrtc/modules/video_coding/codecs/vp8/screenshare_layers.cc @@ -597,7 +597,7 @@ void ScreenshareLayers::UpdateHistograms() { return; int64_t duration_sec = (TimeMillis() - stats_.first_frame_time_ms_ + 500) / 1000; - if (duration_sec >= metrics::kMinRunTimeInSeconds) { + if (duration_sec >= metrics::kMinRunTime.seconds()) { RTC_HISTOGRAM_COUNTS_10000( "WebRTC.Video.Screenshare.Layer0.FrameRate", (stats_.num_tl0_frames_ + (duration_sec / 2)) / duration_sec); diff --git a/third_party/libwebrtc/modules/video_coding/codecs/vp8/screenshare_layers_unittest.cc b/third_party/libwebrtc/modules/video_coding/codecs/vp8/screenshare_layers_unittest.cc @@ -534,7 +534,7 @@ TEST_F(ScreenshareLayerTest, UpdatesHistograms) { const int kTl0Qp = 35; const int kTl1Qp = 30; for (int64_t timestamp = 0; - timestamp < kTimestampDelta5Fps * 5 * metrics::kMinRunTimeInSeconds; + timestamp < kTimestampDelta5Fps * 5 * metrics::kMinRunTime.seconds(); timestamp += kTimestampDelta5Fps) { tl_config_ = NextFrameConfig(0, timestamp); if (tl_config_.drop_frame) { diff --git a/third_party/libwebrtc/moz-patch-stack/s0057.patch b/third_party/libwebrtc/moz-patch-stack/s0057.patch @@ -186,7 +186,7 @@ index f17b00efb1..e205032fa6 100644 void ForceSpsPpsIdrIsH264Keyframe(); diff --git a/video/receive_statistics_proxy.cc b/video/receive_statistics_proxy.cc -index 012716ad8d..f4905632fd 100644 +index 1ce49cad5f..861f14d578 100644 --- a/video/receive_statistics_proxy.cc +++ b/video/receive_statistics_proxy.cc @@ -817,6 +817,11 @@ void ReceiveStatisticsProxy::OnDroppedFrames(uint32_t frames_dropped) { @@ -202,10 +202,10 @@ index 012716ad8d..f4905632fd 100644 RTC_DCHECK_RUN_ON(&main_thread_); last_codec_type_ = codec_type; diff --git a/video/receive_statistics_proxy.h b/video/receive_statistics_proxy.h -index fb03196198..5e126e5915 100644 +index 111b7f3c45..fb411d4bbf 100644 --- a/video/receive_statistics_proxy.h +++ b/video/receive_statistics_proxy.h -@@ -105,6 +105,7 @@ class ReceiveStatisticsProxy : public VideoStreamBufferControllerStatsObserver, +@@ -106,6 +106,7 @@ class ReceiveStatisticsProxy : public VideoStreamBufferControllerStatsObserver, void OnDecodableFrame(TimeDelta jitter_buffer_delay, TimeDelta target_delay, TimeDelta minimum_delay) override; diff --git a/third_party/libwebrtc/moz-patch-stack/s0058.patch b/third_party/libwebrtc/moz-patch-stack/s0058.patch @@ -10,7 +10,7 @@ Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/56fbf0469e25fa0d5 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/video/receive_statistics_proxy.cc b/video/receive_statistics_proxy.cc -index f4905632fd..ab5825d8c3 100644 +index 861f14d578..252cd3ecc2 100644 --- a/video/receive_statistics_proxy.cc +++ b/video/receive_statistics_proxy.cc @@ -818,8 +818,13 @@ void ReceiveStatisticsProxy::OnDroppedFrames(uint32_t frames_dropped) { diff --git a/third_party/libwebrtc/moz-patch-stack/s0059.patch b/third_party/libwebrtc/moz-patch-stack/s0059.patch @@ -116,7 +116,7 @@ index 251b464f37..90fbb7780f 100644 num_discarded_packets_ += num_discarded_packets; } diff --git a/video/receive_statistics_proxy.cc b/video/receive_statistics_proxy.cc -index ab5825d8c3..56203f11f2 100644 +index 252cd3ecc2..cf5bab267e 100644 --- a/video/receive_statistics_proxy.cc +++ b/video/receive_statistics_proxy.cc @@ -39,6 +39,7 @@ diff --git a/third_party/libwebrtc/moz-patch-stack/s0103.patch b/third_party/libwebrtc/moz-patch-stack/s0103.patch @@ -741,7 +741,7 @@ index 27410af8a8..d0b13e2305 100644 ] } diff --git a/system_wrappers/BUILD.gn b/system_wrappers/BUILD.gn -index 02ae34a2f8..2ecd352a88 100644 +index 52efbf7c09..7461af4d7b 100644 --- a/system_wrappers/BUILD.gn +++ b/system_wrappers/BUILD.gn @@ -7,8 +7,8 @@ diff --git a/third_party/libwebrtc/moz-patch-stack/s0120.patch b/third_party/libwebrtc/moz-patch-stack/s0120.patch @@ -12,7 +12,7 @@ Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/19164e58323d59c1f 3 files changed, 7 insertions(+), 22 deletions(-) diff --git a/call/call.cc b/call/call.cc -index f20a58a843..533f6d5a37 100644 +index ddd0ec6e58..361cfb1604 100644 --- a/call/call.cc +++ b/call/call.cc @@ -515,19 +515,6 @@ class Call final : public webrtc::Call, diff --git a/third_party/libwebrtc/system_wrappers/BUILD.gn b/third_party/libwebrtc/system_wrappers/BUILD.gn @@ -75,6 +75,7 @@ rtc_library("metrics") { defines = [ "WEBRTC_EXCLUDE_METRICS_DEFAULT" ] } deps = [ + "../api/units:time_delta", "../rtc_base:checks", "../rtc_base:macromagic", "../rtc_base:stringutils", diff --git a/third_party/libwebrtc/system_wrappers/include/metrics.h b/third_party/libwebrtc/system_wrappers/include/metrics.h @@ -18,6 +18,7 @@ #include <string> #include "absl/strings/string_view.h" +#include "api/units/time_delta.h" #include "rtc_base/checks.h" #include "rtc_base/string_utils.h" @@ -392,7 +393,7 @@ namespace webrtc { namespace metrics { // Time that should have elapsed for stats that are gathered once per call. -constexpr int kMinRunTimeInSeconds = 10; +inline constexpr TimeDelta kMinRunTime = TimeDelta::Seconds(10); class Histogram; diff --git a/third_party/libwebrtc/video/call_stats2.cc b/third_party/libwebrtc/video/call_stats2.cc @@ -165,7 +165,7 @@ void CallStats::UpdateHistograms() { int64_t elapsed_sec = (clock_->TimeInMilliseconds() - time_of_first_rtt_ms_) / 1000; - if (elapsed_sec >= metrics::kMinRunTimeInSeconds) { + if (elapsed_sec >= metrics::kMinRunTime.seconds()) { int64_t avg_rtt_ms = (sum_avg_rtt_ms_ + num_avg_rtt_ / 2) / num_avg_rtt_; RTC_HISTOGRAM_COUNTS_10000( "WebRTC.Video.AverageRoundTripTimeInMilliseconds", avg_rtt_ms); diff --git a/third_party/libwebrtc/video/call_stats2_unittest.cc b/third_party/libwebrtc/video/call_stats2_unittest.cc @@ -295,8 +295,7 @@ TEST_F(CallStats2Test, ProducesHistogramMetrics) { AsyncSimulateRttUpdate(kRtt); loop_.Run(); - fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * - CallStats::kUpdateInterval.ms()); + fake_clock_.AdvanceTime(metrics::kMinRunTime); AsyncSimulateRttUpdate(kRtt); loop_.Run(); diff --git a/third_party/libwebrtc/video/end_to_end_tests/histogram_tests.cc b/third_party/libwebrtc/video/end_to_end_tests/histogram_tests.cc @@ -17,6 +17,7 @@ #include "api/environment/environment.h" #include "api/rtp_parameters.h" #include "api/test/video/function_video_encoder_factory.h" +#include "api/units/timestamp.h" #include "api/video/video_codec_type.h" #include "api/video/video_frame.h" #include "api/video/video_sink_interface.h" @@ -94,12 +95,11 @@ void HistogramTest::VerifyHistogramStats(bool use_rtx, } bool MinMetricRunTimePassed() { - int64_t now_ms = Clock::GetRealTimeClock()->TimeInMilliseconds(); - if (!start_runtime_ms_) - start_runtime_ms_ = now_ms; + Timestamp now = Clock::GetRealTimeClock()->CurrentTime(); + if (!start_runtime_) + start_runtime_ = now; - int64_t elapsed_sec = (now_ms - *start_runtime_ms_) / 1000; - return elapsed_sec > metrics::kMinRunTimeInSeconds * 2; + return now - *start_runtime_ > metrics::kMinRunTime * 2; } bool MinNumberOfFramesReceived() const { @@ -168,7 +168,7 @@ void HistogramTest::VerifyHistogramStats(bool use_rtx, const bool use_fec_; const bool screenshare_; test::FunctionVideoEncoderFactory encoder_factory_; - std::optional<int64_t> start_runtime_ms_; + std::optional<Timestamp> start_runtime_; int num_frames_received_ RTC_GUARDED_BY(&mutex_); } test(use_rtx, use_fec, screenshare); diff --git a/third_party/libwebrtc/video/end_to_end_tests/stats_tests.cc b/third_party/libwebrtc/video/end_to_end_tests/stats_tests.cc @@ -30,6 +30,7 @@ #include "api/test/video/function_video_encoder_factory.h" #include "api/transport/bitrate_settings.h" #include "api/units/time_delta.h" +#include "api/units/timestamp.h" #include "api/video/video_frame.h" #include "api/video/video_sink_interface.h" #include "api/video_codecs/sdp_video_format.h" @@ -682,12 +683,11 @@ TEST_F(StatsEndToEndTest, VerifyNackStats) { } bool MinMetricRunTimePassed() { - int64_t now_ms = Clock::GetRealTimeClock()->TimeInMilliseconds(); - if (!start_runtime_ms_) - start_runtime_ms_ = now_ms; + Timestamp now = Clock::GetRealTimeClock()->CurrentTime(); + if (!start_runtime_) + start_runtime_ = now; - int64_t elapsed_sec = (now_ms - *start_runtime_ms_) / 1000; - return elapsed_sec > metrics::kMinRunTimeInSeconds; + return now - *start_runtime_ > metrics::kMinRunTime; } void ModifyVideoConfigs( @@ -719,7 +719,7 @@ TEST_F(StatsEndToEndTest, VerifyNackStats) { bool dropped_rtp_packet_requested_ RTC_GUARDED_BY(&mutex_) = false; std::vector<VideoReceiveStreamInterface*> receive_streams_; VideoSendStream* send_stream_ = nullptr; - std::optional<int64_t> start_runtime_ms_; + std::optional<Timestamp> start_runtime_; TaskQueueBase* const task_queue_; scoped_refptr<PendingTaskSafetyFlag> task_safety_flag_ = PendingTaskSafetyFlag::CreateDetached(); diff --git a/third_party/libwebrtc/video/receive_statistics_proxy.cc b/third_party/libwebrtc/video/receive_statistics_proxy.cc @@ -91,7 +91,7 @@ ReceiveStatisticsProxy::ReceiveStatisticsProxy(uint32_t remote_ssrc, Clock* clock, TaskQueueBase* worker_thread) : clock_(clock), - start_ms_(clock->TimeInMilliseconds()), + start_(clock->CurrentTime()), remote_ssrc_(remote_ssrc), // 1000ms window, scale 1000 for ms to s. decode_fps_estimator_(1000, 1000), @@ -125,14 +125,14 @@ void ReceiveStatisticsProxy::UpdateHistograms( char log_stream_buf[8 * 1024]; SimpleStringBuilder log_stream(log_stream_buf); - int stream_duration_sec = (clock_->TimeInMilliseconds() - start_ms_) / 1000; + TimeDelta stream_duration = clock_->CurrentTime() - start_; if (stats_.frame_counts.key_frames > 0 || stats_.frame_counts.delta_frames > 0) { RTC_HISTOGRAM_COUNTS_100000("WebRTC.Video.ReceiveStreamLifetimeInSeconds", - stream_duration_sec); + stream_duration.seconds()); log_stream << "WebRTC.Video.ReceiveStreamLifetimeInSeconds " - << stream_duration_sec << '\n'; + << stream_duration.seconds() << '\n'; } log_stream << "Frames decoded " << stats_.frames_decoded << '\n'; @@ -145,7 +145,7 @@ void ReceiveStatisticsProxy::UpdateHistograms( << '\n'; } - if (fraction_lost && stream_duration_sec >= metrics::kMinRunTimeInSeconds) { + if (fraction_lost && stream_duration >= metrics::kMinRunTime) { RTC_HISTOGRAM_PERCENTAGE("WebRTC.Video.ReceivedPacketsLostInPercent", *fraction_lost); log_stream << "WebRTC.Video.ReceivedPacketsLostInPercent " << *fraction_lost @@ -155,7 +155,7 @@ void ReceiveStatisticsProxy::UpdateHistograms( if (first_decoded_frame_time_ms_) { const int64_t elapsed_ms = (clock_->TimeInMilliseconds() - *first_decoded_frame_time_ms_); - if (elapsed_ms >= metrics::kMinRunTimeInSeconds * kNumMillisecsPerSec) { + if (elapsed_ms >= metrics::kMinRunTime.ms()) { int decoded_fps = static_cast<int>( (stats_.frames_decoded * 1000.0f / elapsed_ms) + 0.5f); RTC_HISTOGRAM_COUNTS_100("WebRTC.Video.DecodedFramesPerSecond", @@ -335,7 +335,7 @@ void ReceiveStatisticsProxy::UpdateHistograms( // Don't report these 3 metrics unsliced, as more precise variants // are reported separately in this method. float flow_duration_sec = stats.flow_duration_ms / 1000.0; - if (flow_duration_sec >= metrics::kMinRunTimeInSeconds) { + if (flow_duration_sec >= metrics::kMinRunTime.seconds()) { int media_bitrate_kbps = static_cast<int>(stats.total_media_bytes * 8 / flow_duration_sec / 1000); RTC_HISTOGRAM_COUNTS_SPARSE_10000( @@ -369,7 +369,7 @@ void ReceiveStatisticsProxy::UpdateHistograms( rtp_rtx_stats.Add(*rtx_stats); TimeDelta elapsed = rtp_rtx_stats.TimeSinceFirstPacket(clock_->CurrentTime()); - if (elapsed >= TimeDelta::Seconds(metrics::kMinRunTimeInSeconds)) { + if (elapsed >= metrics::kMinRunTime) { int64_t elapsed_sec = elapsed.seconds(); RTC_HISTOGRAM_COUNTS_10000( "WebRTC.Video.BitrateReceivedInKbps", diff --git a/third_party/libwebrtc/video/receive_statistics_proxy.h b/third_party/libwebrtc/video/receive_statistics_proxy.h @@ -22,6 +22,7 @@ #include "api/task_queue/pending_task_safety_flag.h" #include "api/task_queue/task_queue_base.h" #include "api/units/time_delta.h" +#include "api/units/timestamp.h" #include "api/video/video_codec_type.h" #include "api/video/video_content_type.h" #include "api/video/video_frame.h" @@ -168,7 +169,7 @@ class ReceiveStatisticsProxy : public VideoStreamBufferControllerStatsObserver, int64_t now_ms) const; Clock* const clock_; - const int64_t start_ms_; + const Timestamp start_; // Note: The `stats_.rtp_stats` member is not used or populated by this class. mutable VideoReceiveStreamInterface::Stats stats_ diff --git a/third_party/libwebrtc/video/receive_statistics_proxy_unittest.cc b/third_party/libwebrtc/video/receive_statistics_proxy_unittest.cc @@ -137,8 +137,7 @@ TEST_F(ReceiveStatisticsProxyTest, OnDecodedFrameIncreasesFramesDecoded) { TEST_F(ReceiveStatisticsProxyTest, DecodedFpsIsReported) { const Frequency kFps = Frequency::Hertz(20); - const int kRequiredSamples = - TimeDelta::Seconds(metrics::kMinRunTimeInSeconds) * kFps; + const int kRequiredSamples = metrics::kMinRunTime * kFps; VideoFrame frame = CreateFrame(kWidth, kHeight); for (int i = 0; i < kRequiredSamples; ++i) { statistics_proxy_->OnDecodedFrame(frame, std::nullopt, TimeDelta::Zero(), @@ -155,8 +154,7 @@ TEST_F(ReceiveStatisticsProxyTest, DecodedFpsIsReported) { TEST_F(ReceiveStatisticsProxyTest, DecodedFpsIsNotReportedForTooFewSamples) { const Frequency kFps = Frequency::Hertz(20); - const int kRequiredSamples = - TimeDelta::Seconds(metrics::kMinRunTimeInSeconds) * kFps; + const int kRequiredSamples = metrics::kMinRunTime * kFps; VideoFrame frame = CreateFrame(kWidth, kHeight); for (int i = 0; i < kRequiredSamples - 1; ++i) { statistics_proxy_->OnDecodedFrame(frame, std::nullopt, TimeDelta::Zero(), @@ -808,8 +806,7 @@ TEST_F(ReceiveStatisticsProxyTest, PacketLossHistogramIsUpdated) { SetUp(); // Min run time has passed. - time_controller_.AdvanceTime( - TimeDelta::Seconds(metrics::kMinRunTimeInSeconds)); + time_controller_.AdvanceTime(metrics::kMinRunTime); statistics_proxy_->UpdateHistograms(10, StreamDataCounters(), nullptr); EXPECT_METRIC_EQ( 1, metrics::NumSamples("WebRTC.Video.ReceivedPacketsLostInPercent")); @@ -1145,8 +1142,7 @@ TEST_F(ReceiveStatisticsProxyTest, ZeroDelayReportedIfFrameNotDelayed) { MetaData(CreateFrameWithRenderTime(Now()))); // Min run time has passed. - time_controller_.AdvanceTime( - TimeDelta::Seconds((metrics::kMinRunTimeInSeconds))); + time_controller_.AdvanceTime(metrics::kMinRunTime); FlushAndUpdateHistograms(std::nullopt, StreamDataCounters(), nullptr); EXPECT_METRIC_EQ(1, metrics::NumSamples("WebRTC.Video.DelayedFramesToRenderer")); @@ -1168,8 +1164,7 @@ TEST_F(ReceiveStatisticsProxyTest, MetaData(CreateFrameWithRenderTime(Now()))); // Min run time has not passed. - time_controller_.AdvanceTime( - TimeDelta::Seconds(metrics::kMinRunTimeInSeconds) - TimeDelta::Millis(1)); + time_controller_.AdvanceTime(metrics::kMinRunTime - TimeDelta::Millis(1)); statistics_proxy_->UpdateHistograms(std::nullopt, StreamDataCounters(), nullptr); EXPECT_METRIC_EQ(0, @@ -1186,8 +1181,7 @@ TEST_F(ReceiveStatisticsProxyTest, VideoFrameType::kVideoFrameKey); // Min run time has passed. No rendered frames. - time_controller_.AdvanceTime( - TimeDelta::Seconds((metrics::kMinRunTimeInSeconds))); + time_controller_.AdvanceTime(metrics::kMinRunTime); statistics_proxy_->UpdateHistograms(std::nullopt, StreamDataCounters(), nullptr); EXPECT_METRIC_EQ(0, @@ -1207,8 +1201,7 @@ TEST_F(ReceiveStatisticsProxyTest, DelayReportedIfFrameIsDelayed) { MetaData(CreateFrameWithRenderTimeMs(Now().ms() - 1))); // Min run time has passed. - time_controller_.AdvanceTime( - TimeDelta::Seconds(metrics::kMinRunTimeInSeconds)); + time_controller_.AdvanceTime(metrics::kMinRunTime); FlushAndUpdateHistograms(std::nullopt, StreamDataCounters(), nullptr); EXPECT_METRIC_EQ(1, metrics::NumSamples("WebRTC.Video.DelayedFramesToRenderer")); @@ -1240,8 +1233,7 @@ TEST_F(ReceiveStatisticsProxyTest, AverageDelayOfDelayedFramesIsReported) { MetaData(CreateFrameWithRenderTimeMs(kNowMs + 1))); // Min run time has passed. - time_controller_.AdvanceTime( - TimeDelta::Seconds(metrics::kMinRunTimeInSeconds)); + time_controller_.AdvanceTime(metrics::kMinRunTime); FlushAndUpdateHistograms(std::nullopt, StreamDataCounters(), nullptr); EXPECT_METRIC_EQ(1, metrics::NumSamples("WebRTC.Video.DelayedFramesToRenderer")); @@ -1259,8 +1251,7 @@ TEST_F(ReceiveStatisticsProxyTest, StreamDataCounters data_counters; data_counters.first_packet_time = time_controller_.GetClock()->CurrentTime(); - time_controller_.AdvanceTime( - TimeDelta::Seconds(metrics::kMinRunTimeInSeconds) - TimeDelta::Millis(1)); + time_controller_.AdvanceTime(metrics::kMinRunTime - TimeDelta::Millis(1)); RtcpPacketTypeCounter counter; statistics_proxy_->RtcpPacketTypesCounterUpdated(kRemoteSsrc, counter); @@ -1277,8 +1268,7 @@ TEST_F(ReceiveStatisticsProxyTest, TEST_F(ReceiveStatisticsProxyTest, RtcpHistogramsAreUpdated) { StreamDataCounters data_counters; data_counters.first_packet_time = time_controller_.GetClock()->CurrentTime(); - time_controller_.AdvanceTime( - TimeDelta::Seconds(metrics::kMinRunTimeInSeconds)); + time_controller_.AdvanceTime(metrics::kMinRunTime); const uint32_t kFirPackets = 100; const uint32_t kPliPackets = 200; @@ -1299,13 +1289,13 @@ TEST_F(ReceiveStatisticsProxyTest, RtcpHistogramsAreUpdated) { 1, metrics::NumSamples("WebRTC.Video.NackPacketsSentPerMinute")); EXPECT_METRIC_EQ( 1, metrics::NumEvents("WebRTC.Video.FirPacketsSentPerMinute", - kFirPackets * 60 / metrics::kMinRunTimeInSeconds)); + kFirPackets * 60 / metrics::kMinRunTime.seconds())); EXPECT_METRIC_EQ( 1, metrics::NumEvents("WebRTC.Video.PliPacketsSentPerMinute", - kPliPackets * 60 / metrics::kMinRunTimeInSeconds)); - EXPECT_METRIC_EQ( - 1, metrics::NumEvents("WebRTC.Video.NackPacketsSentPerMinute", - kNackPackets * 60 / metrics::kMinRunTimeInSeconds)); + kPliPackets * 60 / metrics::kMinRunTime.seconds())); + EXPECT_METRIC_EQ(1, metrics::NumEvents( + "WebRTC.Video.NackPacketsSentPerMinute", + kNackPackets * 60 / metrics::kMinRunTime.seconds())); } class ReceiveStatisticsProxyTestWithFreezeDuration diff --git a/third_party/libwebrtc/video/send_statistics_proxy.cc b/third_party/libwebrtc/video/send_statistics_proxy.cc @@ -176,7 +176,7 @@ SendStatisticsProxy::SendStatisticsProxy( fallback_max_pixels_disabled_( GetFallbackMaxPixelsIfFieldTrialDisabled(field_trials)), content_type_(content_type), - start_ms_(clock->TimeInMilliseconds()), + start_(clock->CurrentTime()), encode_time_(kEncodeTimeWeigthFactor), quality_limitation_reason_tracker_(clock_), media_byte_rate_tracker_(kBucketSizeMs, kBucketCount), @@ -194,11 +194,11 @@ SendStatisticsProxy::~SendStatisticsProxy() { MutexLock lock(&mutex_); uma_container_->UpdateHistograms(rtp_config_, stats_); - int64_t elapsed_sec = (clock_->TimeInMilliseconds() - start_ms_) / 1000; + TimeDelta elapsed = clock_->CurrentTime() - start_; RTC_HISTOGRAM_COUNTS_100000("WebRTC.Video.SendStreamLifetimeInSeconds", - elapsed_sec); + elapsed.seconds()); - if (elapsed_sec >= metrics::kMinRunTimeInSeconds) + if (elapsed >= metrics::kMinRunTime) UpdateCodecTypeHistogram(payload_name_); } @@ -520,7 +520,7 @@ void SendStatisticsProxy::UmaSamplesContainer::UpdateHistograms( if (first_rtp_stats_time_ms_ != -1) { quality_adapt_timer_.Stop(clock_->TimeInMilliseconds()); int64_t elapsed_sec = quality_adapt_timer_.total_ms / 1000; - if (elapsed_sec >= metrics::kMinRunTimeInSeconds) { + if (elapsed_sec >= metrics::kMinRunTime.seconds()) { int quality_changes = current_stats.number_of_quality_adapt_changes - start_stats_.number_of_quality_adapt_changes; // Only base stats on changes during a call, discard initial changes. @@ -534,7 +534,7 @@ void SendStatisticsProxy::UmaSamplesContainer::UpdateHistograms( } cpu_adapt_timer_.Stop(clock_->TimeInMilliseconds()); elapsed_sec = cpu_adapt_timer_.total_ms / 1000; - if (elapsed_sec >= metrics::kMinRunTimeInSeconds) { + if (elapsed_sec >= metrics::kMinRunTime.seconds()) { int cpu_changes = current_stats.number_of_cpu_adapt_changes - start_stats_.number_of_cpu_adapt_changes; RTC_HISTOGRAMS_COUNTS_100(kIndex, @@ -546,7 +546,7 @@ void SendStatisticsProxy::UmaSamplesContainer::UpdateHistograms( if (first_rtcp_stats_time_ms_ != -1) { int64_t elapsed_sec = (clock_->TimeInMilliseconds() - first_rtcp_stats_time_ms_) / 1000; - if (elapsed_sec >= metrics::kMinRunTimeInSeconds) { + if (elapsed_sec >= metrics::kMinRunTime.seconds()) { int fraction_lost = report_block_stats_.FractionLostInPercent(); if (fraction_lost != -1) { RTC_HISTOGRAMS_PERCENTAGE( @@ -596,14 +596,14 @@ void SendStatisticsProxy::UmaSamplesContainer::UpdateHistograms( if (first_rtp_stats_time_ms_ != -1) { int64_t elapsed_sec = (clock_->TimeInMilliseconds() - first_rtp_stats_time_ms_) / 1000; - if (elapsed_sec >= metrics::kMinRunTimeInSeconds) { + if (elapsed_sec >= metrics::kMinRunTime.seconds()) { RTC_HISTOGRAMS_COUNTS_100(kIndex, uma_prefix_ + "NumberOfPauseEvents", target_rate_updates_.pause_resume_events); log_stream << uma_prefix_ << "NumberOfPauseEvents " << target_rate_updates_.pause_resume_events << "\n"; int paused_time_percent = - paused_time_counter_.Percent(metrics::kMinRunTimeInSeconds * 1000); + paused_time_counter_.Percent(metrics::kMinRunTime.seconds() * 1000); if (paused_time_percent != -1) { RTC_HISTOGRAMS_PERCENTAGE(kIndex, uma_prefix_ + "PausedTimeInPercent", paused_time_percent); @@ -615,10 +615,11 @@ void SendStatisticsProxy::UmaSamplesContainer::UpdateHistograms( if (fallback_info_.is_possible) { // Double interval since there is some time before fallback may occur. - const int kMinRunTimeMs = 2 * metrics::kMinRunTimeInSeconds * 1000; + const TimeDelta kMinRunTime = 2 * metrics::kMinRunTime; int64_t elapsed_ms = fallback_info_.elapsed_ms; - int fallback_time_percent = fallback_active_counter_.Percent(kMinRunTimeMs); - if (fallback_time_percent != -1 && elapsed_ms >= kMinRunTimeMs) { + int fallback_time_percent = + fallback_active_counter_.Percent(kMinRunTime.ms()); + if (fallback_time_percent != -1 && elapsed_ms >= kMinRunTime.ms()) { RTC_HISTOGRAMS_PERCENTAGE( kIndex, uma_prefix_ + "Encoder.ForcedSwFallbackTimeInPercent.Vp8", fallback_time_percent); diff --git a/third_party/libwebrtc/video/send_statistics_proxy.h b/third_party/libwebrtc/video/send_statistics_proxy.h @@ -309,7 +309,7 @@ class SendStatisticsProxy : public VideoStreamEncoderObserver, const std::optional<int> fallback_max_pixels_disabled_; mutable Mutex mutex_; VideoEncoderConfig::ContentType content_type_ RTC_GUARDED_BY(mutex_); - const int64_t start_ms_; + const Timestamp start_; VideoSendStream::Stats stats_ RTC_GUARDED_BY(mutex_); ExpFilter encode_time_ RTC_GUARDED_BY(mutex_); QualityLimitationReasonTracker quality_limitation_reason_tracker_ diff --git a/third_party/libwebrtc/video/send_statistics_proxy_unittest.cc b/third_party/libwebrtc/video/send_statistics_proxy_unittest.cc @@ -798,7 +798,7 @@ TEST_F(SendStatisticsProxyTest, AdaptChangesNotReported_AdaptationNotEnabled) { // First RTP packet sent. UpdateDataCounters(kFirstSsrc); // Min runtime has passed. - fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000); + fake_clock_.AdvanceTime(metrics::kMinRunTime); statistics_proxy_.reset(); EXPECT_METRIC_EQ( 0, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); @@ -812,7 +812,7 @@ TEST_F(SendStatisticsProxyTest, AdaptChangesNotReported_MinRuntimeNotPassed) { // Enable adaptation. statistics_proxy_->UpdateAdaptationSettings(kScalingEnabled, kScalingEnabled); // Min runtime has not passed. - fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000 - 1); + fake_clock_.AdvanceTime(metrics::kMinRunTime - TimeDelta::Millis(1)); statistics_proxy_.reset(); EXPECT_METRIC_EQ( 0, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); @@ -826,7 +826,7 @@ TEST_F(SendStatisticsProxyTest, ZeroAdaptChangesReported) { // Enable adaptation. statistics_proxy_->UpdateAdaptationSettings(kScalingEnabled, kScalingEnabled); // Min runtime has passed. - fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000); + fake_clock_.AdvanceTime(metrics::kMinRunTime); statistics_proxy_.reset(); EXPECT_METRIC_EQ( 1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); @@ -1033,7 +1033,7 @@ TEST_F(SendStatisticsProxyTest, statistics_proxy_->OnSuspendChange(false); // Min runtime has passed but scaling not enabled. - fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000); + fake_clock_.AdvanceTime(metrics::kMinRunTime); statistics_proxy_.reset(); EXPECT_METRIC_EQ( 0, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); @@ -1863,7 +1863,7 @@ TEST_F(SendStatisticsProxyTest, LifetimeHistogramIsUpdated) { } TEST_F(SendStatisticsProxyTest, CodecTypeHistogramIsUpdated) { - fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000); + fake_clock_.AdvanceTime(metrics::kMinRunTime); statistics_proxy_.reset(); EXPECT_METRIC_EQ(1, metrics::NumSamples("WebRTC.Video.Encoder.CodecType")); } @@ -1873,7 +1873,7 @@ TEST_F(SendStatisticsProxyTest, PauseEventHistogramIsUpdated) { UpdateDataCounters(kFirstSsrc); // Min runtime has passed. - fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000); + fake_clock_.AdvanceTime(metrics::kMinRunTime); statistics_proxy_.reset(); EXPECT_METRIC_EQ(1, metrics::NumSamples("WebRTC.Video.NumberOfPauseEvents")); EXPECT_METRIC_EQ(1, @@ -1886,7 +1886,7 @@ TEST_F(SendStatisticsProxyTest, UpdateDataCounters(kFirstSsrc); // Min runtime has not passed. - fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000 - 1); + fake_clock_.AdvanceTime(metrics::kMinRunTime - TimeDelta::Millis(1)); statistics_proxy_.reset(); EXPECT_METRIC_EQ(0, metrics::NumSamples("WebRTC.Video.NumberOfPauseEvents")); EXPECT_METRIC_EQ(0, metrics::NumSamples("WebRTC.Video.PausedTimeInPercent")); @@ -1895,7 +1895,7 @@ TEST_F(SendStatisticsProxyTest, TEST_F(SendStatisticsProxyTest, PauseEventHistogramIsNotUpdatedIfNoMediaIsSent) { // First RTP packet not sent. - fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000); + fake_clock_.AdvanceTime(metrics::kMinRunTime); statistics_proxy_.reset(); EXPECT_METRIC_EQ(0, metrics::NumSamples("WebRTC.Video.NumberOfPauseEvents")); } @@ -1906,7 +1906,7 @@ TEST_F(SendStatisticsProxyTest, NoPauseEvent) { // No change. Video: 10000 ms, paused: 0 ms (0%). statistics_proxy_->OnSetEncoderTargetRate(50000); - fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000); + fake_clock_.AdvanceTime(metrics::kMinRunTime); statistics_proxy_->OnSetEncoderTargetRate(0); // VideoSendStream::Stop statistics_proxy_.reset(); @@ -1972,11 +1972,11 @@ TEST_F(SendStatisticsProxyTest, PausedTimeHistogramIsNotUpdatedIfMinRuntimeHasNotPassed) { // First RTP packet sent. UpdateDataCounters(kFirstSsrc); - fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000); + fake_clock_.AdvanceTime(metrics::kMinRunTime); // Min runtime has not passed. statistics_proxy_->OnSetEncoderTargetRate(50000); - fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000 - 1); + fake_clock_.AdvanceTime(metrics::kMinRunTime - TimeDelta::Millis(1)); statistics_proxy_->OnSetEncoderTargetRate(0); // VideoSendStream::Stop statistics_proxy_.reset(); @@ -2483,13 +2483,13 @@ TEST_F(SendStatisticsProxyTest, ResetsRtcpCountersOnContentChange) { proxy->RtcpPacketTypesCounterUpdated(kFirstSsrc, counters); proxy->RtcpPacketTypesCounterUpdated(kSecondSsrc, counters); - fake_clock_.AdvanceTimeMilliseconds(1000 * metrics::kMinRunTimeInSeconds); + fake_clock_.AdvanceTime(metrics::kMinRunTime); - counters.nack_packets += 1 * metrics::kMinRunTimeInSeconds; - counters.fir_packets += 2 * metrics::kMinRunTimeInSeconds; - counters.pli_packets += 3 * metrics::kMinRunTimeInSeconds; - counters.unique_nack_requests += 4 * metrics::kMinRunTimeInSeconds; - counters.nack_requests += 5 * metrics::kMinRunTimeInSeconds; + counters.nack_packets += 1 * metrics::kMinRunTime.seconds(); + counters.fir_packets += 2 * metrics::kMinRunTime.seconds(); + counters.pli_packets += 3 * metrics::kMinRunTime.seconds(); + counters.unique_nack_requests += 4 * metrics::kMinRunTime.seconds(); + counters.nack_requests += 5 * metrics::kMinRunTime.seconds(); proxy->RtcpPacketTypesCounterUpdated(kFirstSsrc, counters); proxy->RtcpPacketTypesCounterUpdated(kSecondSsrc, counters); @@ -2527,13 +2527,13 @@ TEST_F(SendStatisticsProxyTest, ResetsRtcpCountersOnContentChange) { proxy->RtcpPacketTypesCounterUpdated(kFirstSsrc, counters); proxy->RtcpPacketTypesCounterUpdated(kSecondSsrc, counters); - fake_clock_.AdvanceTimeMilliseconds(1000 * metrics::kMinRunTimeInSeconds); + fake_clock_.AdvanceTime(metrics::kMinRunTime); - counters.nack_packets += 1 * metrics::kMinRunTimeInSeconds; - counters.fir_packets += 2 * metrics::kMinRunTimeInSeconds; - counters.pli_packets += 3 * metrics::kMinRunTimeInSeconds; - counters.unique_nack_requests += 4 * metrics::kMinRunTimeInSeconds; - counters.nack_requests += 5 * metrics::kMinRunTimeInSeconds; + counters.nack_packets += 1 * metrics::kMinRunTime.seconds(); + counters.fir_packets += 2 * metrics::kMinRunTime.seconds(); + counters.pli_packets += 3 * metrics::kMinRunTime.seconds(); + counters.unique_nack_requests += 4 * metrics::kMinRunTime.seconds(); + counters.nack_requests += 5 * metrics::kMinRunTime.seconds(); proxy->RtcpPacketTypesCounterUpdated(kFirstSsrc, counters); proxy->RtcpPacketTypesCounterUpdated(kSecondSsrc, counters);