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

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

Issue 99583006: Minor change of QUIC's RTO behavior to not change the congestion window (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years 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
« no previous file with comments | « net/quic/quic_connection_test.cc ('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 "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 549 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 has_retransmittable_data)) { 560 has_retransmittable_data)) {
561 return; 561 return;
562 } 562 }
563 packet_history_map_[sequence_number] = new SendAlgorithmInterface::SentPacket( 563 packet_history_map_[sequence_number] = new SendAlgorithmInterface::SentPacket(
564 bytes, sent_time, has_retransmittable_data); 564 bytes, sent_time, has_retransmittable_data);
565 pending_packets_.insert(sequence_number); 565 pending_packets_.insert(sequence_number);
566 CleanupPacketHistory(); 566 CleanupPacketHistory();
567 } 567 }
568 568
569 void QuicSentPacketManager::OnRetransmissionTimeout() { 569 void QuicSentPacketManager::OnRetransmissionTimeout() {
570 ++consecutive_rto_count_;
571 send_algorithm_->OnRetransmissionTimeout();
572 // Abandon all pending packets to ensure the congestion window 570 // Abandon all pending packets to ensure the congestion window
573 // opens up before we attempt to retransmit packets. 571 // opens up before we attempt to retransmit packets.
574 for (SequenceNumberSet::const_iterator it = pending_packets_.begin(); 572 for (SequenceNumberSet::const_iterator it = pending_packets_.begin();
575 it != pending_packets_.end(); ++it) { 573 it != pending_packets_.end(); ++it) {
576 QuicPacketSequenceNumber sequence_number = *it; 574 QuicPacketSequenceNumber sequence_number = *it;
577 DCHECK(ContainsKey(packet_history_map_, sequence_number)); 575 DCHECK(ContainsKey(packet_history_map_, sequence_number));
578 send_algorithm_->OnPacketAbandoned( 576 send_algorithm_->OnPacketAbandoned(
579 sequence_number, packet_history_map_[sequence_number]->bytes_sent()); 577 sequence_number, packet_history_map_[sequence_number]->bytes_sent());
580 } 578 }
581 pending_packets_.clear(); 579 pending_packets_.clear();
582 580
583 // Attempt to send all the unacked packets when the RTO fires, let the 581 // Attempt to send all the unacked packets when the RTO fires, let the
584 // congestion manager decide how many to send immediately and the remaining 582 // congestion manager decide how many to send immediately and the remaining
585 // packets will be queued for future sending. 583 // packets will be queued for future sending.
586 DVLOG(1) << "OnRetransmissionTimeout() fired with " 584 DVLOG(1) << "OnRetransmissionTimeout() fired with "
587 << unacked_packets_.size() << " unacked packets."; 585 << unacked_packets_.size() << " unacked packets.";
588 586
589 // Retransmit any packet with retransmittable frames. 587 // Retransmit any packet with retransmittable frames.
588 bool packets_retransmitted = false;
590 for (UnackedPacketMap::const_iterator it = unacked_packets_.begin(); 589 for (UnackedPacketMap::const_iterator it = unacked_packets_.begin();
591 it != unacked_packets_.end(); ++it) { 590 it != unacked_packets_.end(); ++it) {
592 if (it->second.retransmittable_frames != NULL) { 591 if (it->second.retransmittable_frames != NULL) {
592 packets_retransmitted = true;
593 MarkForRetransmission(it->first, RTO_RETRANSMISSION); 593 MarkForRetransmission(it->first, RTO_RETRANSMISSION);
594 } 594 }
595 } 595 }
596
597 // Only inform the sent packet manager of an RTO if data was retransmitted.
598 if (packets_retransmitted) {
599 ++consecutive_rto_count_;
600 send_algorithm_->OnRetransmissionTimeout();
601 }
596 } 602 }
597 603
598 QuicTime QuicSentPacketManager::OnAbandonFecTimeout() { 604 QuicTime QuicSentPacketManager::OnAbandonFecTimeout() {
599 // Abandon all the FEC packets older than the current RTO, then reschedule 605 // Abandon all the FEC packets older than the current RTO, then reschedule
600 // the alarm if there are more pending fec packets. 606 // the alarm if there are more pending fec packets.
601 QuicTime::Delta retransmission_delay = GetRetransmissionDelay(); 607 QuicTime::Delta retransmission_delay = GetRetransmissionDelay();
602 QuicTime max_send_time = 608 QuicTime max_send_time =
603 clock_->ApproximateNow().Subtract(retransmission_delay); 609 clock_->ApproximateNow().Subtract(retransmission_delay);
604 while (!unacked_fec_packets_.empty()) { 610 while (!unacked_fec_packets_.empty()) {
605 UnackedFecPacketMap::iterator it = unacked_fec_packets_.begin(); 611 UnackedFecPacketMap::iterator it = unacked_fec_packets_.begin();
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
849 return; 855 return;
850 } 856 }
851 857
852 using_pacing_ = true; 858 using_pacing_ = true;
853 send_algorithm_.reset( 859 send_algorithm_.reset(
854 new PacingSender(send_algorithm_.release(), 860 new PacingSender(send_algorithm_.release(),
855 QuicTime::Delta::FromMicroseconds(1))); 861 QuicTime::Delta::FromMicroseconds(1)));
856 } 862 }
857 863
858 } // namespace net 864 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_connection_test.cc ('k') | net/quic/quic_sent_packet_manager_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698