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

Side by Side Diff: net/quic/quic_sent_packet_manager.cc

Issue 706203003: Update from https://crrev.com/303153 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 1 month 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 unified diff | Download patch
« no previous file with comments | « net/quic/quic_sent_packet_manager.h ('k') | net/quic/quic_sent_packet_manager_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 InvokeLossDetection(ack_receive_time); 185 InvokeLossDetection(ack_receive_time);
186 MaybeInvokeCongestionEvent(largest_observed_acked, bytes_in_flight); 186 MaybeInvokeCongestionEvent(largest_observed_acked, bytes_in_flight);
187 unacked_packets_.RemoveObsoletePackets(); 187 unacked_packets_.RemoveObsoletePackets();
188 188
189 sustained_bandwidth_recorder_.RecordEstimate( 189 sustained_bandwidth_recorder_.RecordEstimate(
190 send_algorithm_->InRecovery(), 190 send_algorithm_->InRecovery(),
191 send_algorithm_->InSlowStart(), 191 send_algorithm_->InSlowStart(),
192 send_algorithm_->BandwidthEstimate(), 192 send_algorithm_->BandwidthEstimate(),
193 ack_receive_time, 193 ack_receive_time,
194 clock_->WallNow(), 194 clock_->WallNow(),
195 rtt_stats_.SmoothedRtt()); 195 rtt_stats_.smoothed_rtt());
196 196
197 // If we have received a truncated ack, then we need to clear out some 197 // If we have received a truncated ack, then we need to clear out some
198 // previous transmissions to allow the peer to actually ACK new packets. 198 // previous transmissions to allow the peer to actually ACK new packets.
199 if (ack_frame.is_truncated) { 199 if (ack_frame.is_truncated) {
200 unacked_packets_.ClearAllPreviousRetransmissions(); 200 unacked_packets_.ClearAllPreviousRetransmissions();
201 } 201 }
202 202
203 // Anytime we are making forward progress and have a new RTT estimate, reset 203 // Anytime we are making forward progress and have a new RTT estimate, reset
204 // the backoff counters. 204 // the backoff counters.
205 if (largest_observed_acked) { 205 if (largest_observed_acked) {
(...skipping 606 matching lines...) Expand 10 before | Expand all | Expand 10 after
812 } 812 }
813 } 813 }
814 DCHECK(false); 814 DCHECK(false);
815 return QuicTime::Zero(); 815 return QuicTime::Zero();
816 } 816 }
817 817
818 const QuicTime::Delta QuicSentPacketManager::GetCryptoRetransmissionDelay() 818 const QuicTime::Delta QuicSentPacketManager::GetCryptoRetransmissionDelay()
819 const { 819 const {
820 // This is equivalent to the TailLossProbeDelay, but slightly more aggressive 820 // This is equivalent to the TailLossProbeDelay, but slightly more aggressive
821 // because crypto handshake messages don't incur a delayed ack time. 821 // because crypto handshake messages don't incur a delayed ack time.
822 int64 delay_ms = 822 QuicTime::Delta srtt = rtt_stats_.smoothed_rtt();
823 max(kMinHandshakeTimeoutMs, 823 if (srtt.IsZero()) {
824 static_cast<int64>(1.5 * rtt_stats_.SmoothedRtt().ToMilliseconds())); 824 srtt = QuicTime::Delta::FromMicroseconds(rtt_stats_.initial_rtt_us());
825 }
826 int64 delay_ms = max(kMinHandshakeTimeoutMs,
827 static_cast<int64>(1.5 * srtt.ToMilliseconds()));
825 return QuicTime::Delta::FromMilliseconds( 828 return QuicTime::Delta::FromMilliseconds(
826 delay_ms << consecutive_crypto_retransmission_count_); 829 delay_ms << consecutive_crypto_retransmission_count_);
827 } 830 }
828 831
829 const QuicTime::Delta QuicSentPacketManager::GetTailLossProbeDelay() const { 832 const QuicTime::Delta QuicSentPacketManager::GetTailLossProbeDelay() const {
830 QuicTime::Delta srtt = rtt_stats_.SmoothedRtt(); 833 QuicTime::Delta srtt = rtt_stats_.smoothed_rtt();
834 if (srtt.IsZero()) {
835 srtt = QuicTime::Delta::FromMicroseconds(rtt_stats_.initial_rtt_us());
836 }
831 if (!unacked_packets_.HasMultipleInFlightPackets()) { 837 if (!unacked_packets_.HasMultipleInFlightPackets()) {
832 return QuicTime::Delta::Max( 838 return QuicTime::Delta::Max(
833 srtt.Multiply(2), srtt.Multiply(1.5).Add( 839 srtt.Multiply(2), srtt.Multiply(1.5).Add(
834 QuicTime::Delta::FromMilliseconds(kMinRetransmissionTimeMs / 2))); 840 QuicTime::Delta::FromMilliseconds(kMinRetransmissionTimeMs / 2)));
835 } 841 }
836 return QuicTime::Delta::FromMilliseconds( 842 return QuicTime::Delta::FromMilliseconds(
837 max(kMinTailLossProbeTimeoutMs, 843 max(kMinTailLossProbeTimeoutMs,
838 static_cast<int64>(2 * srtt.ToMilliseconds()))); 844 static_cast<int64>(2 * srtt.ToMilliseconds())));
839 } 845 }
840 846
(...skipping 17 matching lines...) Expand all
858 return QuicTime::Delta::FromMilliseconds(kMaxRetransmissionTimeMs); 864 return QuicTime::Delta::FromMilliseconds(kMaxRetransmissionTimeMs);
859 } 865 }
860 return retransmission_delay; 866 return retransmission_delay;
861 } 867 }
862 868
863 const RttStats* QuicSentPacketManager::GetRttStats() const { 869 const RttStats* QuicSentPacketManager::GetRttStats() const {
864 return &rtt_stats_; 870 return &rtt_stats_;
865 } 871 }
866 872
867 QuicBandwidth QuicSentPacketManager::BandwidthEstimate() const { 873 QuicBandwidth QuicSentPacketManager::BandwidthEstimate() const {
874 // TODO(ianswett): Remove BandwidthEstimate from SendAlgorithmInterface
875 // and implement the logic here.
868 return send_algorithm_->BandwidthEstimate(); 876 return send_algorithm_->BandwidthEstimate();
869 } 877 }
870 878
871 bool QuicSentPacketManager::HasReliableBandwidthEstimate() const { 879 bool QuicSentPacketManager::HasReliableBandwidthEstimate() const {
872 return send_algorithm_->HasReliableBandwidthEstimate(); 880 return send_algorithm_->HasReliableBandwidthEstimate();
873 } 881 }
874 882
875 const QuicSustainedBandwidthRecorder& 883 const QuicSustainedBandwidthRecorder&
876 QuicSentPacketManager::SustainedBandwidthRecorder() const { 884 QuicSentPacketManager::SustainedBandwidthRecorder() const {
877 return sustained_bandwidth_recorder_; 885 return sustained_bandwidth_recorder_;
878 } 886 }
879 887
880 QuicByteCount QuicSentPacketManager::GetCongestionWindow() const { 888 QuicPacketCount QuicSentPacketManager::EstimateMaxPacketsInFlight(
881 return send_algorithm_->GetCongestionWindow(); 889 QuicByteCount max_packet_length) const {
890 return send_algorithm_->GetCongestionWindow() / max_packet_length;
882 } 891 }
883 892
884 QuicByteCount QuicSentPacketManager::GetSlowStartThreshold() const { 893 QuicPacketCount QuicSentPacketManager::GetCongestionWindowInTcpMss() const {
885 return send_algorithm_->GetSlowStartThreshold(); 894 return send_algorithm_->GetCongestionWindow() / kDefaultTCPMSS;
895 }
896
897 QuicPacketCount QuicSentPacketManager::GetSlowStartThresholdInTcpMss() const {
898 return send_algorithm_->GetSlowStartThreshold() / kDefaultTCPMSS;
886 } 899 }
887 900
888 void QuicSentPacketManager::EnablePacing() { 901 void QuicSentPacketManager::EnablePacing() {
889 if (using_pacing_) { 902 if (using_pacing_) {
890 return; 903 return;
891 } 904 }
892 905
893 // Set up a pacing sender with a 1 millisecond alarm granularity, the same as 906 // Set up a pacing sender with a 1 millisecond alarm granularity, the same as
894 // the default granularity of the Linux kernel's FQ qdisc. 907 // the default granularity of the Linux kernel's FQ qdisc.
895 using_pacing_ = true; 908 using_pacing_ = true;
896 send_algorithm_.reset( 909 send_algorithm_.reset(
897 new PacingSender(send_algorithm_.release(), 910 new PacingSender(send_algorithm_.release(),
898 QuicTime::Delta::FromMilliseconds(1), 911 QuicTime::Delta::FromMilliseconds(1),
899 kInitialUnpacedBurst)); 912 kInitialUnpacedBurst));
900 } 913 }
901 914
902 } // namespace net 915 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_sent_packet_manager.h ('k') | net/quic/quic_sent_packet_manager_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698