Index: net/quic/congestion_control/tcp_cubic_sender_packets.cc |
diff --git a/net/quic/congestion_control/tcp_cubic_sender_packets.cc b/net/quic/congestion_control/tcp_cubic_sender_packets.cc |
index ee2837aca6cee84656373e04d558eacce8857138..e1c225febb4ad1338484022f645042b891b26e48 100644 |
--- a/net/quic/congestion_control/tcp_cubic_sender_packets.cc |
+++ b/net/quic/congestion_control/tcp_cubic_sender_packets.cc |
@@ -80,16 +80,29 @@ void TcpCubicSenderPackets::ExitSlowstart() { |
} |
void TcpCubicSenderPackets::OnPacketLost(QuicPacketNumber packet_number, |
+ QuicByteCount lost_bytes, |
QuicByteCount bytes_in_flight) { |
// TCP NewReno (RFC6582) says that once a loss occurs, any losses in packets |
// already sent should be treated as a single loss event, since it's expected. |
if (packet_number <= largest_sent_at_last_cutback_) { |
if (last_cutback_exited_slowstart_) { |
++stats_->slowstart_packets_lost; |
+ stats_->slowstart_bytes_lost += lost_bytes; |
if (slow_start_large_reduction_) { |
- // Reduce congestion window by 1 for every loss. |
- congestion_window_ = |
- max(congestion_window_ - 1, min_congestion_window_); |
+ if (FLAGS_quic_sslr_byte_conservation) { |
+ if (stats_->slowstart_packets_lost == 1 || |
+ (stats_->slowstart_bytes_lost / kDefaultTCPMSS) > |
+ (stats_->slowstart_bytes_lost - lost_bytes) / |
+ kDefaultTCPMSS) { |
+ // Reduce congestion window by 1 for every mss of bytes lost. |
+ congestion_window_ = |
+ max(congestion_window_ - 1, min_congestion_window_); |
+ } |
+ } else { |
+ // Reduce congestion window by 1 for every loss. |
+ congestion_window_ = |
+ max(congestion_window_ - 1, min_congestion_window_); |
+ } |
slowstart_threshold_ = congestion_window_; |
} |
} |