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 625e2e7ed1a469376976e047e2ff3fa312fd47c3..b3abe557cbc1178dfa2998d8de23cac095a258a1 100644 |
--- a/net/quic/quic_unacked_packet_map.cc |
+++ b/net/quic/quic_unacked_packet_map.cc |
@@ -21,19 +21,13 @@ QuicUnackedPacketMap::QuicUnackedPacketMap() |
largest_observed_(0), |
least_unacked_(1), |
bytes_in_flight_(0), |
- pending_crypto_packet_count_(0), |
- track_single_retransmission_(FLAGS_quic_track_single_retransmission) {} |
+ pending_crypto_packet_count_(0) {} |
QuicUnackedPacketMap::~QuicUnackedPacketMap() { |
QuicPacketNumber index = least_unacked_; |
for (UnackedPacketMap::iterator it = unacked_packets_.begin(); |
it != unacked_packets_.end(); ++it, ++index) { |
QuicUtils::DeleteFrames(&it->retransmittable_frames); |
- // Only delete all_transmissions once, for the newest packet. |
- if (it->all_transmissions != nullptr && |
- index == *it->all_transmissions->rbegin()) { |
- delete it->all_transmissions; |
- } |
} |
} |
@@ -129,44 +123,13 @@ void QuicUnackedPacketMap::TransferRetransmissionInfo( |
<< "Attempt to retransmit packet with no " |
<< "retransmittable frames: " << old_packet_number; |
- // Only keep one transmission older than largest observed, because only the |
- // most recent is expected to possibly be a spurious retransmission. |
- if (!track_single_retransmission_) { |
- while (transmission_info->all_transmissions != nullptr && |
- transmission_info->all_transmissions->size() > 1 && |
- *(++transmission_info->all_transmissions->begin()) < |
- largest_observed_) { |
- QuicPacketNumber old_transmission = |
- *transmission_info->all_transmissions->begin(); |
- TransmissionInfo* old_info = |
- &unacked_packets_[old_transmission - least_unacked_]; |
- // Don't remove old packets if they're still in flight. |
- if (old_info->in_flight) { |
- break; |
- } |
- old_info->all_transmissions->pop_front(); |
- // This will cause the packet be removed in RemoveObsoletePackets. |
- old_info->all_transmissions = nullptr; |
- } |
- } |
// Don't link old transmissions to new ones when version or |
// encryption changes. |
if (transmission_type == ALL_INITIAL_RETRANSMISSION || |
transmission_type == ALL_UNACKED_RETRANSMISSION) { |
RemoveAckability(transmission_info); |
} else { |
- if (track_single_retransmission_) { |
- transmission_info->retransmission = new_packet_number; |
- } else { |
- if (transmission_info->all_transmissions == nullptr) { |
- transmission_info->all_transmissions = new PacketNumberList(); |
- transmission_info->all_transmissions->push_back(old_packet_number); |
- } |
- transmission_info->all_transmissions->push_back(new_packet_number); |
- } |
- } |
- if (!track_single_retransmission_) { |
- info->all_transmissions = transmission_info->all_transmissions; |
+ transmission_info->retransmission = new_packet_number; |
} |
// Proactively remove obsolete packets so the least unacked can be raised. |
RemoveObsoletePackets(); |
@@ -189,29 +152,12 @@ void QuicUnackedPacketMap::NackPacket(QuicPacketNumber packet_number, |
} |
void QuicUnackedPacketMap::RemoveRetransmittability(TransmissionInfo* info) { |
- if (track_single_retransmission_) { |
- while (info->retransmission != 0) { |
- const QuicPacketNumber retransmission = info->retransmission; |
- info->retransmission = 0; |
- info = &unacked_packets_[retransmission - least_unacked_]; |
- } |
- MaybeRemoveRetransmittableFrames(info); |
- return; |
+ while (info->retransmission != 0) { |
+ const QuicPacketNumber retransmission = info->retransmission; |
+ info->retransmission = 0; |
+ info = &unacked_packets_[retransmission - least_unacked_]; |
} |
- PacketNumberList* all_transmissions = info->all_transmissions; |
- if (all_transmissions == nullptr) { |
- MaybeRemoveRetransmittableFrames(info); |
- return; |
- } |
- // TODO(ianswett): Consider adding a check to ensure there are retransmittable |
- // frames associated with this packet. |
- for (QuicPacketNumber packet_number : *all_transmissions) { |
- TransmissionInfo* transmission_info = |
- &unacked_packets_[packet_number - least_unacked_]; |
- MaybeRemoveRetransmittableFrames(transmission_info); |
- transmission_info->all_transmissions = nullptr; |
- } |
- delete all_transmissions; |
+ MaybeRemoveRetransmittableFrames(info); |
} |
void QuicUnackedPacketMap::RemoveRetransmittability( |
@@ -224,22 +170,8 @@ void QuicUnackedPacketMap::RemoveRetransmittability( |
void QuicUnackedPacketMap::RemoveAckability(TransmissionInfo* info) { |
DCHECK(info->retransmittable_frames.empty()); |
+ DCHECK_EQ(0u, info->retransmission); |
info->is_unackable = true; |
- if (track_single_retransmission_) { |
- DCHECK_EQ(0u, info->retransmission); |
- return; |
- } |
- PacketNumberList* all_transmissions = info->all_transmissions; |
- if (all_transmissions == nullptr) { |
- return; |
- } |
- for (QuicPacketNumber packet_number : *all_transmissions) { |
- TransmissionInfo* transmission_info = |
- &unacked_packets_[packet_number - least_unacked_]; |
- transmission_info->all_transmissions = nullptr; |
- transmission_info->is_unackable = true; |
- } |
- delete all_transmissions; |
} |
void QuicUnackedPacketMap::MaybeRemoveRetransmittableFrames( |
@@ -278,7 +210,6 @@ bool QuicUnackedPacketMap::IsPacketUsefulForRetransmittableData( |
// Packet may have retransmittable frames, or the data may have been |
// retransmitted with a new packet number. |
return !info.retransmittable_frames.empty() || |
- info.all_transmissions != nullptr || |
// Allow for an extra 1 RTT before stopping to track old packets. |
info.retransmission > largest_observed_; |
} |