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

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

Issue 304293009: Cleanup in QuicConnection to always cancel the send alarm when CanWrite (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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
« no previous file with comments | « no previous file | net/quic/quic_connection_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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_connection.h" 5 #include "net/quic/quic_connection.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 #include <sys/types.h> 8 #include <sys/types.h>
9 #include <algorithm> 9 #include <algorithm>
10 #include <iterator> 10 #include <iterator>
(...skipping 931 matching lines...) Expand 10 before | Expand all | Expand 10 after
942 } 942 }
943 943
944 void QuicConnection::MaybeSendInResponseToPacket() { 944 void QuicConnection::MaybeSendInResponseToPacket() {
945 if (!connected_) { 945 if (!connected_) {
946 return; 946 return;
947 } 947 }
948 ScopedPacketBundler bundler(this, ack_queued_ ? SEND_ACK : NO_ACK); 948 ScopedPacketBundler bundler(this, ack_queued_ ? SEND_ACK : NO_ACK);
949 949
950 // Now that we have received an ack, we might be able to send packets which 950 // Now that we have received an ack, we might be able to send packets which
951 // are queued locally, or drain streams which are blocked. 951 // are queued locally, or drain streams which are blocked.
952 QuicTime::Delta delay = sent_packet_manager_.TimeUntilSend( 952 if (CanWrite(NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA)) {
953 time_of_last_received_packet_, NOT_RETRANSMISSION, 953 OnCanWrite();
954 HAS_RETRANSMITTABLE_DATA);
955 if (delay.IsZero()) {
956 send_alarm_->Cancel();
957 WriteIfNotBlocked();
958 } else if (!delay.IsInfinite()) {
959 send_alarm_->Cancel();
960 send_alarm_->Set(time_of_last_received_packet_.Add(delay));
961 } 954 }
962 } 955 }
963 956
964 void QuicConnection::SendVersionNegotiationPacket() { 957 void QuicConnection::SendVersionNegotiationPacket() {
965 // TODO(alyssar): implement zero server state negotiation. 958 // TODO(alyssar): implement zero server state negotiation.
966 pending_version_negotiation_packet_ = true; 959 pending_version_negotiation_packet_ = true;
967 if (writer_->IsWriteBlocked()) { 960 if (writer_->IsWriteBlocked()) {
968 visitor_->OnWriteBlocked(); 961 visitor_->OnWriteBlocked();
969 return; 962 return;
970 } 963 }
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
1291 return CanWrite(transmission_type, retransmittable); 1284 return CanWrite(transmission_type, retransmittable);
1292 } 1285 }
1293 1286
1294 bool QuicConnection::CanWrite(TransmissionType transmission_type, 1287 bool QuicConnection::CanWrite(TransmissionType transmission_type,
1295 HasRetransmittableData retransmittable) { 1288 HasRetransmittableData retransmittable) {
1296 if (writer_->IsWriteBlocked()) { 1289 if (writer_->IsWriteBlocked()) {
1297 visitor_->OnWriteBlocked(); 1290 visitor_->OnWriteBlocked();
1298 return false; 1291 return false;
1299 } 1292 }
1300 1293
1301 // TODO(rch): consider removing this check so that if an ACK comes in 1294 send_alarm_->Cancel();
1302 // before the alarm goes it, we might be able send out a packet.
1303 // This check assumes that if the send alarm is set, it applies equally to all
1304 // types of transmissions.
1305 if (send_alarm_->IsSet()) {
1306 DVLOG(1) << "Send alarm set. Not sending.";
1307 return false;
1308 }
1309
1310 QuicTime now = clock_->Now(); 1295 QuicTime now = clock_->Now();
1311 QuicTime::Delta delay = sent_packet_manager_.TimeUntilSend( 1296 QuicTime::Delta delay = sent_packet_manager_.TimeUntilSend(
1312 now, transmission_type, retransmittable); 1297 now, transmission_type, retransmittable);
1313 if (delay.IsInfinite()) { 1298 if (delay.IsInfinite()) {
1314 return false; 1299 return false;
1315 } 1300 }
1316 1301
1317 // If the scheduler requires a delay, then we can not send this packet now. 1302 // If the scheduler requires a delay, then we can not send this packet now.
1318 if (!delay.IsZero()) { 1303 if (!delay.IsZero()) {
1319 send_alarm_->Cancel();
1320 send_alarm_->Set(now.Add(delay)); 1304 send_alarm_->Set(now.Add(delay));
1321 DVLOG(1) << "Delaying sending."; 1305 DVLOG(1) << "Delaying sending.";
1322 return false; 1306 return false;
1323 } 1307 }
1324 return true; 1308 return true;
1325 } 1309 }
1326 1310
1327 bool QuicConnection::WritePacket(QueuedPacket packet) { 1311 bool QuicConnection::WritePacket(QueuedPacket packet) {
1328 QuicPacketSequenceNumber sequence_number = packet.sequence_number; 1312 QuicPacketSequenceNumber sequence_number = packet.sequence_number;
1329 if (ShouldDiscardPacket(packet.encryption_level, 1313 if (ShouldDiscardPacket(packet.encryption_level,
(...skipping 643 matching lines...) Expand 10 before | Expand all | Expand 10 after
1973 // If we changed the generator's batch state, restore original batch state. 1957 // If we changed the generator's batch state, restore original batch state.
1974 if (!already_in_batch_mode_) { 1958 if (!already_in_batch_mode_) {
1975 DVLOG(1) << "Leaving Batch Mode."; 1959 DVLOG(1) << "Leaving Batch Mode.";
1976 connection_->packet_generator_.FinishBatchOperations(); 1960 connection_->packet_generator_.FinishBatchOperations();
1977 } 1961 }
1978 DCHECK_EQ(already_in_batch_mode_, 1962 DCHECK_EQ(already_in_batch_mode_,
1979 connection_->packet_generator_.InBatchMode()); 1963 connection_->packet_generator_.InBatchMode());
1980 } 1964 }
1981 1965
1982 } // namespace net 1966 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | net/quic/quic_connection_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698