diff --git a/modules/congestion_controller/goog_cc/probe_controller.cc b/modules/congestion_controller/goog_cc/probe_controller.cc index 4e58830f33..6139704fb5 100644 --- a/modules/congestion_controller/goog_cc/probe_controller.cc +++ b/modules/congestion_controller/goog_cc/probe_controller.cc @@ -515,16 +515,15 @@ std::vector ProbeController::InitiateProbing( RTC_LOG(LS_INFO) << "Not sending probe, Network state estimate is zero"; return {}; } - estimate_capped_bitrate = - std::min({estimate_capped_bitrate, max_probe_bitrate, - network_estimate_->link_capacity_upper * - config_.network_state_probe_scale}); + estimate_capped_bitrate = std::min( + {estimate_capped_bitrate, max_probe_bitrate, + std::max(estimated_bitrate_, network_estimate_->link_capacity_upper * + config_.network_state_probe_scale)}); } std::vector pending_probes; for (DataRate bitrate : bitrates_to_probe) { RTC_DCHECK(!bitrate.IsZero()); - bitrate = std::min(bitrate, estimate_capped_bitrate); if (bitrate > max_probe_bitrate) { bitrate = max_probe_bitrate; diff --git a/modules/congestion_controller/goog_cc/probe_controller_unittest.cc b/modules/congestion_controller/goog_cc/probe_controller_unittest.cc index 939a95ae8c..6c02b3e2b5 100644 --- a/modules/congestion_controller/goog_cc/probe_controller_unittest.cc +++ b/modules/congestion_controller/goog_cc/probe_controller_unittest.cc @@ -1103,12 +1103,14 @@ TEST(ProbeControllerTest, SendsProbeIfNetworkStateEstimateLowerThanMaxProbe) { EXPECT_FALSE(probes.empty()); } -TEST(ProbeControllerTest, DontSendProbeIfNetworkStateEstimateIsZero) { +TEST(ProbeControllerTest, + ProbeNotLimitedByNetworkStateEsimateIfLowerThantCurrent) { ProbeControllerFixture fixture( "WebRTC-Bwe-ProbingConfiguration/" "network_state_interval:5s,limit_probe_target_rate_to_loss_bwe:true/"); std::unique_ptr probe_controller = fixture.CreateController(); + probe_controller->EnablePeriodicAlrProbing(true); auto probes = probe_controller->SetBitrates( kMinBitrate, kStartBitrate, kMaxBitrate, fixture.CurrentTime()); probes = probe_controller->SetEstimatedBitrate( @@ -1121,13 +1123,13 @@ TEST(ProbeControllerTest, DontSendProbeIfNetworkStateEstimateIsZero) { probes = probe_controller->Process(fixture.CurrentTime()); ASSERT_TRUE(probes.empty()); + probe_controller->SetAlrStartTimeMs(fixture.CurrentTime().ms()); probe_controller->SetNetworkStateEstimate( - {.link_capacity_upper = DataRate::Zero()}); - probes = probe_controller->Process(fixture.CurrentTime()); - EXPECT_TRUE(probes.empty()); + {.link_capacity_upper = kStartBitrate / 2}); fixture.AdvanceTime(TimeDelta::Seconds(6)); probes = probe_controller->Process(fixture.CurrentTime()); - EXPECT_TRUE(probes.empty()); + ASSERT_FALSE(probes.empty()); + EXPECT_EQ(probes[0].target_data_rate, kStartBitrate); } TEST(ProbeControllerTest, DontProbeIfDelayIncreased) {