diff --git a/quic/api/QuicTransportFunctions.cpp b/quic/api/QuicTransportFunctions.cpp index d39e33c9a..8453e80d9 100644 --- a/quic/api/QuicTransportFunctions.cpp +++ b/quic/api/QuicTransportFunctions.cpp @@ -709,6 +709,7 @@ void updateConnection( << " sent packet with largestAcked=" << largestAckedPacketWritten << " packetNum=" << packetNum << " " << conn; + ++conn.numAckFramesSent; updateAckSendStateOnSentPacketWithAcks( conn, getAckState(conn, packetNumberSpace), diff --git a/quic/client/QuicClientTransport.cpp b/quic/client/QuicClientTransport.cpp index 769624acb..da8d1f32a 100644 --- a/quic/client/QuicClientTransport.cpp +++ b/quic/client/QuicClientTransport.cpp @@ -1861,4 +1861,8 @@ void QuicClientTransport::RecvmmsgStorage::resize(size_t numPackets) { } } +uint64_t QuicClientTransport::getNumAckFramesSent() const { + return conn_->numAckFramesSent; +} + } // namespace quic diff --git a/quic/client/QuicClientTransport.h b/quic/client/QuicClientTransport.h index d7d461e54..f17e57add 100644 --- a/quic/client/QuicClientTransport.h +++ b/quic/client/QuicClientTransport.h @@ -216,6 +216,8 @@ class QuicClientTransport Optional> getPeerTransportParams() const override; + uint64_t getNumAckFramesSent() const; + class HappyEyeballsConnAttemptDelayTimeout : public QuicTimerCallback { public: explicit HappyEyeballsConnAttemptDelayTimeout( diff --git a/quic/state/StateData.h b/quic/state/StateData.h index c60ffe16c..80deeeb99 100644 --- a/quic/state/StateData.h +++ b/quic/state/StateData.h @@ -492,6 +492,8 @@ struct QuicConnectionStateBase : public folly::DelayedDestruction { // This contains the ack and packet number related states for all three // packet number spaces. AckStates ackStates; + // Number of ack frames sent on connection across all packet number spaces. + uint64_t numAckFramesSent{0}; struct ConnectionFlowControlState { // The size of the connection flow control window.