diff --git a/webrtc/modules/congestion_controller/congestion_controller.cc b/webrtc/modules/congestion_controller/congestion_controller.cc index 24bfd78887..ae11d93fbb 100644 --- a/webrtc/modules/congestion_controller/congestion_controller.cc +++ b/webrtc/modules/congestion_controller/congestion_controller.cc @@ -309,7 +309,7 @@ void CongestionController::SetAllocatedSendBitrateLimits( } int64_t CongestionController::GetPacerQueuingDelayMs() const { - return pacer_->QueueInMs(); + return IsNetworkDown() ? 0 : pacer_->QueueInMs(); } void CongestionController::SignalNetworkState(NetworkState state) { diff --git a/webrtc/modules/congestion_controller/congestion_controller_unittest.cc b/webrtc/modules/congestion_controller/congestion_controller_unittest.cc index ce2258bf5e..53ccf3dda1 100644 --- a/webrtc/modules/congestion_controller/congestion_controller_unittest.cc +++ b/webrtc/modules/congestion_controller/congestion_controller_unittest.cc @@ -18,6 +18,7 @@ #include "webrtc/system_wrappers/include/clock.h" using testing::_; +using testing::AtLeast; using testing::NiceMock; using testing::Return; using testing::SaveArg; @@ -169,5 +170,21 @@ TEST_F(CongestionControllerTest, controller_->Process(); } +TEST_F(CongestionControllerTest, GetPacerQueuingDelayMs) { + EXPECT_CALL(observer_, OnNetworkChanged(_, _, _)).Times(AtLeast(1)); + + const int64_t kQueueTimeMs = 123; + EXPECT_CALL(*pacer_, QueueInMs()).WillRepeatedly(Return(kQueueTimeMs)); + EXPECT_EQ(kQueueTimeMs, controller_->GetPacerQueuingDelayMs()); + + // Expect zero pacer delay when network is down. + controller_->SignalNetworkState(kNetworkDown); + EXPECT_EQ(0, controller_->GetPacerQueuingDelayMs()); + + // Network is up, pacer delay should be reported. + controller_->SignalNetworkState(kNetworkUp); + EXPECT_EQ(kQueueTimeMs, controller_->GetPacerQueuingDelayMs()); +} + } // namespace test } // namespace webrtc