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

Unified Diff: net/quic/quic_unacked_packet_map.cc

Issue 306573002: Add an IncreaseLargestObserved to QuicUnackedPacketMap to remove the rtt (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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
« no previous file with comments | « net/quic/quic_unacked_packet_map.h ('k') | net/quic/quic_unacked_packet_map_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/quic_unacked_packet_map.cc
diff --git a/net/quic/quic_unacked_packet_map.cc b/net/quic/quic_unacked_packet_map.cc
index 053b445b0e9c2fce2abb4055600df5db3dfcb490..c84ab1109e9b7b9272b917263f6e8c9a46d86713 100644
--- a/net/quic/quic_unacked_packet_map.cc
+++ b/net/quic/quic_unacked_packet_map.cc
@@ -15,6 +15,7 @@ namespace net {
QuicUnackedPacketMap::QuicUnackedPacketMap()
: largest_sent_packet_(0),
+ largest_observed_(0),
bytes_in_flight_(0),
pending_crypto_packet_count_(0) {
}
@@ -123,16 +124,15 @@ void QuicUnackedPacketMap::NackPacket(QuicPacketSequenceNumber sequence_number,
}
void QuicUnackedPacketMap::RemoveRetransmittability(
- QuicPacketSequenceNumber sequence_number,
- QuicPacketSequenceNumber largest_observed) {
+ QuicPacketSequenceNumber sequence_number) {
UnackedPacketMap::iterator it = unacked_packets_.find(sequence_number);
if (it == unacked_packets_.end()) {
- LOG(DFATAL) << "packet is not unacked: " << sequence_number;
+ DVLOG(1) << "packet is not in unacked_packets: " << sequence_number;
return;
}
SequenceNumberSet* all_transmissions = it->second.all_transmissions;
// TODO(ianswett): Consider optimizing this for lone packets.
- // TODO(ianswett): Consider adding a check to ensure there are retranmittable
+ // TODO(ianswett): Consider adding a check to ensure there are retransmittable
// frames associated with this packet.
for (SequenceNumberSet::reverse_iterator it = all_transmissions->rbegin();
it != all_transmissions->rend(); ++it) {
@@ -143,7 +143,7 @@ void QuicUnackedPacketMap::RemoveRetransmittability(
continue;
}
MaybeRemoveRetransmittableFrames(transmission_info);
- if (sequence_number <= largest_observed && !transmission_info->pending) {
+ if (*it <= largest_observed_ && !transmission_info->pending) {
unacked_packets_.erase(*it);
} else {
transmission_info->all_transmissions = new SequenceNumberSet();
@@ -166,27 +166,29 @@ void QuicUnackedPacketMap::MaybeRemoveRetransmittableFrames(
}
}
-void QuicUnackedPacketMap::RemoveRttOnlyPacket(
- QuicPacketSequenceNumber sequence_number) {
- UnackedPacketMap::iterator it = unacked_packets_.find(sequence_number);
- if (it == unacked_packets_.end()) {
- LOG(DFATAL) << "packet is not unacked: " << sequence_number;
- return;
+void QuicUnackedPacketMap::IncreaseLargestObserved(
+ QuicPacketSequenceNumber largest_observed) {
+ DCHECK_LT(largest_observed_, largest_observed);
+ largest_observed_ = largest_observed;
+ UnackedPacketMap::iterator it = unacked_packets_.begin();
+ while (it != unacked_packets_.end() && it->first <= largest_observed_) {
+ if (!IsPacketUseless(it)) {
+ ++it;
+ continue;
+ }
+ delete it->second.all_transmissions;
+ QuicPacketSequenceNumber sequence_number = it->first;
+ ++it;
+ unacked_packets_.erase(sequence_number);
}
- TransmissionInfo* transmission_info = &it->second;
- DCHECK(!transmission_info->pending);
- DCHECK(transmission_info->retransmittable_frames == NULL);
- DCHECK_EQ(1u, transmission_info->all_transmissions->size());
- delete transmission_info->all_transmissions;
- unacked_packets_.erase(it);
}
-// static
-bool QuicUnackedPacketMap::IsForRttOnly(
- const TransmissionInfo& transmission_info) {
- return !transmission_info.pending &&
- transmission_info.retransmittable_frames == NULL &&
- transmission_info.all_transmissions->size() == 1;
+bool QuicUnackedPacketMap::IsPacketUseless(
+ UnackedPacketMap::const_iterator it) {
+ return it->first <= largest_observed_ &&
+ !it->second.pending &&
+ it->second.retransmittable_frames == NULL &&
+ it->second.all_transmissions->size() == 1;
}
bool QuicUnackedPacketMap::IsUnacked(
@@ -207,6 +209,10 @@ void QuicUnackedPacketMap::SetNotPending(
bytes_in_flight_ -= it->second.bytes_sent;
it->second.pending = false;
}
+ if (IsPacketUseless(it)) {
+ delete it->second.all_transmissions;
+ unacked_packets_.erase(it);
+ }
}
bool QuicUnackedPacketMap::HasUnackedPackets() const {
« no previous file with comments | « net/quic/quic_unacked_packet_map.h ('k') | net/quic/quic_unacked_packet_map_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698