quic/congestion_control/StaticCwndCongestionController.h (31 lines of code) (raw):

/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #pragma once #include <quic/congestion_control/CongestionController.h> #include <quic/state/AckEvent.h> #include <quic/state/TransportSettings.h> namespace quic { /** * Simple congestion controller with a static congestion window. * * getWritableBytes() returns CWND - bytesInflight, with bytesInFlight changing * based on packet sent/ack/loss events. * * Although capable of being used in production, intended to be used for * testing and experiments. */ struct StaticCwndCongestionController : public CongestionController { /** * Helper struct to make it clear that CWND should be passed in # of bytes. */ struct CwndInBytes { explicit CwndInBytes(uint64_t bytes) : bytes(bytes) {} const uint64_t bytes; }; explicit StaticCwndCongestionController(CwndInBytes cwnd); void onRemoveBytesFromInflight(uint64_t bytesToRemove) override; void onPacketSent(const OutstandingPacket& packet) override; void onPacketAckOrLoss( const AckEvent* FOLLY_NULLABLE ackEvent, const LossEvent* FOLLY_NULLABLE lossEvent) override; FOLLY_NODISCARD uint64_t getWritableBytes() const noexcept override; FOLLY_NODISCARD uint64_t getCongestionWindow() const noexcept override; FOLLY_NODISCARD CongestionControlType type() const noexcept override; FOLLY_NODISCARD bool isInBackgroundMode() const override; FOLLY_NODISCARD bool isAppLimited() const override; void setAppLimited() noexcept override; void setAppIdle(bool, TimePoint) noexcept override {} void setBandwidthUtilizationFactor(float) noexcept override {} void getStats(CongestionControllerStats&) const override {} private: uint64_t inflightBytes_{0}; // initially zero bytes inflight bool isAppLimited_{true}; // initially starts true const uint64_t congestionWindowInBytes_; }; } // namespace quic