Index: net/quic/congestion_control/tcp_cubic_sender.cc |
diff --git a/net/quic/congestion_control/tcp_cubic_sender.cc b/net/quic/congestion_control/tcp_cubic_sender.cc |
index bd61bdb916ec3c7f2cb50beb9418e58fb829749d..18401b713b7d11f23925d14f36a161d6e6a4a275 100644 |
--- a/net/quic/congestion_control/tcp_cubic_sender.cc |
+++ b/net/quic/congestion_control/tcp_cubic_sender.cc |
@@ -8,6 +8,7 @@ |
#include "base/metrics/histogram.h" |
#include "net/quic/congestion_control/rtt_stats.h" |
+#include "net/quic/crypto/crypto_protocol.h" |
using std::max; |
using std::min; |
@@ -58,10 +59,18 @@ TcpCubicSender::~TcpCubicSender() { |
} |
void TcpCubicSender::SetFromConfig(const QuicConfig& config, bool is_server) { |
- if (is_server && config.HasReceivedInitialCongestionWindow()) { |
- // Set the initial window size. |
- congestion_window_ = min(kMaxInitialWindow, |
- config.ReceivedInitialCongestionWindow()); |
+ if (is_server) { |
+ if (config.HasReceivedConnectionOptions() && |
+ ContainsQuicTag(config.ReceivedConnectionOptions(), kIW10)) { |
+ // Initial window experiment. Ignore the initial congestion |
+ // window suggested by the client and use the default ICWND of |
+ // 10 instead. |
+ congestion_window_ = kInitialCongestionWindow; |
+ } else if (config.HasReceivedInitialCongestionWindow()) { |
+ // Set the initial window size. |
+ congestion_window_ = min(kMaxInitialWindow, |
+ config.ReceivedInitialCongestionWindow()); |
+ } |
} |
} |