From ca0356ff2a6ca8c66238cb17822ec1236da29fb6 Mon Sep 17 00:00:00 2001 From: Fletcher Dunn Date: Tue, 9 Mar 2021 16:50:38 -0800 Subject: [PATCH] Spew more if we don't send immediately. Also added a comment about reusing m_usecTimeReceived, because this looks like a bug P4:6407666 --- .../clientlib/steamnetworkingsockets_snp.cpp | 25 +++++++++++++++---- .../clientlib/steamnetworkingsockets_snp.h | 1 + 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/steamnetworkingsockets/clientlib/steamnetworkingsockets_snp.cpp b/src/steamnetworkingsockets/clientlib/steamnetworkingsockets_snp.cpp index 8866a13..6938b5c 100644 --- a/src/steamnetworkingsockets/clientlib/steamnetworkingsockets_snp.cpp +++ b/src/steamnetworkingsockets/clientlib/steamnetworkingsockets_snp.cpp @@ -338,7 +338,7 @@ int64 CSteamNetworkConnectionBase::SNP_SendMessage( CSteamNetworkingMessage *pSe // or at the Nagle time, if Nagle is active.) // // NOTE: Right now we might not actually be capable of sending end to end data. - // But that case is relatievly rare, and nothing will break if we try to right now. + // But that case is relatively rare, and nothing will break if we try to right now. // On the other hand, just asking the question involved a virtual function call, // and it will return success most of the time, so let's not make the check here. if ( GetState() == k_ESteamNetworkingConnectionState_Connected ) @@ -349,14 +349,29 @@ int64 CSteamNetworkConnectionBase::SNP_SendMessage( CSteamNetworkingMessage *pSe if ( usecNextThink > usecNow ) { - // We are rate limiting. Spew about it? - if ( m_senderState.m_messagesQueued.m_pFirst->SNPSend_UsecNagle() == 0 ) + // Not ready to send yet. Is it because Nagle, or because we have previous + // data queued and are rate limited? + if ( usecNextThink > m_senderState.m_messagesQueued.m_pFirst->SNPSend_UsecNagle() ) { - SpewVerbose( "[%s] RATELIM QueueTime is %.1fms, SendRate=%.1fk, BytesQueued=%d\n", + // It's because of the rate limit + SpewVerbose( "[%s] Send RATELIM. QueueTime is %.1fms, SendRate=%.1fk, BytesQueued=%d, ping=%dms\n", GetDescription(), m_senderState.CalcTimeUntilNextSend() * 1e-3, m_senderState.m_n_x * ( 1.0/1024.0), - m_senderState.PendingBytesTotal() + m_senderState.PendingBytesTotal(), + m_statsEndToEnd.m_ping.m_nSmoothedPing + ); + } + else + { + // Waiting on nagle + SpewVerbose( "[%s] Send Nagle %.1fms. QueueTime is %.1fms, SendRate=%.1fk, BytesQueued=%d, ping=%dms\n", + GetDescription(), + ( m_senderState.m_messagesQueued.m_pFirst->SNPSend_UsecNagle() - usecNow ) * 1e-3, + m_senderState.CalcTimeUntilNextSend() * 1e-3, + m_senderState.m_n_x * ( 1.0/1024.0), + m_senderState.PendingBytesTotal(), + m_statsEndToEnd.m_ping.m_nSmoothedPing ); } diff --git a/src/steamnetworkingsockets/clientlib/steamnetworkingsockets_snp.h b/src/steamnetworkingsockets/clientlib/steamnetworkingsockets_snp.h index a4c68c9..96c4175 100644 --- a/src/steamnetworkingsockets/clientlib/steamnetworkingsockets_snp.h +++ b/src/steamnetworkingsockets/clientlib/steamnetworkingsockets_snp.h @@ -86,6 +86,7 @@ public: /// Nagle timer to expire and send now (but this should behave the same as if the /// timer < usecNow). If the timer is cleared, then all messages with lower message numbers /// are also cleared. + // NOTE: Intentionally reusing the m_usecTimeReceived field, which is not used on outbound messages inline SteamNetworkingMicroseconds SNPSend_UsecNagle() const { return m_usecTimeReceived; } inline void SNPSend_SetUsecNagle( SteamNetworkingMicroseconds x ) { m_usecTimeReceived = x; }