blob: 80539d9a1083e30df79a359d18244bd49383d832 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
// Copyright 2019 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.
#ifndef QUICHE_QUIC_CORE_CONGESTION_CONTROL_BBR2_STARTUP_H_
#define QUICHE_QUIC_CORE_CONGESTION_CONTROL_BBR2_STARTUP_H_
#include "net/third_party/quiche/src/quic/core/congestion_control/bbr2_misc.h"
#include "net/third_party/quiche/src/quic/core/quic_bandwidth.h"
#include "net/third_party/quiche/src/quic/core/quic_time.h"
#include "net/third_party/quiche/src/quic/core/quic_types.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_export.h"
namespace quic {
class Bbr2Sender;
class QUIC_EXPORT_PRIVATE Bbr2StartupMode final : public Bbr2ModeBase {
public:
Bbr2StartupMode(const Bbr2Sender* sender,
Bbr2NetworkModel* model,
QuicTime now);
void Enter(const Bbr2CongestionEvent& congestion_event) override;
void Leave(const Bbr2CongestionEvent& congestion_event) override;
Bbr2Mode OnCongestionEvent(
QuicByteCount prior_in_flight,
QuicTime event_time,
const AckedPacketVector& acked_packets,
const LostPacketVector& lost_packets,
const Bbr2CongestionEvent& congestion_event) override;
Limits<QuicByteCount> GetCwndLimits() const override {
return NoGreaterThan(model_->inflight_lo());
}
bool IsProbingForBandwidth() const override { return true; }
bool FullBandwidthReached() const { return full_bandwidth_reached_; }
struct QUIC_EXPORT_PRIVATE DebugState {
bool full_bandwidth_reached;
QuicBandwidth full_bandwidth_baseline = QuicBandwidth::Zero();
QuicRoundTripCount round_trips_without_bandwidth_growth;
};
DebugState ExportDebugState() const;
private:
const Bbr2Params& Params() const;
void CheckFullBandwidthReached(const Bbr2CongestionEvent& congestion_event);
void CheckExcessiveLosses(const LostPacketVector& lost_packets,
const Bbr2CongestionEvent& congestion_event);
bool full_bandwidth_reached_;
QuicBandwidth full_bandwidth_baseline_;
QuicRoundTripCount rounds_without_bandwidth_growth_;
// Number of loss events in the current round trip.
int64_t loss_events_in_round_;
};
QUIC_EXPORT_PRIVATE std::ostream& operator<<(
std::ostream& os,
const Bbr2StartupMode::DebugState& state);
} // namespace quic
#endif // QUICHE_QUIC_CORE_CONGESTION_CONTROL_BBR2_STARTUP_H_
|