diff --git a/Sources/SwiftNetwork/QUIC/FlowControl.swift b/Sources/SwiftNetwork/QUIC/FlowControl.swift index a2118cc..1828e80 100644 --- a/Sources/SwiftNetwork/QUIC/FlowControl.swift +++ b/Sources/SwiftNetwork/QUIC/FlowControl.swift @@ -709,22 +709,9 @@ extension QUICStreamInstance { return false } - var largestPathMSS: UInt64 = 0 - var largestPathRTT: NetworkDuration = .zero - - connection.applyToAllPaths { path in - if path.mss > largestPathMSS { - largestPathMSS = UInt64(path.mss) - } - if path.rtt.smoothedRTT > largestPathRTT { - largestPathRTT = path.rtt.smoothedRTT - } - } - let increment = computeReceiveHighWaterMarkIncrease( dataLength: dataLengthAdded, - rtt: largestPathRTT, - mss: largestPathMSS, + connection: connection, now: connection.now ) @@ -749,8 +736,7 @@ extension QUICStreamInstance { fileprivate func computeReceiveHighWaterMarkIncrease( dataLength: UInt64, - rtt: NetworkDuration, - mss: UInt64, + connection: QUICConnection, now: NetworkClock.Instant ) -> UInt64 { if flowControlStreamState.receiveHighWaterMarkTime > now { @@ -765,10 +751,12 @@ extension QUICStreamInstance { // Here, we estimate if the bandwidth measured in this RTT // is more than a certain value of the bandwidth measured // in the previous RTT. + let rtt = connection.currentPath?.smoothedRTT ?? .zero if now >= flowControlStreamState.receiveHighWaterMarkTime.advanced(by: rtt) { if flowControlStreamState.receiveHighWaterMarkCount > flowControlStreamState.receiveHighWaterMarkPreviousCount { + let mss = UInt64(connection.currentPath?.mss ?? 0) let shift: Int if flowControlStreamState.receiveHighWaterMarkCount > (flowControlStreamState.receiveHighWaterMarkPreviousCount diff --git a/Sources/SwiftNetwork/QUIC/QUICPath.swift b/Sources/SwiftNetwork/QUIC/QUICPath.swift index f36b470..2b9cda3 100644 --- a/Sources/SwiftNetwork/QUIC/QUICPath.swift +++ b/Sources/SwiftNetwork/QUIC/QUICPath.swift @@ -258,6 +258,7 @@ public final class QUICPath: MultiplexingDatagramPath, Equatable var isRouteEstablished: Bool { state.isRouteEstablished } + @_optimize(speed) var smoothedRTT: NetworkDuration { rtt.smoothedRTT }