From fa644e625b0ced9aeeaacd4ebfb714ffa2cbfc17 Mon Sep 17 00:00:00 2001 From: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz> Date: Fri, 20 Mar 2026 14:10:50 +0100 Subject: [PATCH] refactor: Use NodeClock::duration for m_last_ping_time/m_min_ping_time/m_ping_wait This refactor does not change any behavior and is needed for a future commit, to avoid having to add duration casts. It also improves the docs to better document that this is not a time point, but a duration. Also, it uses decltype to explain where the _::max() is coming from. --- src/net.h | 11 ++++++----- src/net_processing.h | 2 +- src/node/eviction.h | 2 +- src/qt/guiutil.cpp | 4 ++-- src/qt/guiutil.h | 4 ++-- src/rpc/net.cpp | 2 +- 6 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/net.h b/src/net.h index 5f19074bddc..135b1fc0a37 100644 --- a/src/net.h +++ b/src/net.h @@ -210,8 +210,8 @@ public: uint64_t nRecvBytes; mapMsgTypeSize mapRecvBytesPerMsgType; NetPermissionFlags m_permission_flags; - std::chrono::microseconds m_last_ping_time; - std::chrono::microseconds m_min_ping_time; + NodeClock::duration m_last_ping_time; + NodeClock::duration m_min_ping_time; // Our address, as reported by the peer std::string addrLocal; // Address of this peer @@ -890,11 +890,11 @@ public: std::atomic m_last_tx_time{0s}; /// Last measured round-trip duration. Used only for stats. - std::atomic m_last_ping_time{0us}; + std::atomic m_last_ping_time{0us}; /// Lowest measured round-trip duration. Used as an inbound peer eviction /// criterion in CConnman::AttemptToEvictConnection. - std::atomic m_min_ping_time{std::chrono::microseconds::max()}; + std::atomic m_min_ping_time{NodeClock::duration::max()}; CNode(NodeId id, std::shared_ptr sock, @@ -981,7 +981,8 @@ public: std::string DisconnectMsg() const; /// A ping-pong round trip has completed successfully. Update latest and minimum ping durations. - void PongReceived(std::chrono::microseconds ping_time) { + void PongReceived(NodeClock::duration ping_time) + { m_last_ping_time = ping_time; m_min_ping_time = std::min(m_min_ping_time.load(), ping_time); } diff --git a/src/net_processing.h b/src/net_processing.h index d2050d8f3d7..8b3f026d051 100644 --- a/src/net_processing.h +++ b/src/net_processing.h @@ -52,7 +52,7 @@ static const unsigned int MAX_HEADERS_RESULTS = 2000; struct CNodeStateStats { int nSyncHeight = -1; int nCommonHeight = -1; - std::chrono::microseconds m_ping_wait; + NodeClock::duration m_ping_wait; std::vector vHeightInFlight; bool m_relay_txs; int m_inv_to_send = 0; diff --git a/src/node/eviction.h b/src/node/eviction.h index 6ab726445f2..7230d959df2 100644 --- a/src/node/eviction.h +++ b/src/node/eviction.h @@ -18,7 +18,7 @@ typedef int64_t NodeId; struct NodeEvictionCandidate { NodeId id; std::chrono::seconds m_connected; - std::chrono::microseconds m_min_ping_time; + NodeClock::duration m_min_ping_time; std::chrono::seconds m_last_block_time; std::chrono::seconds m_last_tx_time; bool fRelevantServices; diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index 9cdfe2bcd24..e0210b0570f 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -767,9 +767,9 @@ QString formatServicesStr(quint64 mask) return QObject::tr("None"); } -QString formatPingTime(std::chrono::microseconds ping_time) +QString formatPingTime(NodeClock::duration ping_time) { - return (ping_time == std::chrono::microseconds::max() || ping_time == 0us) ? + return (ping_time == decltype(CNode::m_min_ping_time.load())::max() || ping_time == 0us) ? QObject::tr("N/A") : QObject::tr("%1 ms").arg(QString::number(Ticks(ping_time))); } diff --git a/src/qt/guiutil.h b/src/qt/guiutil.h index f34c4eac181..90b8013ef0d 100644 --- a/src/qt/guiutil.h +++ b/src/qt/guiutil.h @@ -237,8 +237,8 @@ namespace GUIUtil /** Format CNodeStats.nServices bitmask into a user-readable string */ QString formatServicesStr(quint64 mask); - /** Format a CNodeStats.m_last_ping_time into a user-readable string or display N/A, if 0 */ - QString formatPingTime(std::chrono::microseconds ping_time); + /// Format a CNodeStats.m_last_ping_time/m_min_ping_time/m_ping_wait into a user-readable string if it exists, or display N/A + QString formatPingTime(NodeClock::duration ping_time); /** Format a CNodeStateStats.time_offset into a user-readable string */ QString formatTimeOffset(int64_t time_offset); diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp index 03786351388..9c71e4ee8ce 100644 --- a/src/rpc/net.cpp +++ b/src/rpc/net.cpp @@ -253,7 +253,7 @@ static RPCHelpMan getpeerinfo() if (stats.m_last_ping_time > 0us) { obj.pushKV("pingtime", Ticks(stats.m_last_ping_time)); } - if (stats.m_min_ping_time < std::chrono::microseconds::max()) { + if (stats.m_min_ping_time < decltype(CNode::m_min_ping_time.load())::max()) { obj.pushKV("minping", Ticks(stats.m_min_ping_time)); } if (statestats.m_ping_wait > 0s) {