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 "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/stl_util.h" | 8 #include "base/stl_util.h" |
9 #include "net/quic/congestion_control/pacing_sender.h" | 9 #include "net/quic/congestion_control/pacing_sender.h" |
10 #include "net/quic/quic_ack_notifier_manager.h" | 10 #include "net/quic/quic_ack_notifier_manager.h" |
(...skipping 583 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
594 } | 594 } |
595 } | 595 } |
596 } | 596 } |
597 | 597 |
598 QuicTime QuicSentPacketManager::OnAbandonFecTimeout() { | 598 QuicTime QuicSentPacketManager::OnAbandonFecTimeout() { |
599 // Abandon all the FEC packets older than the current RTO, then reschedule | 599 // Abandon all the FEC packets older than the current RTO, then reschedule |
600 // the alarm if there are more pending fec packets. | 600 // the alarm if there are more pending fec packets. |
601 QuicTime::Delta retransmission_delay = GetRetransmissionDelay(); | 601 QuicTime::Delta retransmission_delay = GetRetransmissionDelay(); |
602 QuicTime max_send_time = | 602 QuicTime max_send_time = |
603 clock_->ApproximateNow().Subtract(retransmission_delay); | 603 clock_->ApproximateNow().Subtract(retransmission_delay); |
604 while (HasUnackedFecPackets()) { | 604 while (!unacked_fec_packets_.empty()) { |
605 QuicPacketSequenceNumber oldest_unacked_fec = GetLeastUnackedFecPacket(); | 605 UnackedFecPacketMap::iterator it = unacked_fec_packets_.begin(); |
606 QuicTime fec_sent_time = GetFecSentTime(oldest_unacked_fec); | 606 QuicTime fec_sent_time = it->second; |
607 if (fec_sent_time > max_send_time) { | 607 if (fec_sent_time > max_send_time) { |
608 return fec_sent_time.Add(retransmission_delay); | 608 return fec_sent_time.Add(retransmission_delay); |
609 } | 609 } |
610 DiscardFecPacket(oldest_unacked_fec); | 610 OnPacketAbandoned(it->first); |
611 OnPacketAbandoned(oldest_unacked_fec); | 611 unacked_fec_packets_.erase(it++); |
612 } | 612 } |
613 | 613 |
614 return QuicTime::Zero(); | 614 return QuicTime::Zero(); |
615 } | 615 } |
616 | 616 |
617 void QuicSentPacketManager::OnPacketAbandoned( | 617 void QuicSentPacketManager::OnPacketAbandoned( |
618 QuicPacketSequenceNumber sequence_number) { | 618 QuicPacketSequenceNumber sequence_number) { |
619 SequenceNumberSet::iterator it = pending_packets_.find(sequence_number); | 619 SequenceNumberSet::iterator it = pending_packets_.find(sequence_number); |
620 if (it != pending_packets_.end()) { | 620 if (it != pending_packets_.end()) { |
621 DCHECK(ContainsKey(packet_history_map_, sequence_number)); | 621 DCHECK(ContainsKey(packet_history_map_, sequence_number)); |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
744 | 744 |
745 QuicTime::Delta QuicSentPacketManager::TimeUntilSend( | 745 QuicTime::Delta QuicSentPacketManager::TimeUntilSend( |
746 QuicTime now, | 746 QuicTime now, |
747 TransmissionType transmission_type, | 747 TransmissionType transmission_type, |
748 HasRetransmittableData retransmittable, | 748 HasRetransmittableData retransmittable, |
749 IsHandshake handshake) { | 749 IsHandshake handshake) { |
750 return send_algorithm_->TimeUntilSend(now, transmission_type, retransmittable, | 750 return send_algorithm_->TimeUntilSend(now, transmission_type, retransmittable, |
751 handshake); | 751 handshake); |
752 } | 752 } |
753 | 753 |
754 const QuicTime::Delta QuicSentPacketManager::DefaultRetransmissionTime() { | |
755 return QuicTime::Delta::FromMilliseconds(kDefaultRetransmissionTimeMs); | |
756 } | |
757 | |
758 // Ensures that the Delayed Ack timer is always set to a value lesser | 754 // Ensures that the Delayed Ack timer is always set to a value lesser |
759 // than the retransmission timer's minimum value (MinRTO). We want the | 755 // than the retransmission timer's minimum value (MinRTO). We want the |
760 // delayed ack to get back to the QUIC peer before the sender's | 756 // delayed ack to get back to the QUIC peer before the sender's |
761 // retransmission timer triggers. Since we do not know the | 757 // retransmission timer triggers. Since we do not know the |
762 // reverse-path one-way delay, we assume equal delays for forward and | 758 // reverse-path one-way delay, we assume equal delays for forward and |
763 // reverse paths, and ensure that the timer is set to less than half | 759 // reverse paths, and ensure that the timer is set to less than half |
764 // of the MinRTO. | 760 // of the MinRTO. |
765 // There may be a value in making this delay adaptive with the help of | 761 // There may be a value in making this delay adaptive with the help of |
766 // the sender and a signaling mechanism -- if the sender uses a | 762 // the sender and a signaling mechanism -- if the sender uses a |
767 // different MinRTO, we may get spurious retransmissions. May not have | 763 // different MinRTO, we may get spurious retransmissions. May not have |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
853 return; | 849 return; |
854 } | 850 } |
855 | 851 |
856 using_pacing_ = true; | 852 using_pacing_ = true; |
857 send_algorithm_.reset( | 853 send_algorithm_.reset( |
858 new PacingSender(send_algorithm_.release(), | 854 new PacingSender(send_algorithm_.release(), |
859 QuicTime::Delta::FromMicroseconds(1))); | 855 QuicTime::Delta::FromMicroseconds(1))); |
860 } | 856 } |
861 | 857 |
862 } // namespace net | 858 } // namespace net |
OLD | NEW |