Adds trial to always start probes with a small padding packet.

This will reduce bias caused by uncertainty in averaging window.

Bug: None
Change-Id: I5c4fe39ffe69fb4af87d86995196a54115d3e0b2
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/144720
Commit-Queue: Erik Språng <sprang@webrtc.org>
Reviewed-by: Sebastian Jansson <srte@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29374}
This commit is contained in:
Erik Språng
2019-10-03 18:46:04 +02:00
committed by Commit Bot
parent 608083b66e
commit 78c82a4040
5 changed files with 97 additions and 17 deletions

View File

@ -1265,5 +1265,47 @@ TEST_F(PacingControllerTest, OwnedPacketPrioritizedOnType) {
clock_.AdvanceTimeMilliseconds(200);
pacer_->ProcessPackets();
}
TEST_F(PacingControllerTest, SmallFirstProbePacket) {
ScopedFieldTrials trial("WebRTC-Pacer-SmallFirstProbePacket/Enabled/");
MockPacketSender callback;
pacer_ =
std::make_unique<PacingController>(&clock_, &callback, nullptr, nullptr);
pacer_->CreateProbeCluster(kFirstClusterRate, /*cluster_id=*/0);
pacer_->SetPacingRates(kTargetRate * kPaceMultiplier, DataRate::Zero());
// Add high prio media.
pacer_->EnqueuePacket(BuildRtpPacket(RtpPacketToSend::Type::kAudio));
// Expect small padding packet to be requested.
EXPECT_CALL(callback, GeneratePadding(DataSize::bytes(1)))
.WillOnce([&](DataSize padding_size) {
std::vector<std::unique_ptr<RtpPacketToSend>> padding_packets;
padding_packets.emplace_back(
BuildPacket(RtpPacketToSend::Type::kPadding, kAudioSsrc, 1,
clock_.TimeInMilliseconds(), 1));
return padding_packets;
});
size_t packets_sent = 0;
bool media_seen = false;
EXPECT_CALL(callback, SendRtpPacket)
.Times(::testing::AnyNumber())
.WillRepeatedly([&](std::unique_ptr<RtpPacketToSend> packet,
const PacedPacketInfo& cluster_info) {
if (packets_sent == 0) {
EXPECT_EQ(packet->packet_type(), RtpPacketToSend::Type::kPadding);
} else {
if (packet->packet_type() == RtpPacketToSend::Type::kAudio) {
media_seen = true;
}
}
packets_sent++;
});
while (!media_seen) {
pacer_->ProcessPackets();
clock_.AdvanceTimeMilliseconds(5);
}
}
} // namespace test
} // namespace webrtc