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 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 // we only update rtt when the largest observed gets acked. | 183 // we only update rtt when the largest observed gets acked. |
184 bool largest_observed_acked = MaybeUpdateRTT(ack_frame, ack_receive_time); | 184 bool largest_observed_acked = MaybeUpdateRTT(ack_frame, ack_receive_time); |
185 if (largest_observed_ < ack_frame.largest_observed) { | 185 if (largest_observed_ < ack_frame.largest_observed) { |
186 largest_observed_ = ack_frame.largest_observed; | 186 largest_observed_ = ack_frame.largest_observed; |
187 unacked_packets_.IncreaseLargestObserved(largest_observed_); | 187 unacked_packets_.IncreaseLargestObserved(largest_observed_); |
188 } | 188 } |
189 HandleAckForSentPackets(ack_frame); | 189 HandleAckForSentPackets(ack_frame); |
190 InvokeLossDetection(ack_receive_time); | 190 InvokeLossDetection(ack_receive_time); |
191 MaybeInvokeCongestionEvent(largest_observed_acked, bytes_in_flight); | 191 MaybeInvokeCongestionEvent(largest_observed_acked, bytes_in_flight); |
192 | 192 |
| 193 sustained_bandwidth_recorder_.RecordEstimate( |
| 194 send_algorithm_->InRecovery(), |
| 195 send_algorithm_->InSlowStart(), |
| 196 send_algorithm_->BandwidthEstimate(), |
| 197 ack_receive_time, |
| 198 clock_->WallNow(), |
| 199 rtt_stats_.SmoothedRtt()); |
| 200 |
193 // If we have received a truncated ack, then we need to clear out some | 201 // If we have received a truncated ack, then we need to clear out some |
194 // previous transmissions to allow the peer to actually ACK new packets. | 202 // previous transmissions to allow the peer to actually ACK new packets. |
195 if (ack_frame.is_truncated) { | 203 if (ack_frame.is_truncated) { |
196 unacked_packets_.ClearPreviousRetransmissions( | 204 unacked_packets_.ClearPreviousRetransmissions( |
197 ack_frame.missing_packets.size() / 2); | 205 ack_frame.missing_packets.size() / 2); |
198 } | 206 } |
199 | 207 |
200 // Anytime we are making forward progress and have a new RTT estimate, reset | 208 // Anytime we are making forward progress and have a new RTT estimate, reset |
201 // the backoff counters. | 209 // the backoff counters. |
202 if (largest_observed_acked) { | 210 if (largest_observed_acked) { |
(...skipping 641 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
844 } | 852 } |
845 | 853 |
846 QuicBandwidth QuicSentPacketManager::BandwidthEstimate() const { | 854 QuicBandwidth QuicSentPacketManager::BandwidthEstimate() const { |
847 return send_algorithm_->BandwidthEstimate(); | 855 return send_algorithm_->BandwidthEstimate(); |
848 } | 856 } |
849 | 857 |
850 bool QuicSentPacketManager::HasReliableBandwidthEstimate() const { | 858 bool QuicSentPacketManager::HasReliableBandwidthEstimate() const { |
851 return send_algorithm_->HasReliableBandwidthEstimate(); | 859 return send_algorithm_->HasReliableBandwidthEstimate(); |
852 } | 860 } |
853 | 861 |
| 862 const QuicSustainedBandwidthRecorder& |
| 863 QuicSentPacketManager::SustainedBandwidthRecorder() const { |
| 864 return sustained_bandwidth_recorder_; |
| 865 } |
| 866 |
854 QuicByteCount QuicSentPacketManager::GetCongestionWindow() const { | 867 QuicByteCount QuicSentPacketManager::GetCongestionWindow() const { |
855 return send_algorithm_->GetCongestionWindow(); | 868 return send_algorithm_->GetCongestionWindow(); |
856 } | 869 } |
857 | 870 |
858 QuicByteCount QuicSentPacketManager::GetSlowStartThreshold() const { | 871 QuicByteCount QuicSentPacketManager::GetSlowStartThreshold() const { |
859 return send_algorithm_->GetSlowStartThreshold(); | 872 return send_algorithm_->GetSlowStartThreshold(); |
860 } | 873 } |
861 | 874 |
862 void QuicSentPacketManager::EnablePacing() { | 875 void QuicSentPacketManager::EnablePacing() { |
863 if (using_pacing_) { | 876 if (using_pacing_) { |
864 return; | 877 return; |
865 } | 878 } |
866 | 879 |
867 // Set up a pacing sender with a 5 millisecond alarm granularity. | 880 // Set up a pacing sender with a 5 millisecond alarm granularity. |
868 using_pacing_ = true; | 881 using_pacing_ = true; |
869 send_algorithm_.reset( | 882 send_algorithm_.reset( |
870 new PacingSender(send_algorithm_.release(), | 883 new PacingSender(send_algorithm_.release(), |
871 QuicTime::Delta::FromMilliseconds(5), | 884 QuicTime::Delta::FromMilliseconds(5), |
872 kInitialUnpacedBurst)); | 885 kInitialUnpacedBurst)); |
873 } | 886 } |
874 | 887 |
875 } // namespace net | 888 } // namespace net |
OLD | NEW |