Home | History | Annotate | Download | only in congestion_control
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef NET_QUIC_CONGESTION_CONTROL_TIME_LOSS_ALGORITHM_H_
      6 #define NET_QUIC_CONGESTION_CONTROL_TIME_LOSS_ALGORITHM_H_
      7 
      8 #include <algorithm>
      9 #include <map>
     10 
     11 #include "base/basictypes.h"
     12 #include "net/quic/congestion_control/loss_detection_interface.h"
     13 #include "net/quic/quic_protocol.h"
     14 #include "net/quic/quic_time.h"
     15 #include "net/quic/quic_unacked_packet_map.h"
     16 
     17 namespace net {
     18 
     19 // A loss detection algorithm which avoids spurious losses and retransmissions
     20 // by waiting 1.25 RTTs after a packet was sent instead of nack count.
     21 class NET_EXPORT_PRIVATE TimeLossAlgorithm : public LossDetectionInterface {
     22  public:
     23   TimeLossAlgorithm();
     24   virtual ~TimeLossAlgorithm() {}
     25 
     26   virtual LossDetectionType GetLossDetectionType() const OVERRIDE;
     27 
     28   // Declares pending packets less than the largest observed lost when it has
     29   // been 1.25 RTT since they were sent.  Packets larger than the largest
     30   // observed are retransmitted via TLP.
     31   virtual SequenceNumberSet DetectLostPackets(
     32       const QuicUnackedPacketMap& unacked_packets,
     33       const QuicTime& time,
     34       QuicPacketSequenceNumber largest_observed,
     35       const RttStats& rtt_stats) OVERRIDE;
     36 
     37   // Returns the time the next packet will be lost, or zero if there
     38   // are no nacked pending packets outstanding.
     39   // TODO(ianswett): Ideally the RTT variance and the RTT would be used to
     40   // determine the time a packet is considered lost.
     41   // TODO(ianswett): Consider using Max(1.25 * srtt, 1.125 * last_rtt).
     42   virtual QuicTime GetLossTimeout() const OVERRIDE;
     43 
     44  private:
     45   QuicTime loss_detection_timeout_;
     46 
     47   DISALLOW_COPY_AND_ASSIGN(TimeLossAlgorithm);
     48 };
     49 
     50 }  // namespace net
     51 
     52 #endif  // NET_QUIC_CONGESTION_CONTROL_TIME_LOSS_ALGORITHM_H_
     53