Adds TCP fairness test to receive side congestion controller.
Bug: webrtc:9883 Change-Id: I3697491285e4f70b8f7857198e4e1ccb0097da5b Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/140883 Commit-Queue: Sebastian Jansson <srte@webrtc.org> Reviewed-by: Björn Terelius <terelius@webrtc.org> Cr-Commit-Position: refs/heads/master@{#28196}
This commit is contained in:
parent
f6c914aa59
commit
24cf2606e4
@ -101,6 +101,7 @@ if (rtc_include_tests) {
|
||||
"../../system_wrappers",
|
||||
"../../test:field_trial",
|
||||
"../../test:test_support",
|
||||
"../../test/scenario",
|
||||
"../bitrate_controller",
|
||||
"../pacing",
|
||||
"../pacing:mock_paced_sender",
|
||||
|
||||
@ -13,6 +13,7 @@
|
||||
#include "system_wrappers/include/clock.h"
|
||||
#include "test/gmock.h"
|
||||
#include "test/gtest.h"
|
||||
#include "test/scenario/scenario.h"
|
||||
|
||||
using ::testing::_;
|
||||
using ::testing::AtLeast;
|
||||
@ -71,5 +72,47 @@ TEST(ReceiveSideCongestionControllerTest, OnReceivedPacketWithAbsSendTime) {
|
||||
EXPECT_EQ(header.ssrc, ssrcs[0]);
|
||||
}
|
||||
|
||||
TEST(ReceiveSideCongestionControllerTest, ConvergesToCapacity) {
|
||||
Scenario s("recieve_cc_unit/converge");
|
||||
NetworkSimulationConfig net_conf;
|
||||
net_conf.bandwidth = DataRate::kbps(1000);
|
||||
net_conf.delay = TimeDelta::ms(50);
|
||||
auto* client = s.CreateClient("send", [&](CallClientConfig* c) {
|
||||
c->transport.rates.start_rate = DataRate::kbps(300);
|
||||
});
|
||||
|
||||
auto* route = s.CreateRoutes(client, {s.CreateSimulationNode(net_conf)},
|
||||
s.CreateClient("return", CallClientConfig()),
|
||||
{s.CreateSimulationNode(net_conf)});
|
||||
VideoStreamConfig video;
|
||||
video.stream.packet_feedback = false;
|
||||
s.CreateVideoStream(route->forward(), video);
|
||||
s.RunFor(TimeDelta::seconds(30));
|
||||
EXPECT_NEAR(client->send_bandwidth().kbps(), 900, 150);
|
||||
}
|
||||
|
||||
TEST(ReceiveSideCongestionControllerTest, IsFairToTCP) {
|
||||
Scenario s("recieve_cc_unit/tcp_fairness");
|
||||
NetworkSimulationConfig net_conf;
|
||||
net_conf.bandwidth = DataRate::kbps(1000);
|
||||
net_conf.delay = TimeDelta::ms(50);
|
||||
auto* client = s.CreateClient("send", [&](CallClientConfig* c) {
|
||||
c->transport.rates.start_rate = DataRate::kbps(1000);
|
||||
});
|
||||
auto send_net = {s.CreateSimulationNode(net_conf)};
|
||||
auto ret_net = {s.CreateSimulationNode(net_conf)};
|
||||
auto* route = s.CreateRoutes(
|
||||
client, send_net, s.CreateClient("return", CallClientConfig()), ret_net);
|
||||
VideoStreamConfig video;
|
||||
video.stream.packet_feedback = false;
|
||||
s.CreateVideoStream(route->forward(), video);
|
||||
s.net()->StartFakeTcpCrossTraffic(s.net()->CreateRoute(send_net),
|
||||
s.net()->CreateRoute(ret_net),
|
||||
FakeTcpConfig());
|
||||
s.RunFor(TimeDelta::seconds(30));
|
||||
// For some reason we get outcompeted by TCP here, this should probably be
|
||||
// fixed and a lower bound should be added to the test.
|
||||
EXPECT_LT(client->send_bandwidth().kbps(), 750);
|
||||
}
|
||||
} // namespace test
|
||||
} // namespace webrtc
|
||||
|
||||
@ -88,12 +88,16 @@ InterLayerPredMode ToInterLayerPredMode(
|
||||
}
|
||||
std::vector<RtpExtension> GetVideoRtpExtensions(
|
||||
const VideoStreamConfig config) {
|
||||
return {RtpExtension(RtpExtension::kTransportSequenceNumberUri,
|
||||
kTransportSequenceNumberExtensionId),
|
||||
RtpExtension(RtpExtension::kVideoContentTypeUri,
|
||||
kVideoContentTypeExtensionId),
|
||||
RtpExtension(RtpExtension::kVideoRotationUri,
|
||||
kVideoRotationRtpExtensionId)};
|
||||
std::vector<RtpExtension> res = {
|
||||
RtpExtension(RtpExtension::kVideoContentTypeUri,
|
||||
kVideoContentTypeExtensionId),
|
||||
RtpExtension(RtpExtension::kVideoRotationUri,
|
||||
kVideoRotationRtpExtensionId)};
|
||||
if (config.stream.packet_feedback) {
|
||||
res.push_back(RtpExtension(RtpExtension::kTransportSequenceNumberUri,
|
||||
kTransportSequenceNumberExtensionId));
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
std::string TransformFilePath(std::string path) {
|
||||
@ -311,6 +315,7 @@ VideoReceiveStream::Config CreateVideoReceiveStreamConfig(
|
||||
recv.rtp.transport_cc = config.stream.packet_feedback;
|
||||
recv.rtp.local_ssrc = local_ssrc;
|
||||
recv.rtp.extensions = GetVideoRtpExtensions(config);
|
||||
|
||||
RTC_DCHECK(!config.stream.use_rtx ||
|
||||
config.stream.nack_history_time > TimeDelta::Zero());
|
||||
recv.rtp.nack.rtp_history_ms = config.stream.nack_history_time.ms();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user