quic/congestion_control/NewReno.h (45 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/QuicException.h> #include <quic/congestion_control/CongestionController.h> #include <quic/state/AckEvent.h> #include <quic/state/StateData.h> #include <limits> namespace quic { class NewReno : public CongestionController { public: explicit NewReno(QuicConnectionStateBase& conn); void onRemoveBytesFromInflight(uint64_t) override; void onPacketSent(const OutstandingPacket& packet) override; void onPacketAckOrLoss( const AckEvent* FOLLY_NULLABLE, const LossEvent* FOLLY_NULLABLE) override; void onPacketAckOrLoss( folly::Optional<AckEvent> ack, folly::Optional<LossEvent> loss) { onPacketAckOrLoss(ack.get_pointer(), loss.get_pointer()); } uint64_t getWritableBytes() const noexcept override; uint64_t getCongestionWindow() const noexcept override; void setAppIdle(bool, TimePoint) noexcept override; void setAppLimited() override; void setBandwidthUtilizationFactor( float /*bandwidthUtilizationFactor*/) noexcept override {} bool isInBackgroundMode() const noexcept override { return false; } CongestionControlType type() const noexcept override; bool inSlowStart() const noexcept; uint64_t getBytesInFlight() const noexcept; bool isAppLimited() const noexcept override; void getStats(CongestionControllerStats& /*stats*/) const override {} private: void onPacketLoss(const LossEvent&); void onAckEvent(const AckEvent&); void onPacketAcked(const CongestionController::AckEvent::AckPacket&); private: QuicConnectionStateBase& conn_; uint64_t ssthresh_; uint64_t cwndBytes_; folly::Optional<TimePoint> endOfRecovery_; }; } // namespace quic