| 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 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 438 HasRetransmittableData has_retransmittable_data) { | 438 HasRetransmittableData has_retransmittable_data) { |
| 439 DCHECK_LT(0u, sequence_number); | 439 DCHECK_LT(0u, sequence_number); |
| 440 LOG_IF(DFATAL, bytes == 0) << "Cannot send empty packets."; | 440 LOG_IF(DFATAL, bytes == 0) << "Cannot send empty packets."; |
| 441 // In rare circumstances, the packet could be serialized, sent, and then acked | 441 // In rare circumstances, the packet could be serialized, sent, and then acked |
| 442 // before OnPacketSent is called. | 442 // before OnPacketSent is called. |
| 443 if (!unacked_packets_.IsUnacked(sequence_number)) { | 443 if (!unacked_packets_.IsUnacked(sequence_number)) { |
| 444 return false; | 444 return false; |
| 445 } | 445 } |
| 446 | 446 |
| 447 // Only track packets as pending that the send algorithm wants us to track. | 447 // Only track packets as pending that the send algorithm wants us to track. |
| 448 if (!send_algorithm_->OnPacketSent(sent_time, | 448 const bool pending = |
| 449 unacked_packets_.bytes_in_flight(), | 449 send_algorithm_->OnPacketSent(sent_time, |
| 450 sequence_number, | 450 unacked_packets_.bytes_in_flight(), |
| 451 bytes, | 451 sequence_number, |
| 452 has_retransmittable_data)) { | 452 bytes, |
| 453 unacked_packets_.SetSent(sequence_number, sent_time, bytes, false); | 453 has_retransmittable_data); |
| 454 // Do not reset the retransmission timer, since the packet isn't tracked. | 454 unacked_packets_.SetSent(sequence_number, sent_time, bytes, pending); |
| 455 return false; | |
| 456 } | |
| 457 | 455 |
| 458 const bool set_retransmission_timer = !unacked_packets_.HasPendingPackets(); | 456 // Reset the retransmission timer anytime a pending packet is sent. |
| 459 | 457 return pending; |
| 460 unacked_packets_.SetSent(sequence_number, sent_time, bytes, true); | |
| 461 | |
| 462 // Reset the retransmission timer anytime a packet is sent in tail loss probe | |
| 463 // mode or before the crypto handshake has completed. | |
| 464 return set_retransmission_timer || GetRetransmissionMode() != RTO_MODE; | |
| 465 } | 458 } |
| 466 | 459 |
| 467 void QuicSentPacketManager::OnRetransmissionTimeout() { | 460 void QuicSentPacketManager::OnRetransmissionTimeout() { |
| 468 DCHECK(unacked_packets_.HasPendingPackets()); | 461 DCHECK(unacked_packets_.HasPendingPackets()); |
| 469 // Handshake retransmission, timer based loss detection, TLP, and RTO are | 462 // Handshake retransmission, timer based loss detection, TLP, and RTO are |
| 470 // implemented with a single alarm. The handshake alarm is set when the | 463 // implemented with a single alarm. The handshake alarm is set when the |
| 471 // handshake has not completed, the loss alarm is set when the loss detection | 464 // handshake has not completed, the loss alarm is set when the loss detection |
| 472 // algorithm says to, and the TLP and RTO alarms are set after that. | 465 // algorithm says to, and the TLP and RTO alarms are set after that. |
| 473 // The TLP alarm is always set to run for under an RTO. | 466 // The TLP alarm is always set to run for under an RTO. |
| 474 switch (GetRetransmissionMode()) { | 467 switch (GetRetransmissionMode()) { |
| (...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 770 return; | 763 return; |
| 771 } | 764 } |
| 772 | 765 |
| 773 using_pacing_ = true; | 766 using_pacing_ = true; |
| 774 send_algorithm_.reset( | 767 send_algorithm_.reset( |
| 775 new PacingSender(send_algorithm_.release(), | 768 new PacingSender(send_algorithm_.release(), |
| 776 QuicTime::Delta::FromMicroseconds(1))); | 769 QuicTime::Delta::FromMicroseconds(1))); |
| 777 } | 770 } |
| 778 | 771 |
| 779 } // namespace net | 772 } // namespace net |
| OLD | NEW |