Index: webrtc/modules/congestion_controller/congestion_controller_unittest.cc |
diff --git a/webrtc/modules/congestion_controller/congestion_controller_unittest.cc b/webrtc/modules/congestion_controller/congestion_controller_unittest.cc |
index 802f9d1ea454e317fc60904f10a0e15b2d19d4bb..925631b9bb1064116085e8fe275f0d1acceba96c 100644 |
--- a/webrtc/modules/congestion_controller/congestion_controller_unittest.cc |
+++ b/webrtc/modules/congestion_controller/congestion_controller_unittest.cc |
@@ -8,15 +8,13 @@ |
* be found in the AUTHORS file in the root of the source tree. |
*/ |
-#include "webrtc/modules/congestion_controller/include/congestion_controller.h" |
#include "webrtc/logging/rtc_event_log/mock/mock_rtc_event_log.h" |
#include "webrtc/modules/bitrate_controller/include/bitrate_controller.h" |
-#include "webrtc/modules/congestion_controller/congestion_controller_unittests_helper.h" |
+#include "webrtc/modules/congestion_controller/include/congestion_controller.h" |
#include "webrtc/modules/congestion_controller/include/mock/mock_congestion_controller.h" |
#include "webrtc/modules/pacing/mock/mock_paced_sender.h" |
#include "webrtc/modules/remote_bitrate_estimator/include/bwe_defines.h" |
#include "webrtc/modules/remote_bitrate_estimator/include/mock/mock_remote_bitrate_observer.h" |
-#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h" |
#include "webrtc/system_wrappers/include/clock.h" |
#include "webrtc/test/gmock.h" |
#include "webrtc/test/gtest.h" |
@@ -29,8 +27,6 @@ |
using testing::StrictMock; |
namespace { |
-const webrtc::PacedPacketInfo kPacingInfo0(0, 5, 2000); |
-const webrtc::PacedPacketInfo kPacingInfo1(1, 8, 4000); |
// Helper to convert some time format to resolution used in absolute send time |
// header extension, rounded upwards. |t| is the time to convert, in some |
@@ -47,7 +43,7 @@ |
class CongestionControllerTest : public ::testing::Test { |
protected: |
- CongestionControllerTest() : clock_(123456), target_bitrate_observer_(this) {} |
+ CongestionControllerTest() : clock_(123456) {} |
~CongestionControllerTest() override {} |
void SetUp() override { |
@@ -68,74 +64,8 @@ |
controller_->SetBweBitrates(0, kInitialBitrateBps, 5 * kInitialBitrateBps); |
} |
- // Custom setup - use an observer that tracks the target bitrate, without |
- // prescribing on which iterations it must change (like a mock would). |
- void TargetBitrateTrackingSetup() { |
- std::unique_ptr<PacedSender> pacer(new NiceMock<MockPacedSender>()); |
- controller_.reset(new CongestionController( |
- &clock_, &target_bitrate_observer_, &remote_bitrate_observer_, |
- &event_log_, &packet_router_, std::move(pacer))); |
- controller_->SetBweBitrates(0, kInitialBitrateBps, 5 * kInitialBitrateBps); |
- } |
- |
- void OnSentPacket(const PacketFeedback& packet_feedback) { |
- controller_->AddPacket(packet_feedback.sequence_number, |
- packet_feedback.payload_size, |
- packet_feedback.pacing_info); |
- controller_->OnSentPacket(rtc::SentPacket(packet_feedback.sequence_number, |
- packet_feedback.send_time_ms)); |
- } |
- |
- // Allows us to track the target bitrate, without prescribing the exact |
- // iterations when this would hapen, like a mock would. |
- class TargetBitrateObserver : public CongestionController::Observer { |
- public: |
- explicit TargetBitrateObserver(CongestionControllerTest* owner) |
- : owner_(owner) {} |
- ~TargetBitrateObserver() override = default; |
- void OnNetworkChanged(uint32_t bitrate_bps, |
- uint8_t fraction_loss, // 0 - 255. |
- int64_t rtt_ms, |
- int64_t probing_interval_ms) override { |
- owner_->target_bitrate_bps_ = rtc::Optional<uint32_t>(bitrate_bps); |
- } |
- |
- private: |
- CongestionControllerTest* owner_; |
- }; |
- |
- void PacketTransmissionAndFeedbackBlock(uint16_t* seq_num, |
- int64_t runtime_ms, |
- int64_t delay) { |
- int64_t delay_buildup = 0; |
- int64_t start_time_ms = clock_.TimeInMilliseconds(); |
- while (clock_.TimeInMilliseconds() - start_time_ms < runtime_ms) { |
- constexpr size_t kPayloadSize = 1000; |
- PacketFeedback packet(clock_.TimeInMilliseconds() + delay_buildup, |
- clock_.TimeInMilliseconds(), *seq_num, kPayloadSize, |
- PacedPacketInfo()); |
- delay_buildup += delay; // Delay has to increase, or it's just RTT. |
- OnSentPacket(packet); |
- // Create expected feedback and send into adapter. |
- std::unique_ptr<rtcp::TransportFeedback> feedback( |
- new rtcp::TransportFeedback()); |
- feedback->SetBase(packet.sequence_number, packet.arrival_time_ms * 1000); |
- EXPECT_TRUE(feedback->AddReceivedPacket(packet.sequence_number, |
- packet.arrival_time_ms * 1000)); |
- rtc::Buffer raw_packet = feedback->Build(); |
- feedback = rtcp::TransportFeedback::ParseFrom(raw_packet.data(), |
- raw_packet.size()); |
- EXPECT_TRUE(feedback.get() != nullptr); |
- controller_->OnTransportFeedback(*feedback.get()); |
- clock_.AdvanceTimeMilliseconds(50); |
- controller_->Process(); |
- ++(*seq_num); |
- } |
- } |
- |
SimulatedClock clock_; |
StrictMock<MockCongestionObserver> observer_; |
- TargetBitrateObserver target_bitrate_observer_; |
NiceMock<MockPacedSender>* pacer_; |
NiceMock<MockRemoteBitrateObserver> remote_bitrate_observer_; |
NiceMock<MockRtcEventLog> event_log_; |
@@ -143,8 +73,6 @@ |
PacketRouter packet_router_; |
std::unique_ptr<CongestionController> controller_; |
const uint32_t kInitialBitrateBps = 60000; |
- |
- rtc::Optional<uint32_t> target_bitrate_bps_; |
}; |
TEST_F(CongestionControllerTest, OnNetworkChanged) { |
@@ -325,116 +253,5 @@ |
20 * kInitialBitrateBps); |
} |
-// Estimated bitrate reduced when the feedbacks arrive with such a long delay, |
-// that the send-time-history no longer holds the feedbacked packets. |
-TEST_F(CongestionControllerTest, LongFeedbackDelays) { |
- TargetBitrateTrackingSetup(); |
- |
- const int64_t kFeedbackTimeoutMs = 60001; |
- const int kMaxConsecutiveFailedLookups = 5; |
- for (int i = 0; i < kMaxConsecutiveFailedLookups; ++i) { |
- std::vector<PacketFeedback> packets; |
- packets.push_back( |
- PacketFeedback(i * 100, 2 * i * 100, 0, 1500, kPacingInfo0)); |
- packets.push_back( |
- PacketFeedback(i * 100 + 10, 2 * i * 100 + 10, 1, 1500, kPacingInfo0)); |
- packets.push_back( |
- PacketFeedback(i * 100 + 20, 2 * i * 100 + 20, 2, 1500, kPacingInfo0)); |
- packets.push_back( |
- PacketFeedback(i * 100 + 30, 2 * i * 100 + 30, 3, 1500, kPacingInfo1)); |
- packets.push_back( |
- PacketFeedback(i * 100 + 40, 2 * i * 100 + 40, 4, 1500, kPacingInfo1)); |
- |
- for (const PacketFeedback& packet : packets) |
- OnSentPacket(packet); |
- |
- rtcp::TransportFeedback feedback; |
- feedback.SetBase(packets[0].sequence_number, |
- packets[0].arrival_time_ms * 1000); |
- |
- for (const PacketFeedback& packet : packets) { |
- EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number, |
- packet.arrival_time_ms * 1000)); |
- } |
- |
- feedback.Build(); |
- |
- clock_.AdvanceTimeMilliseconds(kFeedbackTimeoutMs); |
- PacketFeedback later_packet(kFeedbackTimeoutMs + i * 100 + 40, |
- kFeedbackTimeoutMs + i * 200 + 40, 5, 1500, |
- kPacingInfo1); |
- OnSentPacket(later_packet); |
- |
- controller_->OnTransportFeedback(feedback); |
- |
- // Check that packets have timed out. |
- for (PacketFeedback& packet : packets) { |
- packet.send_time_ms = -1; |
- packet.payload_size = 0; |
- packet.pacing_info = PacedPacketInfo(); |
- } |
- ComparePacketFeedbackVectors(packets, |
- controller_->GetTransportFeedbackVector()); |
- } |
- |
- controller_->Process(); |
- |
- EXPECT_EQ(kInitialBitrateBps / 2, target_bitrate_bps_); |
- |
- // Test with feedback that isn't late enough to time out. |
- { |
- std::vector<PacketFeedback> packets; |
- packets.push_back(PacketFeedback(100, 200, 0, 1500, kPacingInfo0)); |
- packets.push_back(PacketFeedback(110, 210, 1, 1500, kPacingInfo0)); |
- packets.push_back(PacketFeedback(120, 220, 2, 1500, kPacingInfo0)); |
- packets.push_back(PacketFeedback(130, 230, 3, 1500, kPacingInfo1)); |
- packets.push_back(PacketFeedback(140, 240, 4, 1500, kPacingInfo1)); |
- |
- for (const PacketFeedback& packet : packets) |
- OnSentPacket(packet); |
- |
- rtcp::TransportFeedback feedback; |
- feedback.SetBase(packets[0].sequence_number, |
- packets[0].arrival_time_ms * 1000); |
- |
- for (const PacketFeedback& packet : packets) { |
- EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number, |
- packet.arrival_time_ms * 1000)); |
- } |
- |
- feedback.Build(); |
- |
- clock_.AdvanceTimeMilliseconds(kFeedbackTimeoutMs - 1); |
- PacketFeedback later_packet(kFeedbackTimeoutMs + 140, |
- kFeedbackTimeoutMs + 240, 5, 1500, |
- kPacingInfo1); |
- OnSentPacket(later_packet); |
- |
- controller_->OnTransportFeedback(feedback); |
- ComparePacketFeedbackVectors(packets, |
- controller_->GetTransportFeedbackVector()); |
- } |
-} |
- |
-// Bandwidth estimation is updated when feedbacks are received. |
-// Feedbacks which show an increasing delay cause the estimation to be reduced. |
-TEST_F(CongestionControllerTest, UpdatesDelayBasedEstimate) { |
- TargetBitrateTrackingSetup(); |
- |
- const int64_t kRunTimeMs = 6000; |
- uint16_t seq_num = 0; |
- |
- // The test must run and insert packets/feedback long enough that the |
- // BWE computes a valid estimate. This is first done in an environment which |
- // simulates no bandwidth limitation, and therefore not built-up delay. |
- PacketTransmissionAndFeedbackBlock(&seq_num, kRunTimeMs, 0); |
- ASSERT_TRUE(target_bitrate_bps_); |
- |
- // Repeat, but this time with a building delay, and make sure that the |
- // estimation is adjusted downwards. |
- uint32_t bitrate_before_delay = *target_bitrate_bps_; |
- PacketTransmissionAndFeedbackBlock(&seq_num, kRunTimeMs, 50); |
- EXPECT_LT(*target_bitrate_bps_, bitrate_before_delay); |
-} |
} // namespace test |
} // namespace webrtc |