diff options
Diffstat (limited to 'chromium/net/quic/congestion_control/inter_arrival_receiver.cc')
-rw-r--r-- | chromium/net/quic/congestion_control/inter_arrival_receiver.cc | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/chromium/net/quic/congestion_control/inter_arrival_receiver.cc b/chromium/net/quic/congestion_control/inter_arrival_receiver.cc new file mode 100644 index 00000000000..770b287db0b --- /dev/null +++ b/chromium/net/quic/congestion_control/inter_arrival_receiver.cc @@ -0,0 +1,48 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/quic/congestion_control/inter_arrival_receiver.h" + +#include "base/basictypes.h" + +namespace net { + +InterArrivalReceiver::InterArrivalReceiver() + : accumulated_number_of_recoverd_lost_packets_(0) { +} + +InterArrivalReceiver::~InterArrivalReceiver() { +} + +bool InterArrivalReceiver::GenerateCongestionFeedback( + QuicCongestionFeedbackFrame* feedback) { + if (received_packet_times_.size() <= 1) { + // Don't waste resources by sending a feedback frame for only one packet. + return false; + } + feedback->type = kInterArrival; + feedback->inter_arrival.accumulated_number_of_lost_packets = + accumulated_number_of_recoverd_lost_packets_; + + // Copy our current receive set to our feedback message, we will not resend + // this data if it is lost. + feedback->inter_arrival.received_packet_times = received_packet_times_; + + // Prepare for the next set of arriving packets by clearing our current set. + received_packet_times_.clear(); + return true; +} + +void InterArrivalReceiver::RecordIncomingPacket( + QuicByteCount /*bytes*/, + QuicPacketSequenceNumber sequence_number, + QuicTime timestamp, + bool revived) { + if (revived) { + ++accumulated_number_of_recoverd_lost_packets_; + } + received_packet_times_.insert(std::make_pair(sequence_number, timestamp)); +} + +} // namespace net |