OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/quic/quic_sent_packet_manager.h" | 5 #include "net/quic/quic_sent_packet_manager.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 return false; | 56 return false; |
57 } | 57 } |
58 return transmission_info.retransmittable_frames->HasCryptoHandshake() == | 58 return transmission_info.retransmittable_frames->HasCryptoHandshake() == |
59 IS_HANDSHAKE; | 59 IS_HANDSHAKE; |
60 } | 60 } |
61 | 61 |
62 } // namespace | 62 } // namespace |
63 | 63 |
64 #define ENDPOINT (is_server_ ? "Server: " : " Client: ") | 64 #define ENDPOINT (is_server_ ? "Server: " : " Client: ") |
65 | 65 |
66 QuicSentPacketManager::QuicSentPacketManager(bool is_server, | 66 QuicSentPacketManager::QuicSentPacketManager( |
67 const QuicClock* clock, | 67 bool is_server, |
68 QuicConnectionStats* stats, | 68 const QuicClock* clock, |
69 CongestionFeedbackType type, | 69 QuicConnectionStats* stats, |
70 LossDetectionType loss_type) | 70 CongestionControlType congestion_control_type, |
| 71 LossDetectionType loss_type) |
71 : unacked_packets_(), | 72 : unacked_packets_(), |
72 is_server_(is_server), | 73 is_server_(is_server), |
73 clock_(clock), | 74 clock_(clock), |
74 stats_(stats), | 75 stats_(stats), |
75 debug_delegate_(NULL), | 76 debug_delegate_(NULL), |
76 network_change_visitor_(NULL), | 77 network_change_visitor_(NULL), |
77 send_algorithm_( | 78 send_algorithm_(SendAlgorithmInterface::Create(clock, |
78 SendAlgorithmInterface::Create(clock, &rtt_stats_, type, stats)), | 79 &rtt_stats_, |
| 80 congestion_control_type, |
| 81 stats)), |
79 loss_algorithm_(LossDetectionInterface::Create(loss_type)), | 82 loss_algorithm_(LossDetectionInterface::Create(loss_type)), |
80 largest_observed_(0), | 83 largest_observed_(0), |
81 first_rto_transmission_(0), | 84 first_rto_transmission_(0), |
82 consecutive_rto_count_(0), | 85 consecutive_rto_count_(0), |
83 consecutive_tlp_count_(0), | 86 consecutive_tlp_count_(0), |
84 consecutive_crypto_retransmission_count_(0), | 87 consecutive_crypto_retransmission_count_(0), |
85 pending_tlp_transmission_(false), | 88 pending_tlp_transmission_(false), |
86 max_tail_loss_probes_(kDefaultMaxTailLossProbes), | 89 max_tail_loss_probes_(kDefaultMaxTailLossProbes), |
87 using_pacing_(false) { | 90 using_pacing_(false) { |
88 } | 91 } |
89 | 92 |
90 QuicSentPacketManager::~QuicSentPacketManager() { | 93 QuicSentPacketManager::~QuicSentPacketManager() { |
91 } | 94 } |
92 | 95 |
93 void QuicSentPacketManager::SetFromConfig(const QuicConfig& config) { | 96 void QuicSentPacketManager::SetFromConfig(const QuicConfig& config) { |
94 if (config.HasReceivedInitialRoundTripTimeUs() && | 97 if (config.HasReceivedInitialRoundTripTimeUs() && |
95 config.ReceivedInitialRoundTripTimeUs() > 0) { | 98 config.ReceivedInitialRoundTripTimeUs() > 0) { |
96 rtt_stats_.set_initial_rtt_us(min(kMaxInitialRoundTripTimeUs, | 99 rtt_stats_.set_initial_rtt_us(min(kMaxInitialRoundTripTimeUs, |
97 config.ReceivedInitialRoundTripTimeUs())); | 100 config.ReceivedInitialRoundTripTimeUs())); |
98 } | 101 } |
99 // TODO(ianswett): BBR is currently a server only feature. | 102 // TODO(ianswett): BBR is currently a server only feature. |
100 if (config.HasReceivedConnectionOptions() && | 103 if (config.HasReceivedConnectionOptions() && |
101 ContainsQuicTag(config.ReceivedConnectionOptions(), kTBBR)) { | 104 ContainsQuicTag(config.ReceivedConnectionOptions(), kTBBR)) { |
102 if (FLAGS_quic_recent_min_rtt_window_s > 0) { | 105 if (FLAGS_quic_recent_min_rtt_window_s > 0) { |
103 rtt_stats_.set_recent_min_rtt_window( | 106 rtt_stats_.set_recent_min_rtt_window( |
104 QuicTime::Delta::FromSeconds(FLAGS_quic_recent_min_rtt_window_s)); | 107 QuicTime::Delta::FromSeconds(FLAGS_quic_recent_min_rtt_window_s)); |
105 } | 108 } |
106 send_algorithm_.reset( | 109 send_algorithm_.reset( |
107 SendAlgorithmInterface::Create(clock_, &rtt_stats_, kTCPBBR, stats_)); | 110 SendAlgorithmInterface::Create(clock_, &rtt_stats_, kBBR, stats_)); |
108 } | 111 } |
109 if (config.congestion_feedback() == kPACE || | 112 if (config.congestion_feedback() == kPACE || |
110 (config.HasReceivedConnectionOptions() && | 113 (config.HasReceivedConnectionOptions() && |
111 ContainsQuicTag(config.ReceivedConnectionOptions(), kPACE))) { | 114 ContainsQuicTag(config.ReceivedConnectionOptions(), kPACE))) { |
112 MaybeEnablePacing(); | 115 MaybeEnablePacing(); |
113 } | 116 } |
114 // TODO(ianswett): Remove the "HasReceivedLossDetection" branch once | 117 // TODO(ianswett): Remove the "HasReceivedLossDetection" branch once |
115 // the ConnectionOptions code is live everywhere. | 118 // the ConnectionOptions code is live everywhere. |
116 if ((config.HasReceivedLossDetection() && | 119 if ((config.HasReceivedLossDetection() && |
117 config.ReceivedLossDetection() == kTIME) || | 120 config.ReceivedLossDetection() == kTIME) || |
(...skipping 737 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
855 | 858 |
856 // Set up a pacing sender with a 5 millisecond alarm granularity. | 859 // Set up a pacing sender with a 5 millisecond alarm granularity. |
857 using_pacing_ = true; | 860 using_pacing_ = true; |
858 send_algorithm_.reset( | 861 send_algorithm_.reset( |
859 new PacingSender(send_algorithm_.release(), | 862 new PacingSender(send_algorithm_.release(), |
860 QuicTime::Delta::FromMilliseconds(5), | 863 QuicTime::Delta::FromMilliseconds(5), |
861 kInitialUnpacedBurst)); | 864 kInitialUnpacedBurst)); |
862 } | 865 } |
863 | 866 |
864 } // namespace net | 867 } // namespace net |
OLD | NEW |