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

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

Issue 1918953003: Landing Recent QUIC changes until 4/22/2016 14:55 UTC (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Deleted SpdyFramerTests missed while mergeing 120451808 Created 4 years, 8 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
« no previous file with comments | « net/net.gypi ('k') | net/quic/congestion_control/general_loss_algorithm_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/congestion_control/general_loss_algorithm.cc
diff --git a/net/quic/congestion_control/general_loss_algorithm.cc b/net/quic/congestion_control/general_loss_algorithm.cc
index 69623b0362a32de3abdbbc68d891b774f07ef7d3..685ad2f9a1fa66c5ffffbe9180a06ad505d241be 100644
--- a/net/quic/congestion_control/general_loss_algorithm.cc
+++ b/net/quic/congestion_control/general_loss_algorithm.cc
@@ -6,6 +6,7 @@
#include "net/quic/congestion_control/rtt_stats.h"
#include "net/quic/quic_bug_tracker.h"
+#include "net/quic/quic_flags.h"
#include "net/quic/quic_protocol.h"
namespace net {
@@ -54,8 +55,23 @@ void GeneralLossAlgorithm::DetectLosses(
continue;
}
- // TODO(ianswett): Combine this and the time based detection for FACK.
- if (loss_type_ == kTime) {
+ if (FLAGS_quic_simplify_loss_detection && loss_type_ == kNack) {
+ // FACK based loss detection.
+ // TODO(ianswett): Pass in largest_newly_acked for FACK.
+ if (largest_observed - packet_number >=
+ kNumberOfNacksBeforeRetransmission) {
+ packets_lost->push_back(std::make_pair(packet_number, it->bytes_sent));
+ continue;
+ }
+ }
+
+ // Only early retransmit(RFC5827) when the last packet gets acked and
+ // there are retransmittable packets in flight.
+ // This also implements a timer-protected variant of FACK.
+ if ((FLAGS_quic_simplify_loss_detection &&
+ !it->retransmittable_frames.empty() &&
+ unacked_packets.largest_sent_packet() == largest_observed) ||
+ loss_type_ == kTime) {
QuicTime when_lost = it->sent_time.Add(loss_delay);
if (time < when_lost) {
loss_detection_timeout_ = when_lost;
@@ -64,15 +80,16 @@ void GeneralLossAlgorithm::DetectLosses(
packets_lost->push_back(std::make_pair(packet_number, it->bytes_sent));
continue;
}
-
- // FACK based loss detection.
- QUIC_BUG_IF(it->nack_count == 0 && it->sent_time.IsInitialized())
- << "All packets less than largest observed should have been nacked."
- << " packet_number:" << packet_number
- << " largest_observed:" << largest_observed;
- if (it->nack_count >= kNumberOfNacksBeforeRetransmission) {
- packets_lost->push_back(std::make_pair(packet_number, it->bytes_sent));
- continue;
+ if (!FLAGS_quic_simplify_loss_detection) {
+ // FACK based loss detection.
+ QUIC_BUG_IF(it->nack_count == 0 && it->sent_time.IsInitialized())
+ << "All packets less than largest observed should have been nacked."
+ << " packet_number:" << packet_number
+ << " largest_observed:" << largest_observed;
+ if (it->nack_count >= kNumberOfNacksBeforeRetransmission) {
+ packets_lost->push_back(std::make_pair(packet_number, it->bytes_sent));
+ continue;
+ }
}
// NACK-based loss detection allows for a max reordering window of 1 RTT.
@@ -82,10 +99,8 @@ void GeneralLossAlgorithm::DetectLosses(
continue;
}
- // Only early retransmit(RFC5827) when the last packet gets acked and
- // there are retransmittable packets in flight.
- // This also implements a timer-protected variant of FACK.
- if (!it->retransmittable_frames.empty() &&
+ if (!FLAGS_quic_simplify_loss_detection &&
+ !it->retransmittable_frames.empty() &&
unacked_packets.largest_sent_packet() == largest_observed) {
// Early retransmit marks the packet as lost once 1.25RTTs have passed
// since the packet was sent and otherwise sets an alarm.
« no previous file with comments | « net/net.gypi ('k') | net/quic/congestion_control/general_loss_algorithm_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698