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

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

Issue 2322233004: Landing Recent QUIC changes until Sun Sep 4 03:41:00 (Closed)
Patch Set: Remove simulation files from the build. Created 4 years, 3 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
« no previous file with comments | « net/quic/core/quic_protocol_test.cc ('k') | net/quic/core/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/core/quic_sent_packet_manager.h" 5 #include "net/quic/core/quic_sent_packet_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 use_new_rto_ = true; 141 use_new_rto_ = true;
142 } 142 }
143 if (config.HasReceivedConnectionOptions() && 143 if (config.HasReceivedConnectionOptions() &&
144 ContainsQuicTag(config.ReceivedConnectionOptions(), kTIME)) { 144 ContainsQuicTag(config.ReceivedConnectionOptions(), kTIME)) {
145 general_loss_algorithm_.SetLossDetectionType(kTime); 145 general_loss_algorithm_.SetLossDetectionType(kTime);
146 } 146 }
147 if (config.HasReceivedConnectionOptions() && 147 if (config.HasReceivedConnectionOptions() &&
148 ContainsQuicTag(config.ReceivedConnectionOptions(), kATIM)) { 148 ContainsQuicTag(config.ReceivedConnectionOptions(), kATIM)) {
149 general_loss_algorithm_.SetLossDetectionType(kAdaptiveTime); 149 general_loss_algorithm_.SetLossDetectionType(kAdaptiveTime);
150 } 150 }
151 if (FLAGS_quic_loss_recovery_use_largest_acked && 151 if (config.HasClientSentConnectionOption(kUNDO, perspective_)) {
152 config.HasClientSentConnectionOption(kUNDO, perspective_)) {
153 undo_pending_retransmits_ = true; 152 undo_pending_retransmits_ = true;
154 } 153 }
155 send_algorithm_->SetFromConfig(config, perspective_); 154 send_algorithm_->SetFromConfig(config, perspective_);
156 155
157 if (network_change_visitor_ != nullptr) { 156 if (network_change_visitor_ != nullptr) {
158 network_change_visitor_->OnCongestionChange(); 157 network_change_visitor_->OnCongestionChange();
159 } 158 }
160 } 159 }
161 160
162 void QuicSentPacketManager::ResumeConnectionState( 161 void QuicSentPacketManager::ResumeConnectionState(
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 (!ack_frame.missing && !ack_frame.packets.Contains(packet_number))) { 297 (!ack_frame.missing && !ack_frame.packets.Contains(packet_number))) {
299 // Packet is still missing. 298 // Packet is still missing.
300 continue; 299 continue;
301 } 300 }
302 // Packet was acked, so remove it from our unacked packet list. 301 // Packet was acked, so remove it from our unacked packet list.
303 DVLOG(1) << ENDPOINT << "Got an ack for packet " << packet_number; 302 DVLOG(1) << ENDPOINT << "Got an ack for packet " << packet_number;
304 // If data is associated with the most recent transmission of this 303 // If data is associated with the most recent transmission of this
305 // packet, then inform the caller. 304 // packet, then inform the caller.
306 if (it->in_flight) { 305 if (it->in_flight) {
307 packets_acked_.push_back(std::make_pair(packet_number, it->bytes_sent)); 306 packets_acked_.push_back(std::make_pair(packet_number, it->bytes_sent));
308 } else if (FLAGS_quic_loss_recovery_use_largest_acked && 307 } else if (!it->is_unackable) {
309 !it->is_unackable) { 308 // Packets are marked unackable after they've been acked once.
310 largest_newly_acked_ = packet_number; 309 largest_newly_acked_ = packet_number;
311 } 310 }
312 MarkPacketHandled(packet_number, &(*it), ack_delay_time); 311 MarkPacketHandled(packet_number, &(*it), ack_delay_time);
313 } 312 }
314 } 313 }
315 314
316 void QuicSentPacketManager::RetransmitUnackedPackets( 315 void QuicSentPacketManager::RetransmitUnackedPackets(
317 TransmissionType retransmission_type) { 316 TransmissionType retransmission_type) {
318 DCHECK(retransmission_type == ALL_UNACKED_RETRANSMISSION || 317 DCHECK(retransmission_type == ALL_UNACKED_RETRANSMISSION ||
319 retransmission_type == ALL_INITIAL_RETRANSMISSION); 318 retransmission_type == ALL_INITIAL_RETRANSMISSION);
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
507 } 506 }
508 } 507 }
509 508
510 if (network_change_visitor_ != nullptr && 509 if (network_change_visitor_ != nullptr &&
511 info->bytes_sent > largest_mtu_acked_) { 510 info->bytes_sent > largest_mtu_acked_) {
512 largest_mtu_acked_ = info->bytes_sent; 511 largest_mtu_acked_ = info->bytes_sent;
513 network_change_visitor_->OnPathMtuIncreased(largest_mtu_acked_); 512 network_change_visitor_->OnPathMtuIncreased(largest_mtu_acked_);
514 } 513 }
515 unacked_packets_.RemoveFromInFlight(info); 514 unacked_packets_.RemoveFromInFlight(info);
516 unacked_packets_.RemoveRetransmittability(info); 515 unacked_packets_.RemoveRetransmittability(info);
517 if (FLAGS_quic_loss_recovery_use_largest_acked) { 516 info->is_unackable = true;
518 info->is_unackable = true;
519 }
520 } 517 }
521 518
522 bool QuicSentPacketManager::HasUnackedPackets() const { 519 bool QuicSentPacketManager::HasUnackedPackets() const {
523 return unacked_packets_.HasUnackedPackets(); 520 return unacked_packets_.HasUnackedPackets();
524 } 521 }
525 522
526 QuicPacketNumber QuicSentPacketManager::GetLeastUnacked(QuicPathId) const { 523 QuicPacketNumber QuicSentPacketManager::GetLeastUnacked(QuicPathId) const {
527 return unacked_packets_.GetLeastUnacked(); 524 return unacked_packets_.GetLeastUnacked();
528 } 525 }
529 526
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
692 } 689 }
693 if (consecutive_tlp_count_ < max_tail_loss_probes_) { 690 if (consecutive_tlp_count_ < max_tail_loss_probes_) {
694 if (unacked_packets_.HasUnackedRetransmittableFrames()) { 691 if (unacked_packets_.HasUnackedRetransmittableFrames()) {
695 return TLP_MODE; 692 return TLP_MODE;
696 } 693 }
697 } 694 }
698 return RTO_MODE; 695 return RTO_MODE;
699 } 696 }
700 697
701 void QuicSentPacketManager::InvokeLossDetection(QuicTime time) { 698 void QuicSentPacketManager::InvokeLossDetection(QuicTime time) {
702 if (FLAGS_quic_loss_recovery_use_largest_acked && !packets_acked_.empty()) { 699 if (!packets_acked_.empty()) {
703 DCHECK_LE(packets_acked_.front().first, packets_acked_.back().first); 700 DCHECK_LE(packets_acked_.front().first, packets_acked_.back().first);
704 largest_newly_acked_ = packets_acked_.back().first; 701 largest_newly_acked_ = packets_acked_.back().first;
705 } 702 }
706 loss_algorithm_->DetectLosses(unacked_packets_, time, rtt_stats_, 703 loss_algorithm_->DetectLosses(unacked_packets_, time, rtt_stats_,
707 largest_newly_acked_, &packets_lost_); 704 largest_newly_acked_, &packets_lost_);
708 for (const pair<QuicPacketNumber, QuicByteCount>& pair : packets_lost_) { 705 for (const auto& pair : packets_lost_) {
709 ++stats_->packets_lost; 706 ++stats_->packets_lost;
710 if (debug_delegate_ != nullptr) { 707 if (debug_delegate_ != nullptr) {
711 debug_delegate_->OnPacketLoss(pair.first, LOSS_RETRANSMISSION, time); 708 debug_delegate_->OnPacketLoss(pair.first, LOSS_RETRANSMISSION, time);
712 } 709 }
713 710
714 // TODO(ianswett): This could be optimized. 711 // TODO(ianswett): This could be optimized.
715 if (unacked_packets_.HasRetransmittableFrames(pair.first)) { 712 if (unacked_packets_.HasRetransmittableFrames(pair.first)) {
716 MarkForRetransmission(pair.first, LOSS_RETRANSMISSION); 713 MarkForRetransmission(pair.first, LOSS_RETRANSMISSION);
717 } else { 714 } else {
718 // Since we will not retransmit this, we need to remove it from 715 // Since we will not retransmit this, we need to remove it from
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
997 994
998 void QuicSentPacketManager::RemoveObsoletePackets() { 995 void QuicSentPacketManager::RemoveObsoletePackets() {
999 unacked_packets_.RemoveObsoletePackets(); 996 unacked_packets_.RemoveObsoletePackets();
1000 } 997 }
1001 998
1002 void QuicSentPacketManager::OnApplicationLimited() { 999 void QuicSentPacketManager::OnApplicationLimited() {
1003 send_algorithm_->OnApplicationLimited(unacked_packets_.bytes_in_flight()); 1000 send_algorithm_->OnApplicationLimited(unacked_packets_.bytes_in_flight());
1004 } 1001 }
1005 1002
1006 } // namespace net 1003 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_protocol_test.cc ('k') | net/quic/core/quic_sent_packet_manager_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698