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

Unified Diff: net/quic/quic_sent_packet_manager.cc

Issue 76723002: Land Recent QUIC Changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix compilation error Created 7 years, 1 month 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_sent_packet_manager.h ('k') | net/quic/quic_sent_packet_manager_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/quic_sent_packet_manager.cc
diff --git a/net/quic/quic_sent_packet_manager.cc b/net/quic/quic_sent_packet_manager.cc
index 66eea780f135d8f52a015d6f5d3fa6bce678e430..9ecb5a78736bc49701d89bda0640847afc6e5739 100644
--- a/net/quic/quic_sent_packet_manager.cc
+++ b/net/quic/quic_sent_packet_manager.cc
@@ -32,7 +32,10 @@ QuicSentPacketManager::QuicSentPacketManager(bool is_server,
}
QuicSentPacketManager::~QuicSentPacketManager() {
- STLDeleteValues(&unacked_packets_);
+ for (UnackedPacketMap::iterator it = unacked_packets_.begin();
+ it != unacked_packets_.end(); ++it) {
+ delete it->second.retransmittable_frames;
+ }
while (!previous_transmissions_map_.empty()) {
SequenceNumberSet* previous_transmissions =
previous_transmissions_map_.begin()->second;
@@ -62,34 +65,29 @@ void QuicSentPacketManager::OnSerializedPacket(
ack_notifier_manager_.OnSerializedPacket(serialized_packet);
DCHECK(unacked_packets_.empty() ||
- unacked_packets_.rbegin()->first <
- serialized_packet.sequence_number);
+ unacked_packets_.rbegin()->first < serialized_packet.sequence_number);
unacked_packets_[serialized_packet.sequence_number] =
- serialized_packet.retransmittable_frames;
- retransmission_map_[serialized_packet.sequence_number] =
- RetransmissionInfo(serialized_packet.sequence_number,
- serialized_packet.sequence_number_length);
+ TransmissionInfo(serialized_packet.retransmittable_frames,
+ serialized_packet.sequence_number_length);
+ nack_map_[serialized_packet.sequence_number] = 0;
}
void QuicSentPacketManager::OnRetransmittedPacket(
QuicPacketSequenceNumber old_sequence_number,
QuicPacketSequenceNumber new_sequence_number) {
DCHECK(ContainsKey(unacked_packets_, old_sequence_number));
- DCHECK(ContainsKey(retransmission_map_, old_sequence_number));
+ DCHECK(ContainsKey(nack_map_, old_sequence_number));
DCHECK(ContainsKey(pending_retransmissions_, old_sequence_number));
DCHECK(unacked_packets_.empty() ||
unacked_packets_.rbegin()->first < new_sequence_number);
pending_retransmissions_.erase(old_sequence_number);
- RetransmissionInfo retransmission_info(
- new_sequence_number, GetSequenceNumberLength(old_sequence_number));
- retransmission_info.number_retransmissions =
- retransmission_map_[old_sequence_number].number_retransmissions + 1;
- retransmission_map_.erase(old_sequence_number);
- retransmission_map_[new_sequence_number] = retransmission_info;
+ nack_map_.erase(old_sequence_number);
+ nack_map_[new_sequence_number] = 0;
- RetransmittableFrames* frames = unacked_packets_[old_sequence_number];
+ RetransmittableFrames* frames =
+ unacked_packets_[old_sequence_number].retransmittable_frames;
DCHECK(frames);
// A notifier may be waiting to hear about ACKs for the original sequence
@@ -97,18 +95,12 @@ void QuicSentPacketManager::OnRetransmittedPacket(
ack_notifier_manager_.UpdateSequenceNumber(old_sequence_number,
new_sequence_number);
- if (FLAGS_track_retransmission_history) {
- // We keep the old packet in the unacked packet list until it, or one of
- // the retransmissions of it are acked.
- unacked_packets_[old_sequence_number] = NULL;
- } else {
- unacked_packets_.erase(old_sequence_number);
- }
- unacked_packets_[new_sequence_number] = frames;
+ // We keep the old packet in the unacked packet list until it, or one of
+ // the retransmissions of it are acked.
+ unacked_packets_[old_sequence_number].retransmittable_frames = NULL;
+ unacked_packets_[new_sequence_number] =
+ TransmissionInfo(frames, GetSequenceNumberLength(old_sequence_number));
- if (!FLAGS_track_retransmission_history) {
- return;
- }
// Keep track of all sequence numbers that this packet
// has been transmitted as.
SequenceNumberSet* previous_transmissions;
@@ -176,13 +168,12 @@ void QuicSentPacketManager::HandleAckForSentPackets(
// lowest unacked packet.
DVLOG(1) << ENDPOINT << "still missing packet " << sequence_number;
++it;
- RetransmissionMap::iterator retransmission_it =
- retransmission_map_.find(sequence_number);
- if (retransmission_it == retransmission_map_.end()) {
+ NackMap::iterator nack_it = nack_map_.find(sequence_number);
+ if (nack_it == nack_map_.end()) {
continue;
}
- size_t nack_count = ++(retransmission_it->second.number_nacks);
- helper_->OnPacketNacked(sequence_number, nack_count);
+ ++nack_it->second;
+ helper_->OnPacketNacked(sequence_number, nack_it->second);
}
// If we have received a trunacted ack, then we need to
@@ -202,7 +193,7 @@ void QuicSentPacketManager::HandleAckForSentPackets(
}
DCHECK(ContainsKey(previous_transmissions_map_, sequence_number));
- DCHECK(!ContainsKey(retransmission_map_, sequence_number));
+ DCHECK(!ContainsKey(nack_map_, sequence_number));
DCHECK(!HasRetransmittableFrames(sequence_number));
unacked_packets_.erase(sequence_number);
SequenceNumberSet* previous_transmissions =
@@ -224,7 +215,8 @@ bool QuicSentPacketManager::HasRetransmittableFrames(
return false;
}
- return unacked_packets_.find(sequence_number)->second != NULL;
+ return unacked_packets_.find(
+ sequence_number)->second.retransmittable_frames != NULL;
}
bool QuicSentPacketManager::MarkForRetransmission(
@@ -254,7 +246,7 @@ QuicSentPacketManager::PendingRetransmission
QuicPacketSequenceNumber sequence_number =
pending_retransmissions_.begin()->first;
DCHECK(ContainsKey(unacked_packets_, sequence_number));
- DCHECK(unacked_packets_[sequence_number]);
+ DCHECK(unacked_packets_[sequence_number].retransmittable_frames);
return PendingRetransmission(sequence_number,
pending_retransmissions_.begin()->second,
@@ -324,8 +316,8 @@ QuicSentPacketManager::MarkPacketReceivedByPeer(
// If we have received an ack for a previous transmission of a packet,
// we want to keep the "new" transmission of the packet unacked,
// but prevent the data from being retransmitted.
- delete unacked_packets_[new_packet];
- unacked_packets_[new_packet] = NULL;
+ delete unacked_packets_[new_packet].retransmittable_frames;
+ unacked_packets_[new_packet].retransmittable_frames = NULL;
pending_retransmissions_.erase(new_packet);
}
previous_transmissions_map_.erase(new_packet);
@@ -360,14 +352,14 @@ void QuicSentPacketManager::DiscardPacket(
unacked_packets_.find(sequence_number);
// Packet was not meant to be retransmitted.
if (unacked_it == unacked_packets_.end()) {
- DCHECK(!ContainsKey(retransmission_map_, sequence_number));
+ DCHECK(!ContainsKey(nack_map_, sequence_number));
return;
}
- // Delete the unacked packet.
- delete unacked_it->second;
+ // Delete the retransmittable frames.
+ delete unacked_it->second.retransmittable_frames;
unacked_packets_.erase(unacked_it);
- retransmission_map_.erase(sequence_number);
+ nack_map_.erase(sequence_number);
pending_retransmissions_.erase(sequence_number);
return;
}
@@ -404,19 +396,8 @@ void QuicSentPacketManager::DiscardFecPacket(
bool QuicSentPacketManager::IsRetransmission(
QuicPacketSequenceNumber sequence_number) const {
DCHECK(HasRetransmittableFrames(sequence_number));
- RetransmissionMap::const_iterator it =
- retransmission_map_.find(sequence_number);
- return it != retransmission_map_.end() &&
- it->second.number_retransmissions > 0;
-}
-
-size_t QuicSentPacketManager::GetRetransmissionCount(
- QuicPacketSequenceNumber sequence_number) const {
- DCHECK(HasRetransmittableFrames(sequence_number));
- DCHECK(ContainsKey(retransmission_map_, sequence_number));
- RetransmissionMap::const_iterator it =
- retransmission_map_.find(sequence_number);
- return it->second.number_retransmissions;
+ return HasRetransmittableFrames(sequence_number) &&
+ ContainsKey(previous_transmissions_map_, sequence_number);
}
bool QuicSentPacketManager::IsUnacked(
@@ -432,18 +413,16 @@ bool QuicSentPacketManager::IsFecUnacked(
const RetransmittableFrames& QuicSentPacketManager::GetRetransmittableFrames(
QuicPacketSequenceNumber sequence_number) const {
DCHECK(ContainsKey(unacked_packets_, sequence_number));
- DCHECK(ContainsKey(retransmission_map_, sequence_number));
+ DCHECK(ContainsKey(nack_map_, sequence_number));
- return *unacked_packets_.find(sequence_number)->second;
+ return *unacked_packets_.find(sequence_number)->second.retransmittable_frames;
}
QuicSequenceNumberLength QuicSentPacketManager::GetSequenceNumberLength(
QuicPacketSequenceNumber sequence_number) const {
DCHECK(ContainsKey(unacked_packets_, sequence_number));
- DCHECK(ContainsKey(retransmission_map_, sequence_number));
- return retransmission_map_.find(
- sequence_number)->second.sequence_number_length;
+ return unacked_packets_.find(sequence_number)->second.sequence_number_length;
}
QuicTime QuicSentPacketManager::GetFecSentTime(
@@ -457,8 +436,16 @@ bool QuicSentPacketManager::HasUnackedPackets() const {
return !unacked_packets_.empty();
}
-size_t QuicSentPacketManager::GetNumUnackedPackets() const {
- return unacked_packets_.size();
+size_t QuicSentPacketManager::GetNumRetransmittablePackets() const {
+ size_t num_unacked_packets = 0;
+ for (UnackedPacketMap::const_iterator it = unacked_packets_.begin();
+ it != unacked_packets_.end(); ++it) {
+ QuicPacketSequenceNumber sequence_number = it->first;
+ if (HasRetransmittableFrames(sequence_number)) {
+ ++num_unacked_packets;
+ }
+ }
+ return num_unacked_packets;
}
bool QuicSentPacketManager::HasUnackedFecPackets() const {
« no previous file with comments | « net/quic/quic_sent_packet_manager.h ('k') | net/quic/quic_sent_packet_manager_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698