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

Unified Diff: net/quic/core/congestion_control/general_loss_algorithm.cc

Issue 2403193003: Landing Recent QUIC changes until 9:41 AM, Oct 10, 2016 UTC-7 (Closed)
Patch Set: git cl format Created 4 years, 2 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
Index: net/quic/core/congestion_control/general_loss_algorithm.cc
diff --git a/net/quic/core/congestion_control/general_loss_algorithm.cc b/net/quic/core/congestion_control/general_loss_algorithm.cc
index 6c82329ab058454db76f88d7ecd0a2fdea6e4498..6d7521c60361c249c92f9a6c5b65725b57341ee3 100644
--- a/net/quic/core/congestion_control/general_loss_algorithm.cc
+++ b/net/quic/core/congestion_control/general_loss_algorithm.cc
@@ -30,7 +30,8 @@ GeneralLossAlgorithm::GeneralLossAlgorithm()
: loss_detection_timeout_(QuicTime::Zero()),
largest_sent_on_spurious_retransmit_(0),
loss_type_(kNack),
- reordering_shift_(kDefaultLossDelayShift) {}
+ reordering_shift_(kDefaultLossDelayShift),
+ largest_previously_acked_(0) {}
GeneralLossAlgorithm::GeneralLossAlgorithm(LossDetectionType loss_type)
: loss_detection_timeout_(QuicTime::Zero()),
@@ -38,7 +39,8 @@ GeneralLossAlgorithm::GeneralLossAlgorithm(LossDetectionType loss_type)
loss_type_(loss_type),
reordering_shift_(loss_type == kAdaptiveTime
? kDefaultAdaptiveLossDelayShift
- : kDefaultLossDelayShift) {}
+ : kDefaultLossDelayShift),
+ largest_previously_acked_(0) {}
LossDetectionType GeneralLossAlgorithm::GetLossDetectionType() const {
return loss_type_;
@@ -51,6 +53,7 @@ void GeneralLossAlgorithm::SetLossDetectionType(LossDetectionType loss_type) {
reordering_shift_ = loss_type == kAdaptiveTime
? kDefaultAdaptiveLossDelayShift
: kDefaultLossDelayShift;
+ largest_previously_acked_ = 0;
}
// Uses nack counts to decide when packets are lost.
@@ -81,6 +84,16 @@ void GeneralLossAlgorithm::DetectLosses(
packets_lost->push_back(std::make_pair(packet_number, it->bytes_sent));
continue;
}
+ } else if (loss_type_ == kLazyFack) {
+ // Require two in order acks to invoke FACK, which avoids spuriously
+ // retransmitting packets when one packet is reordered by a large amount.
+ if (largest_newly_acked > largest_previously_acked_ &&
+ largest_previously_acked_ > packet_number &&
+ largest_previously_acked_ - packet_number >=
+ (kNumberOfNacksBeforeRetransmission - 1)) {
+ packets_lost->push_back(std::make_pair(packet_number, it->bytes_sent));
+ continue;
+ }
}
// Only early retransmit(RFC5827) when the last packet gets acked and
@@ -108,6 +121,7 @@ void GeneralLossAlgorithm::DetectLosses(
continue;
}
}
+ largest_previously_acked_ = largest_newly_acked;
}
QuicTime GeneralLossAlgorithm::GetLossTimeout() const {

Powered by Google App Engine
This is Rietveld 408576698