Home | History | Annotate | Download | only in congestion_control
      1 // Copyright (c) 2013 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 // Class that handle the initial probing phase of inter arrival congestion
      6 // control.
      7 #ifndef NET_QUIC_CONGESTION_CONTROL_INTER_ARRIVAL_PROBE_H_
      8 #define NET_QUIC_CONGESTION_CONTROL_INTER_ARRIVAL_PROBE_H_
      9 
     10 #include "base/basictypes.h"
     11 #include "base/memory/scoped_ptr.h"
     12 #include "net/base/net_export.h"
     13 #include "net/quic/congestion_control/available_channel_estimator.h"
     14 #include "net/quic/quic_bandwidth.h"
     15 
     16 namespace net {
     17 
     18 class NET_EXPORT_PRIVATE InterArrivalProbe {
     19  public:
     20   explicit InterArrivalProbe(QuicByteCount max_segment_size);
     21   ~InterArrivalProbe();
     22 
     23   void set_max_segment_size(QuicByteCount max_segment_size);
     24 
     25   // Call every time a packet is sent to the network.
     26   void OnPacketSent(QuicByteCount bytes);
     27 
     28   // Call once for each sent packet that we receive an acknowledgement from
     29   // the peer for.
     30   void OnAcknowledgedPacket(QuicByteCount bytes);
     31 
     32   // Call to get the number of bytes that can be sent as part of this probe.
     33   QuicByteCount GetAvailableCongestionWindow();
     34 
     35   // Call once for each sent packet we receive a congestion feedback from the
     36   // peer for.
     37   // If a peer sends both and ack and feedback for a sent packet, both
     38   // OnAcknowledgedPacket and OnIncomingFeedback should be called.
     39   void OnIncomingFeedback(QuicPacketSequenceNumber sequence_number,
     40                           QuicByteCount bytes_sent,
     41                           QuicTime time_sent,
     42                           QuicTime time_received);
     43 
     44   // Returns false as long as we are probing, available_channel_estimate is
     45   // invalid during that time. When the probe is completed this function return
     46   // true and available_channel_estimate contains the estimate.
     47   bool GetEstimate(QuicBandwidth* available_channel_estimate);
     48 
     49  private:
     50   QuicByteCount max_segment_size_;
     51   scoped_ptr<AvailableChannelEstimator> available_channel_estimator_;
     52   QuicPacketSequenceNumber first_sequence_number_;
     53   bool estimate_available_;
     54   QuicBandwidth available_channel_estimate_;
     55   QuicByteCount unacked_data_;
     56 
     57   DISALLOW_COPY_AND_ASSIGN(InterArrivalProbe);
     58 };
     59 
     60 }  // namespace net
     61 #endif  // NET_QUIC_CONGESTION_CONTROL_INTER_ARRIVAL_PROBE_H_
     62