From 8ac4a464f0fe8717102dc003ec7937da5c40aa98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Spr=C3=A5ng?= Date: Mon, 8 Jul 2024 17:54:13 +0200 Subject: [PATCH] Default enable new bitrate adjuster behavior. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Only minor positive changes seen in initial testing. Let's default- enable and monitor behavior through the normal release cycle. Bug: b/349561566 Change-Id: Id6b39daa159068bf076acc34888b5d7eaf110329 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/356641 Commit-Queue: Sergey Silkin Reviewed-by: Sergey Silkin Auto-Submit: Erik Språng Cr-Commit-Position: refs/heads/main@{#42607} --- video/encoder_bitrate_adjuster.cc | 2 +- video/rate_utilization_tracker.cc | 4 +++- video/rate_utilization_tracker_unittest.cc | 17 +++++++++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/video/encoder_bitrate_adjuster.cc b/video/encoder_bitrate_adjuster.cc index ae25527427..8743099ae3 100644 --- a/video/encoder_bitrate_adjuster.cc +++ b/video/encoder_bitrate_adjuster.cc @@ -51,7 +51,7 @@ EncoderBitrateAdjuster::EncoderBitrateAdjuster( Clock& clock) : utilize_bandwidth_headroom_(RateControlSettings(field_trials) .BitrateAdjusterCanUseNetworkHeadroom()), - use_newfangled_headroom_adjustment_(field_trials.IsEnabled( + use_newfangled_headroom_adjustment_(!field_trials.IsDisabled( "WebRTC-BitrateAdjusterUseNewfangledHeadroomAdjustment")), frames_since_layout_change_(0), min_bitrates_bps_{}, diff --git a/video/rate_utilization_tracker.cc b/video/rate_utilization_tracker.cc index 373493c1f0..9403ff13b4 100644 --- a/video/rate_utilization_tracker.cc +++ b/video/rate_utilization_tracker.cc @@ -91,7 +91,9 @@ absl::optional RateUtilizationTracker::GetRateUtilizationFactor( if (update.produced_data.IsZero()) { // Just a rate update past the last seen produced data. - data_allocated_for_last_data += allocated_since_previous_data_point; + data_allocated_for_last_data = + std::min(size_of_last_data, data_allocated_for_last_data + + allocated_since_previous_data_point); } else { // A newer data point with produced data, reset accumulator for rate // allocated past the last data point. diff --git a/video/rate_utilization_tracker_unittest.cc b/video/rate_utilization_tracker_unittest.cc index 33efbdd619..2e75d66a7b 100644 --- a/video/rate_utilization_tracker_unittest.cc +++ b/video/rate_utilization_tracker_unittest.cc @@ -248,5 +248,22 @@ TEST(RateUtilizationTrackerTest, EqualTimestampsTreatedAtSameDataPoint) { PrettyCloseTo(3.0 / 4.0)); } +TEST(RateUtilizationTrackerTest, FullRateAfterLastDataPoint) { + RateUtilizationTracker tracker(kDefaultMaxDataPoints, kDefaultTimeWindow); + constexpr TimeDelta kFrameInterval = TimeDelta::Seconds(1) / 33; + constexpr DataRate kTargetRate = DataRate::KilobitsPerSec(100); + constexpr DataSize kIdealFrameSize = kTargetRate * kFrameInterval; + + tracker.OnDataRateChanged(kTargetRate, kStartTime); + tracker.OnDataProduced(kIdealFrameSize, kStartTime); + + // New rate update, but accumulated rate for last data point fully saturated + // by next to last rate update. + tracker.OnDataRateChanged(kTargetRate, kStartTime + kFrameInterval * 2); + + EXPECT_THAT(tracker.GetRateUtilizationFactor(kStartTime + kFrameInterval * 3), + PrettyCloseTo(1.0 / 3.0)); +} + } // namespace } // namespace webrtc