| Index: net/quic/quic_sent_packet_manager.cc
|
| diff --git a/net/quic/quic_sent_packet_manager.cc b/net/quic/quic_sent_packet_manager.cc
|
| index c51b744e09a4b56981721dbbd0ea10eca4b27b38..f233d8ba7bd327959c4c512e24d4164fab4b7d4b 100644
|
| --- a/net/quic/quic_sent_packet_manager.cc
|
| +++ b/net/quic/quic_sent_packet_manager.cc
|
| @@ -177,27 +177,26 @@ void QuicSentPacketManager::OnRetransmittedPacket(
|
| }
|
| }
|
|
|
| -void QuicSentPacketManager::OnIncomingAck(
|
| - const ReceivedPacketInfo& received_info,
|
| - QuicTime ack_receive_time) {
|
| +void QuicSentPacketManager::OnIncomingAck(const QuicAckFrame& ack_frame,
|
| + QuicTime ack_receive_time) {
|
| QuicByteCount bytes_in_flight = unacked_packets_.bytes_in_flight();
|
|
|
| // We rely on delta_time_largest_observed to compute an RTT estimate, so
|
| // we only update rtt when the largest observed gets acked.
|
| - bool largest_observed_acked = MaybeUpdateRTT(received_info, ack_receive_time);
|
| - if (largest_observed_ < received_info.largest_observed) {
|
| - largest_observed_ = received_info.largest_observed;
|
| + bool largest_observed_acked = MaybeUpdateRTT(ack_frame, ack_receive_time);
|
| + if (largest_observed_ < ack_frame.largest_observed) {
|
| + largest_observed_ = ack_frame.largest_observed;
|
| unacked_packets_.IncreaseLargestObserved(largest_observed_);
|
| }
|
| - HandleAckForSentPackets(received_info);
|
| + HandleAckForSentPackets(ack_frame);
|
| InvokeLossDetection(ack_receive_time);
|
| MaybeInvokeCongestionEvent(largest_observed_acked, bytes_in_flight);
|
|
|
| // If we have received a truncated ack, then we need to clear out some
|
| // previous transmissions to allow the peer to actually ACK new packets.
|
| - if (received_info.is_truncated) {
|
| + if (ack_frame.is_truncated) {
|
| unacked_packets_.ClearPreviousRetransmissions(
|
| - received_info.missing_packets.size() / 2);
|
| + ack_frame.missing_packets.size() / 2);
|
| }
|
|
|
| // Anytime we are making forward progress and have a new RTT estimate, reset
|
| @@ -210,11 +209,11 @@ void QuicSentPacketManager::OnIncomingAck(
|
| }
|
|
|
| if (debug_delegate_ != NULL) {
|
| - debug_delegate_->OnIncomingAck(received_info,
|
| - ack_receive_time,
|
| - largest_observed_,
|
| - largest_observed_acked,
|
| - GetLeastUnackedSentPacket());
|
| + debug_delegate_->OnIncomingAck(ack_frame,
|
| + ack_receive_time,
|
| + largest_observed_,
|
| + largest_observed_acked,
|
| + GetLeastUnackedSentPacket());
|
| }
|
| }
|
|
|
| @@ -233,26 +232,26 @@ void QuicSentPacketManager::MaybeInvokeCongestionEvent(
|
| }
|
|
|
| void QuicSentPacketManager::HandleAckForSentPackets(
|
| - const ReceivedPacketInfo& received_info) {
|
| + const QuicAckFrame& ack_frame) {
|
| // Go through the packets we have not received an ack for and see if this
|
| // incoming_ack shows they've been seen by the peer.
|
| QuicTime::Delta delta_largest_observed =
|
| - received_info.delta_time_largest_observed;
|
| + ack_frame.delta_time_largest_observed;
|
| QuicUnackedPacketMap::const_iterator it = unacked_packets_.begin();
|
| while (it != unacked_packets_.end()) {
|
| QuicPacketSequenceNumber sequence_number = it->first;
|
| - if (sequence_number > received_info.largest_observed) {
|
| + if (sequence_number > ack_frame.largest_observed) {
|
| // These packets are still in flight.
|
| break;
|
| }
|
|
|
| - if (IsAwaitingPacket(received_info, sequence_number)) {
|
| + if (IsAwaitingPacket(ack_frame, sequence_number)) {
|
| // Consider it multiple nacks when there is a gap between the missing
|
| // packet and the largest observed, since the purpose of a nack
|
| // threshold is to tolerate re-ordering. This handles both StretchAcks
|
| // and Forward Acks.
|
| // The nack count only increases when the largest observed increases.
|
| - size_t min_nacks = received_info.largest_observed - sequence_number;
|
| + size_t min_nacks = ack_frame.largest_observed - sequence_number;
|
| // Truncated acks can nack the largest observed, so use a min of 1.
|
| if (min_nacks == 0) {
|
| min_nacks = 1;
|
| @@ -273,8 +272,8 @@ void QuicSentPacketManager::HandleAckForSentPackets(
|
|
|
| // Discard any retransmittable frames associated with revived packets.
|
| for (SequenceNumberSet::const_iterator revived_it =
|
| - received_info.revived_packets.begin();
|
| - revived_it != received_info.revived_packets.end(); ++revived_it) {
|
| + ack_frame.revived_packets.begin();
|
| + revived_it != ack_frame.revived_packets.end(); ++revived_it) {
|
| MarkPacketRevived(*revived_it, delta_largest_observed);
|
| }
|
| }
|
| @@ -705,15 +704,15 @@ void QuicSentPacketManager::InvokeLossDetection(QuicTime time) {
|
| }
|
|
|
| bool QuicSentPacketManager::MaybeUpdateRTT(
|
| - const ReceivedPacketInfo& received_info,
|
| + const QuicAckFrame& ack_frame,
|
| const QuicTime& ack_receive_time) {
|
| - if (!unacked_packets_.IsUnacked(received_info.largest_observed)) {
|
| + if (!unacked_packets_.IsUnacked(ack_frame.largest_observed)) {
|
| return false;
|
| }
|
| // We calculate the RTT based on the highest ACKed sequence number, the lower
|
| // sequence numbers will include the ACK aggregation delay.
|
| const TransmissionInfo& transmission_info =
|
| - unacked_packets_.GetTransmissionInfo(received_info.largest_observed);
|
| + unacked_packets_.GetTransmissionInfo(ack_frame.largest_observed);
|
| // Don't update the RTT if it hasn't been sent.
|
| if (transmission_info.sent_time == QuicTime::Zero()) {
|
| return false;
|
| @@ -722,7 +721,7 @@ bool QuicSentPacketManager::MaybeUpdateRTT(
|
| QuicTime::Delta send_delta =
|
| ack_receive_time.Subtract(transmission_info.sent_time);
|
| rtt_stats_.UpdateRtt(
|
| - send_delta, received_info.delta_time_largest_observed, ack_receive_time);
|
| + send_delta, ack_frame.delta_time_largest_observed, ack_receive_time);
|
| return true;
|
| }
|
|
|
|
|