Skip trimming packet arrival history at the beginning
PacketArrivalMap explicitly doesn't promise packet at the beginning of it is received. Ensuring that property is wasteful Bug: chromium:1382563 Change-Id: Ifc898b7ec2bc7a302af8dcfd233e0c598f62db95 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/290501 Reviewed-by: Per Kjellander <perkj@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/main@{#39083}
This commit is contained in:
parent
778742963a
commit
17f783eee8
@ -69,9 +69,6 @@ void PacketArrivalTimeMap::AddPacket(int64_t sequence_number,
|
||||
// Remove oldest entries
|
||||
begin_sequence_number_ = new_end_sequence_number - kMaxNumberOfPackets;
|
||||
RTC_DCHECK_GT(end_sequence_number_, begin_sequence_number_);
|
||||
// Also trim the buffer to remove leading non-received packets, to
|
||||
// ensure that the buffer only spans received packets.
|
||||
TrimLeadingNotReceivedEntries();
|
||||
}
|
||||
|
||||
AdjustToSize(new_end_sequence_number - begin_sequence_number_);
|
||||
@ -83,31 +80,6 @@ void PacketArrivalTimeMap::AddPacket(int64_t sequence_number,
|
||||
arrival_times_[Index(sequence_number)] = arrival_time;
|
||||
}
|
||||
|
||||
void PacketArrivalTimeMap::TrimLeadingNotReceivedEntries() {
|
||||
const int begin_index = Index(begin_sequence_number_);
|
||||
const Timestamp* const begin_it = arrival_times_.get() + begin_index;
|
||||
const Timestamp* const end_it = arrival_times_.get() + capacity();
|
||||
|
||||
for (const Timestamp* it = begin_it; it != end_it; ++it) {
|
||||
if (*it >= Timestamp::Zero()) {
|
||||
begin_sequence_number_ += (it - begin_it);
|
||||
return;
|
||||
}
|
||||
}
|
||||
// Reached end of the arrival_times_ and all entries represent not received
|
||||
// packets. Remove them.
|
||||
begin_sequence_number_ += (capacity() - begin_index);
|
||||
// Continue removing entries at the beginning of the circular buffer.
|
||||
for (const Timestamp* it = arrival_times_.get(); it != begin_it; ++it) {
|
||||
if (*it >= Timestamp::Zero()) {
|
||||
begin_sequence_number_ += (it - arrival_times_.get());
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
RTC_DCHECK_NOTREACHED() << "There should be at least one non-empty entry";
|
||||
}
|
||||
|
||||
void PacketArrivalTimeMap::SetNotReceived(
|
||||
int64_t begin_sequence_number_inclusive,
|
||||
int64_t end_sequence_number_exclusive) {
|
||||
|
||||
@ -114,8 +114,6 @@ class PacketArrivalTimeMap {
|
||||
void SetNotReceived(int64_t begin_sequence_number_inclusive,
|
||||
int64_t end_sequence_number_exclusive);
|
||||
|
||||
void TrimLeadingNotReceivedEntries();
|
||||
|
||||
// Adjust capacity to match new_size, may reduce capacity.
|
||||
// On return guarantees capacity >= new_size.
|
||||
void AdjustToSize(int new_size);
|
||||
|
||||
@ -132,25 +132,6 @@ TEST(PacketArrivalMapTest, GrowsBufferAndRemoveOld) {
|
||||
EXPECT_FALSE(map.has_received(kLargeSeq + 1));
|
||||
}
|
||||
|
||||
TEST(PacketArrivalMapTest, GrowsBufferAndRemoveOldTrimsBeginning) {
|
||||
PacketArrivalTimeMap map;
|
||||
|
||||
constexpr int64_t kLargeSeq = 42 + PacketArrivalTimeMap::kMaxNumberOfPackets;
|
||||
map.AddPacket(42, Timestamp::Millis(10));
|
||||
// Missing: 43, 44
|
||||
map.AddPacket(45, Timestamp::Millis(13));
|
||||
map.AddPacket(kLargeSeq, Timestamp::Millis(12));
|
||||
|
||||
EXPECT_EQ(map.begin_sequence_number(), 45);
|
||||
EXPECT_EQ(map.end_sequence_number(), kLargeSeq + 1);
|
||||
|
||||
EXPECT_FALSE(map.has_received(44));
|
||||
EXPECT_TRUE(map.has_received(45));
|
||||
EXPECT_FALSE(map.has_received(46));
|
||||
EXPECT_TRUE(map.has_received(kLargeSeq));
|
||||
EXPECT_FALSE(map.has_received(kLargeSeq + 1));
|
||||
}
|
||||
|
||||
TEST(PacketArrivalMapTest, SequenceNumberJumpsDeletesAll) {
|
||||
PacketArrivalTimeMap map;
|
||||
|
||||
|
||||
@ -278,7 +278,6 @@ TEST_F(RemoteEstimatorProxyTest, HandlesMalformedSequenceNumbers) {
|
||||
rtcp::TransportFeedback* feedback_packet =
|
||||
static_cast<rtcp::TransportFeedback*>(
|
||||
feedback_packets[0].get());
|
||||
EXPECT_EQ(kBaseSeq + 20000 + 9, feedback_packet->GetBaseSequence());
|
||||
EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc());
|
||||
EXPECT_THAT(SequenceNumbers(*feedback_packet),
|
||||
ElementsAre(kBaseSeq + 20009, kBaseSeq + 40009));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user