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 7978fedc82c100361bc326d7b7fd61364ca45cfe..99b8bcf6897340bb5a2cee94985aaf4433679f97 100644 |
--- a/net/quic/quic_sent_packet_manager.cc |
+++ b/net/quic/quic_sent_packet_manager.cc |
@@ -323,6 +323,9 @@ void QuicSentPacketManager::RetransmitUnackedPackets( |
(retransmission_type == ALL_UNACKED_RETRANSMISSION || |
frames->encryption_level() == ENCRYPTION_INITIAL)) { |
MarkForRetransmission(sequence_number, retransmission_type); |
+ } else if (it->is_fec_packet) { |
+ // Remove FEC packets from the packet map, since we can't retransmit them. |
+ unacked_packets_.RemoveFromInFlight(sequence_number); |
} |
} |
} |
@@ -549,12 +552,18 @@ bool QuicSentPacketManager::OnPacketSent( |
} |
// Only track packets as in flight that the send algorithm wants us to track. |
+ // Since FEC packets should also be counted towards the congestion window, |
+ // consider them as retransmittable for the purposes of congestion control. |
+ HasRetransmittableData has_congestion_controlled_data = |
+ serialized_packet->packet->is_fec_packet() ? |
+ HAS_RETRANSMITTABLE_DATA : has_retransmittable_data; |
const bool in_flight = |
send_algorithm_->OnPacketSent(sent_time, |
unacked_packets_.bytes_in_flight(), |
sequence_number, |
bytes, |
- has_retransmittable_data); |
+ has_congestion_controlled_data); |
+ |
unacked_packets_.AddSentPacket(*serialized_packet, |
original_sequence_number, |
transmission_type, |