| 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 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 58 bool HasCryptoHandshake(const TransmissionInfo& transmission_info) { | 58 bool HasCryptoHandshake(const TransmissionInfo& transmission_info) { |
| 59 if (transmission_info.retransmittable_frames == nullptr) { | 59 if (transmission_info.retransmittable_frames == nullptr) { |
| 60 return false; | 60 return false; |
| 61 } | 61 } |
| 62 return transmission_info.retransmittable_frames->HasCryptoHandshake() == | 62 return transmission_info.retransmittable_frames->HasCryptoHandshake() == |
| 63 IS_HANDSHAKE; | 63 IS_HANDSHAKE; |
| 64 } | 64 } |
| 65 | 65 |
| 66 } // namespace | 66 } // namespace |
| 67 | 67 |
| 68 #define ENDPOINT (is_server_ ? "Server: " : " Client: ") | 68 #define ENDPOINT \ |
| 69 (perspective_ == Perspective::IS_SERVER ? "Server: " : "Client: ") |
| 69 | 70 |
| 70 QuicSentPacketManager::QuicSentPacketManager( | 71 QuicSentPacketManager::QuicSentPacketManager( |
| 71 bool is_server, | 72 Perspective perspective, |
| 72 const QuicClock* clock, | 73 const QuicClock* clock, |
| 73 QuicConnectionStats* stats, | 74 QuicConnectionStats* stats, |
| 74 CongestionControlType congestion_control_type, | 75 CongestionControlType congestion_control_type, |
| 75 LossDetectionType loss_type, | 76 LossDetectionType loss_type, |
| 76 bool is_secure) | 77 bool is_secure) |
| 77 : unacked_packets_(), | 78 : unacked_packets_(), |
| 78 is_server_(is_server), | 79 perspective_(perspective), |
| 79 clock_(clock), | 80 clock_(clock), |
| 80 stats_(stats), | 81 stats_(stats), |
| 81 debug_delegate_(nullptr), | 82 debug_delegate_(nullptr), |
| 82 network_change_visitor_(nullptr), | 83 network_change_visitor_(nullptr), |
| 83 initial_congestion_window_(is_secure ? kInitialCongestionWindowSecure | 84 initial_congestion_window_(is_secure ? kInitialCongestionWindowSecure |
| 84 : kInitialCongestionWindowInsecure), | 85 : kInitialCongestionWindowInsecure), |
| 85 send_algorithm_( | 86 send_algorithm_( |
| 86 SendAlgorithmInterface::Create(clock, | 87 SendAlgorithmInterface::Create(clock, |
| 87 &rtt_stats_, | 88 &rtt_stats_, |
| 88 congestion_control_type, | 89 congestion_control_type, |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 159 } | 160 } |
| 160 if (config.HasReceivedConnectionOptions() && | 161 if (config.HasReceivedConnectionOptions() && |
| 161 ContainsQuicTag(config.ReceivedConnectionOptions(), kTIME)) { | 162 ContainsQuicTag(config.ReceivedConnectionOptions(), kTIME)) { |
| 162 loss_algorithm_.reset(LossDetectionInterface::Create(kTime)); | 163 loss_algorithm_.reset(LossDetectionInterface::Create(kTime)); |
| 163 } | 164 } |
| 164 if (config.HasReceivedSocketReceiveBuffer()) { | 165 if (config.HasReceivedSocketReceiveBuffer()) { |
| 165 receive_buffer_bytes_ = | 166 receive_buffer_bytes_ = |
| 166 max(kMinSocketReceiveBuffer, | 167 max(kMinSocketReceiveBuffer, |
| 167 static_cast<QuicByteCount>(config.ReceivedSocketReceiveBuffer())); | 168 static_cast<QuicByteCount>(config.ReceivedSocketReceiveBuffer())); |
| 168 } | 169 } |
| 169 send_algorithm_->SetFromConfig(config, is_server_, using_pacing_); | 170 send_algorithm_->SetFromConfig(config, perspective_, using_pacing_); |
| 170 | 171 |
| 171 if (network_change_visitor_ != nullptr) { | 172 if (network_change_visitor_ != nullptr) { |
| 172 network_change_visitor_->OnCongestionWindowChange(); | 173 network_change_visitor_->OnCongestionWindowChange(); |
| 173 } | 174 } |
| 174 } | 175 } |
| 175 | 176 |
| 176 bool QuicSentPacketManager::ResumeConnectionState( | 177 bool QuicSentPacketManager::ResumeConnectionState( |
| 177 const CachedNetworkParameters& cached_network_params) { | 178 const CachedNetworkParameters& cached_network_params) { |
| 178 if (cached_network_params.has_min_rtt_ms()) { | 179 if (cached_network_params.has_min_rtt_ms()) { |
| 179 uint32 initial_rtt_us = | 180 uint32 initial_rtt_us = |
| 180 kNumMicrosPerMilli * cached_network_params.min_rtt_ms(); | 181 kNumMicrosPerMilli * cached_network_params.min_rtt_ms(); |
| 181 rtt_stats_.set_initial_rtt_us( | 182 rtt_stats_.set_initial_rtt_us( |
| 182 max(kMinInitialRoundTripTimeUs, | 183 max(kMinInitialRoundTripTimeUs, |
| 183 min(kMaxInitialRoundTripTimeUs, initial_rtt_us))); | 184 min(kMaxInitialRoundTripTimeUs, initial_rtt_us))); |
| 184 } | 185 } |
| 185 return send_algorithm_->ResumeConnectionState(cached_network_params); | 186 return send_algorithm_->ResumeConnectionState(cached_network_params); |
| 186 } | 187 } |
| 187 | 188 |
| 188 void QuicSentPacketManager::SetNumOpenStreams(size_t num_streams) { | 189 void QuicSentPacketManager::SetNumOpenStreams(size_t num_streams) { |
| 189 if (n_connection_simulation_) { | 190 if (n_connection_simulation_) { |
| 190 // Ensure the number of connections is between 1 and 5. | 191 // Ensure the number of connections is between 1 and 5. |
| 191 send_algorithm_->SetNumEmulatedConnections( | 192 send_algorithm_->SetNumEmulatedConnections( |
| 192 min<size_t>(5, max<size_t>(1, num_streams))); | 193 min<size_t>(5, max<size_t>(1, num_streams))); |
| 193 } | 194 } |
| 194 } | 195 } |
| 195 | 196 |
| 196 bool QuicSentPacketManager::HasClientSentConnectionOption( | 197 bool QuicSentPacketManager::HasClientSentConnectionOption( |
| 197 const QuicConfig& config, QuicTag tag) const { | 198 const QuicConfig& config, QuicTag tag) const { |
| 198 if (is_server_) { | 199 if (perspective_ == Perspective::IS_SERVER) { |
| 199 if (config.HasReceivedConnectionOptions() && | 200 if (config.HasReceivedConnectionOptions() && |
| 200 ContainsQuicTag(config.ReceivedConnectionOptions(), tag)) { | 201 ContainsQuicTag(config.ReceivedConnectionOptions(), tag)) { |
| 201 return true; | 202 return true; |
| 202 } | 203 } |
| 203 } else if (config.HasSendConnectionOptions() && | 204 } else if (config.HasSendConnectionOptions() && |
| 204 ContainsQuicTag(config.SendConnectionOptions(), tag)) { | 205 ContainsQuicTag(config.SendConnectionOptions(), tag)) { |
| 205 return true; | 206 return true; |
| 206 } | 207 } |
| 207 return false; | 208 return false; |
| 208 } | 209 } |
| (...skipping 733 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 942 // Set up a pacing sender with a 1 millisecond alarm granularity, the same as | 943 // Set up a pacing sender with a 1 millisecond alarm granularity, the same as |
| 943 // the default granularity of the Linux kernel's FQ qdisc. | 944 // the default granularity of the Linux kernel's FQ qdisc. |
| 944 using_pacing_ = true; | 945 using_pacing_ = true; |
| 945 send_algorithm_.reset( | 946 send_algorithm_.reset( |
| 946 new PacingSender(send_algorithm_.release(), | 947 new PacingSender(send_algorithm_.release(), |
| 947 QuicTime::Delta::FromMilliseconds(1), | 948 QuicTime::Delta::FromMilliseconds(1), |
| 948 kInitialUnpacedBurst)); | 949 kInitialUnpacedBurst)); |
| 949 } | 950 } |
| 950 | 951 |
| 951 } // namespace net | 952 } // namespace net |
| OLD | NEW |