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

Side by Side Diff: net/quic/congestion_control/pacing_sender.cc

Issue 266243004: Clang format slam. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/congestion_control/pacing_sender.h" 5 #include "net/quic/congestion_control/pacing_sender.h"
6 6
7 namespace net { 7 namespace net {
8 8
9 PacingSender::PacingSender(SendAlgorithmInterface* sender, 9 PacingSender::PacingSender(SendAlgorithmInterface* sender,
10 QuicTime::Delta alarm_granularity) 10 QuicTime::Delta alarm_granularity)
11 : sender_(sender), 11 : sender_(sender),
12 alarm_granularity_(alarm_granularity), 12 alarm_granularity_(alarm_granularity),
13 next_packet_send_time_(QuicTime::Zero()), 13 next_packet_send_time_(QuicTime::Zero()),
14 was_last_send_delayed_(false), 14 was_last_send_delayed_(false),
15 updated_rtt_(false) { 15 updated_rtt_(false) {
16 } 16 }
17 17
18 PacingSender::~PacingSender() {} 18 PacingSender::~PacingSender() {
19 }
19 20
20 void PacingSender::SetFromConfig(const QuicConfig& config, bool is_server) { 21 void PacingSender::SetFromConfig(const QuicConfig& config, bool is_server) {
21 sender_->SetFromConfig(config, is_server); 22 sender_->SetFromConfig(config, is_server);
22 } 23 }
23 24
24 void PacingSender::OnIncomingQuicCongestionFeedbackFrame( 25 void PacingSender::OnIncomingQuicCongestionFeedbackFrame(
25 const QuicCongestionFeedbackFrame& feedback, 26 const QuicCongestionFeedbackFrame& feedback,
26 QuicTime feedback_receive_time) { 27 QuicTime feedback_receive_time) {
27 sender_->OnIncomingQuicCongestionFeedbackFrame( 28 sender_->OnIncomingQuicCongestionFeedbackFrame(feedback,
28 feedback, feedback_receive_time); 29 feedback_receive_time);
29 } 30 }
30 31
31 void PacingSender::OnPacketAcked( 32 void PacingSender::OnPacketAcked(QuicPacketSequenceNumber acked_sequence_number,
32 QuicPacketSequenceNumber acked_sequence_number, 33 QuicByteCount acked_bytes) {
33 QuicByteCount acked_bytes) {
34 sender_->OnPacketAcked(acked_sequence_number, acked_bytes); 34 sender_->OnPacketAcked(acked_sequence_number, acked_bytes);
35 } 35 }
36 36
37 void PacingSender::OnPacketLost(QuicPacketSequenceNumber sequence_number, 37 void PacingSender::OnPacketLost(QuicPacketSequenceNumber sequence_number,
38 QuicTime ack_receive_time) { 38 QuicTime ack_receive_time) {
39 sender_->OnPacketLost(sequence_number, ack_receive_time); 39 sender_->OnPacketLost(sequence_number, ack_receive_time);
40 } 40 }
41 41
42 bool PacingSender::OnPacketSent( 42 bool PacingSender::OnPacketSent(
43 QuicTime sent_time, 43 QuicTime sent_time,
44 QuicPacketSequenceNumber sequence_number, 44 QuicPacketSequenceNumber sequence_number,
45 QuicByteCount bytes, 45 QuicByteCount bytes,
46 HasRetransmittableData has_retransmittable_data) { 46 HasRetransmittableData has_retransmittable_data) {
47 // Only pace data packets once we have an updated RTT. 47 // Only pace data packets once we have an updated RTT.
48 if (has_retransmittable_data == HAS_RETRANSMITTABLE_DATA && updated_rtt_) { 48 if (has_retransmittable_data == HAS_RETRANSMITTABLE_DATA && updated_rtt_) {
49 // The next packet should be sent as soon as the current packets has 49 // The next packet should be sent as soon as the current packets has
50 // been transferred. We pace at twice the rate of the underlying 50 // been transferred. We pace at twice the rate of the underlying
51 // sender's bandwidth estimate to help ensure that pacing doesn't become 51 // sender's bandwidth estimate to help ensure that pacing doesn't become
52 // a bottleneck. 52 // a bottleneck.
53 const float kPacingAggression = 2; 53 const float kPacingAggression = 2;
54 QuicTime::Delta delay = 54 QuicTime::Delta delay =
55 BandwidthEstimate().Scale(kPacingAggression).TransferTime(bytes); 55 BandwidthEstimate().Scale(kPacingAggression).TransferTime(bytes);
56 next_packet_send_time_ = next_packet_send_time_.Add(delay); 56 next_packet_send_time_ = next_packet_send_time_.Add(delay);
57 } 57 }
58 return sender_->OnPacketSent(sent_time, sequence_number, bytes, 58 return sender_->OnPacketSent(
59 has_retransmittable_data); 59 sent_time, sequence_number, bytes, has_retransmittable_data);
60 } 60 }
61 61
62 void PacingSender::OnRetransmissionTimeout(bool packets_retransmitted) { 62 void PacingSender::OnRetransmissionTimeout(bool packets_retransmitted) {
63 sender_->OnRetransmissionTimeout(packets_retransmitted); 63 sender_->OnRetransmissionTimeout(packets_retransmitted);
64 } 64 }
65 65
66 void PacingSender::OnPacketAbandoned(QuicPacketSequenceNumber sequence_number, 66 void PacingSender::OnPacketAbandoned(QuicPacketSequenceNumber sequence_number,
67 QuicByteCount abandoned_bytes) { 67 QuicByteCount abandoned_bytes) {
68 sender_->OnPacketAbandoned(sequence_number, abandoned_bytes); 68 sender_->OnPacketAbandoned(sequence_number, abandoned_bytes);
69 } 69 }
70 70
71 QuicTime::Delta PacingSender::TimeUntilSend( 71 QuicTime::Delta PacingSender::TimeUntilSend(
72 QuicTime now, 72 QuicTime now,
73 HasRetransmittableData has_retransmittable_data) { 73 HasRetransmittableData has_retransmittable_data) {
74 QuicTime::Delta time_until_send = 74 QuicTime::Delta time_until_send =
75 sender_->TimeUntilSend(now, has_retransmittable_data); 75 sender_->TimeUntilSend(now, has_retransmittable_data);
76 if (!updated_rtt_) { 76 if (!updated_rtt_) {
77 // Don't pace if we don't have an updated RTT estimate. 77 // Don't pace if we don't have an updated RTT estimate.
78 return time_until_send; 78 return time_until_send;
79 } 79 }
80 80
81 if (!time_until_send.IsZero()) { 81 if (!time_until_send.IsZero()) {
82 DCHECK(time_until_send.IsInfinite()); 82 DCHECK(time_until_send.IsInfinite());
83 // The underlying sender prevents sending. 83 // The underlying sender prevents sending.
(...skipping 11 matching lines...) Expand all
95 now > next_packet_send_time_.Add(alarm_granularity_))) { 95 now > next_packet_send_time_.Add(alarm_granularity_))) {
96 // An alarm did not go off late, instead the application is "slow" 96 // An alarm did not go off late, instead the application is "slow"
97 // delivering data. In this case, we restrict the amount of lost time 97 // delivering data. In this case, we restrict the amount of lost time
98 // that we can make up for. 98 // that we can make up for.
99 next_packet_send_time_ = now.Subtract(alarm_granularity_); 99 next_packet_send_time_ = now.Subtract(alarm_granularity_);
100 } 100 }
101 101
102 // If the end of the epoch is far enough in the future, delay the send. 102 // If the end of the epoch is far enough in the future, delay the send.
103 if (next_packet_send_time_ > now.Add(alarm_granularity_)) { 103 if (next_packet_send_time_ > now.Add(alarm_granularity_)) {
104 was_last_send_delayed_ = true; 104 was_last_send_delayed_ = true;
105 DVLOG(1) << "Delaying packet: " 105 DVLOG(1) << "Delaying packet: " << next_packet_send_time_.Subtract(now)
106 << next_packet_send_time_.Subtract(now).ToMicroseconds(); 106 .ToMicroseconds();
107 return next_packet_send_time_.Subtract(now); 107 return next_packet_send_time_.Subtract(now);
108 } 108 }
109 109
110 // Sent it immediately. The epoch end will be adjusted in OnPacketSent. 110 // Sent it immediately. The epoch end will be adjusted in OnPacketSent.
111 was_last_send_delayed_ = false; 111 was_last_send_delayed_ = false;
112 DVLOG(1) << "Sending packet now"; 112 DVLOG(1) << "Sending packet now";
113 return QuicTime::Delta::Zero(); 113 return QuicTime::Delta::Zero();
114 } 114 }
115 115
116 QuicBandwidth PacingSender::BandwidthEstimate() const { 116 QuicBandwidth PacingSender::BandwidthEstimate() const {
117 return sender_->BandwidthEstimate(); 117 return sender_->BandwidthEstimate();
118 } 118 }
119 119
120 void PacingSender::OnRttUpdated(QuicPacketSequenceNumber largest_observed) { 120 void PacingSender::OnRttUpdated(QuicPacketSequenceNumber largest_observed) {
121 updated_rtt_= true; 121 updated_rtt_ = true;
122 sender_->OnRttUpdated(largest_observed); 122 sender_->OnRttUpdated(largest_observed);
123 } 123 }
124 124
125 QuicTime::Delta PacingSender::RetransmissionDelay() const { 125 QuicTime::Delta PacingSender::RetransmissionDelay() const {
126 return sender_->RetransmissionDelay(); 126 return sender_->RetransmissionDelay();
127 } 127 }
128 128
129 QuicByteCount PacingSender::GetCongestionWindow() const { 129 QuicByteCount PacingSender::GetCongestionWindow() const {
130 return sender_->GetCongestionWindow(); 130 return sender_->GetCongestionWindow();
131 } 131 }
132 132
133 } // namespace net 133 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698