quic/congestion_control/StaticCwndCongestionController.cpp (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.
*/
#include <quic/congestion_control/CongestionControlFunctions.h>
#include <quic/congestion_control/StaticCwndCongestionController.h>
namespace quic {
StaticCwndCongestionController::StaticCwndCongestionController(CwndInBytes cwnd)
: congestionWindowInBytes_(cwnd.bytes) {}
void StaticCwndCongestionController::onRemoveBytesFromInflight(
uint64_t bytesToRemove) {
subtractAndCheckUnderflow(inflightBytes_, bytesToRemove);
}
void StaticCwndCongestionController::onPacketSent(
const OutstandingPacket& packet) {
isAppLimited_ = false;
addAndCheckOverflow(inflightBytes_, packet.metadata.encodedSize);
}
void StaticCwndCongestionController::onPacketAckOrLoss(
const AckEvent* FOLLY_NULLABLE ackEvent,
const LossEvent* FOLLY_NULLABLE lossEvent) {
if (ackEvent) {
subtractAndCheckUnderflow(inflightBytes_, ackEvent->ackedBytes);
}
if (lossEvent) {
subtractAndCheckUnderflow(inflightBytes_, lossEvent->lostBytes);
}
}
uint64_t StaticCwndCongestionController::getWritableBytes() const noexcept {
return getCongestionWindow() > inflightBytes_
? getCongestionWindow() - inflightBytes_
: 0;
}
uint64_t StaticCwndCongestionController::getCongestionWindow() const noexcept {
return congestionWindowInBytes_;
}
CongestionControlType StaticCwndCongestionController::type() const noexcept {
return CongestionControlType::StaticCwnd;
}
bool StaticCwndCongestionController::isInBackgroundMode() const {
return false;
}
bool StaticCwndCongestionController::isAppLimited() const {
return isAppLimited_;
}
void StaticCwndCongestionController::setAppLimited() noexcept {
isAppLimited_ = true;
}
} // namespace quic