Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(137)

Unified Diff: webrtc/modules/congestion_controller/congestion_controller_unittest.cc

Issue 2743553003: Revert of Move delay_based_bwe_ into CongestionController (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698