xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/quic/core/congestion_control/prr_sender.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright (c) 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 // Implements Proportional Rate Reduction (PRR) per RFC 6937.
6 
7 #ifndef QUICHE_QUIC_CORE_CONGESTION_CONTROL_PRR_SENDER_H_
8 #define QUICHE_QUIC_CORE_CONGESTION_CONTROL_PRR_SENDER_H_
9 
10 #include "quiche/quic/core/quic_bandwidth.h"
11 #include "quiche/quic/core/quic_time.h"
12 #include "quiche/quic/platform/api/quic_export.h"
13 
14 namespace quic {
15 
16 class QUICHE_EXPORT PrrSender {
17  public:
18   PrrSender();
19   // OnPacketLost should be called on the first loss that triggers a recovery
20   // period and all other methods in this class should only be called when in
21   // recovery.
22   void OnPacketLost(QuicByteCount prior_in_flight);
23   void OnPacketSent(QuicByteCount sent_bytes);
24   void OnPacketAcked(QuicByteCount acked_bytes);
25   bool CanSend(QuicByteCount congestion_window, QuicByteCount bytes_in_flight,
26                QuicByteCount slowstart_threshold) const;
27 
28  private:
29   // Bytes sent and acked since the last loss event.
30   // |bytes_sent_since_loss_| is the same as "prr_out_" in RFC 6937,
31   // and |bytes_delivered_since_loss_| is the same as "prr_delivered_".
32   QuicByteCount bytes_sent_since_loss_;
33   QuicByteCount bytes_delivered_since_loss_;
34   size_t ack_count_since_loss_;
35 
36   // The congestion window before the last loss event.
37   QuicByteCount bytes_in_flight_before_loss_;
38 };
39 
40 }  // namespace quic
41 
42 #endif  // QUICHE_QUIC_CORE_CONGESTION_CONTROL_PRR_SENDER_H_
43