From b2b104f25c0e917a0a434c75a2904751f4dc8eea Mon Sep 17 00:00:00 2001 From: Fletcher Dunn Date: Thu, 29 Aug 2024 16:58:32 -0700 Subject: [PATCH] Factor out processing of a jitter sample. Make a method that can be "overridden" and customized by specific stats trackers. P4:9130218 --- .../steamnetworking_statsutils.h | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/steamnetworkingsockets/steamnetworking_statsutils.h b/src/steamnetworkingsockets/steamnetworking_statsutils.h index 9e13308..0cb8f13 100644 --- a/src/steamnetworkingsockets/steamnetworking_statsutils.h +++ b/src/steamnetworkingsockets/steamnetworking_statsutils.h @@ -1000,6 +1000,18 @@ protected: m_seqPktCounters.OnDropped( nDropped ); } + inline void InternalProcessJitterSample( int usecJitter ) + { + // This code only cares about absolute value + usecJitter = abs( usecJitter ); + + // Update max jitter for current interval + m_seqPktCounters.m_usecMaxJitter = std::max( m_seqPktCounters.m_usecMaxJitter, usecJitter ); + + // Add to histogram + m_jitterHistogram.AddSample( usecJitter ); + } + /// Called when we receive stats message from remote host template inline static void InternalProcessMessage( TLinkStatsTracker *pThis, const CMsgSteamDatagramConnectionQuality &msg, SteamNetworkingMicroseconds usecNow ) @@ -1340,20 +1352,14 @@ struct LinkStatsTracker final : public TLinkStatsTracker ++TLinkStatsTracker::m_nDebugPktsRecvInOrder; // We've received two packets, in order. Did the sender supply the time between packets on his side? - if ( usecSenderTimeSincePrev > 0 ) + if ( usecSenderTimeSincePrev > 0 && usecSenderTimeSincePrev < k_usecTimeSinceLastPacketMaxReasonable ) { - int usecJitter = ( usecNow - TLinkStatsTracker::m_usecTimeLastRecvSeq ) - usecSenderTimeSincePrev; - usecJitter = abs( usecJitter ); - if ( usecJitter < k_usecTimeSinceLastPacketMaxReasonable ) + SteamNetworkingMicroseconds usecRecvTimeSincePrev = ( usecNow - TLinkStatsTracker::m_usecTimeLastRecvSeq ); + Assert( usecRecvTimeSincePrev >= 0 ); + if ( (uint64)usecRecvTimeSincePrev < (uint64)k_usecTimeSinceLastPacketMaxReasonable ) { - - // Update max jitter for current interval - TLinkStatsTracker::m_seqPktCounters.m_usecMaxJitter = std::max( TLinkStatsTracker::m_seqPktCounters.m_usecMaxJitter, usecJitter ); - TLinkStatsTracker::m_jitterHistogram.AddSample( usecJitter ); - } - else - { - // Something is really, really off. Discard measurement + int usecJitter = usecRecvTimeSincePrev - usecSenderTimeSincePrev; + TLinkStatsTracker::InternalProcessJitterSample( usecJitter ); } }