Skip to content

Commit aaf0946

Browse files
author
MarcoFalke
committed
Merge #18260: refactor: Fix implicit value conversion in formatPingTime
1891245 refactor: Cast ping values to double before output (Ben Woosley) 7a810b1 refactor: Convert ping wait time from double to int64_t (Ben Woosley) e6fc63e refactor: Convert min ping time from double to int64_t (Ben Woosley) b054c46 refactor: Convert ping time from double to int64_t (Ben Woosley) Pull request description: Alternative to #18252, see motivation there. This changes `CNodeStats` to handle ping timestamps as their original incoming usec `int64_t` values until the time they need to be displayed. ACKs for top commit: vasild: ACK 1891245 practicalswift: ACK 1891245 -- patch looks correct promag: ACK 1891245, added cast to double and also braces. Tree-SHA512: 7cfcba941d9751b522b8c512c25da493338b444637bd0bb711b152d7d86b431ca0968956be3c844ee9dbfea25edab44a0de2afa44f2c9c0bf5b8df53eba66272
2 parents 96488e6 + 1891245 commit aaf0946

File tree

7 files changed

+24
-21
lines changed

7 files changed

+24
-21
lines changed

src/net.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -555,9 +555,9 @@ void CNode::copyStats(CNodeStats &stats, const std::vector<bool> &m_asmap)
555555
}
556556

557557
// Raw ping time is in microseconds, but show it to user as whole seconds (Bitcoin users should be well used to small numbers with many decimal places by now :)
558-
stats.dPingTime = (((double)nPingUsecTime) / 1e6);
559-
stats.dMinPing = (((double)nMinPingUsecTime) / 1e6);
560-
stats.dPingWait = (((double)nPingUsecWait) / 1e6);
558+
stats.m_ping_usec = nPingUsecTime;
559+
stats.m_min_ping_usec = nMinPingUsecTime;
560+
stats.m_ping_wait_usec = nPingUsecWait;
561561

562562
// Leave string empty if addrLocal invalid (not filled in yet)
563563
CService addrLocalUnlocked = GetAddrLocal();

src/net.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -596,9 +596,9 @@ class CNodeStats
596596
mapMsgCmdSize mapRecvBytesPerMsgCmd;
597597
NetPermissionFlags m_permissionFlags;
598598
bool m_legacyWhitelisted;
599-
double dPingTime;
600-
double dPingWait;
601-
double dMinPing;
599+
int64_t m_ping_usec;
600+
int64_t m_ping_wait_usec;
601+
int64_t m_min_ping_usec;
602602
CAmount minFeeFilter;
603603
// Our address, as reported by the peer
604604
std::string addrLocal;

src/qt/guiutil.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -773,9 +773,9 @@ QString formatServicesStr(quint64 mask)
773773
return QObject::tr("None");
774774
}
775775

776-
QString formatPingTime(double dPingTime)
776+
QString formatPingTime(int64_t ping_usec)
777777
{
778-
return (dPingTime == std::numeric_limits<int64_t>::max()/1e6 || dPingTime == 0) ? QObject::tr("N/A") : QString(QObject::tr("%1 ms")).arg(QString::number((int)(dPingTime * 1000), 10));
778+
return (ping_usec == std::numeric_limits<int64_t>::max() || ping_usec == 0) ? QObject::tr("N/A") : QString(QObject::tr("%1 ms")).arg(QString::number((int)(ping_usec / 1000), 10));
779779
}
780780

781781
QString formatTimeOffset(int64_t nTimeOffset)

src/qt/guiutil.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,8 @@ namespace GUIUtil
202202
/* Format CNodeStats.nServices bitmask into a user-readable string */
203203
QString formatServicesStr(quint64 mask);
204204

205-
/* Format a CNodeCombinedStats.dPingTime into a user-readable string or display N/A, if 0*/
206-
QString formatPingTime(double dPingTime);
205+
/* Format a CNodeStats.m_ping_usec into a user-readable string or display N/A, if 0*/
206+
QString formatPingTime(int64_t ping_usec);
207207

208208
/* Format a CNodeCombinedStats.nTimeOffset into a user-readable string. */
209209
QString formatTimeOffset(int64_t nTimeOffset);

src/qt/peertablemodel.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ bool NodeLessThan::operator()(const CNodeCombinedStats &left, const CNodeCombine
3232
case PeerTableModel::Subversion:
3333
return pLeft->cleanSubVer.compare(pRight->cleanSubVer) < 0;
3434
case PeerTableModel::Ping:
35-
return pLeft->dMinPing < pRight->dMinPing;
35+
return pLeft->m_min_ping_usec < pRight->m_min_ping_usec;
3636
case PeerTableModel::Sent:
3737
return pLeft->nSendBytes < pRight->nSendBytes;
3838
case PeerTableModel::Received:
@@ -161,7 +161,7 @@ QVariant PeerTableModel::data(const QModelIndex &index, int role) const
161161
case Subversion:
162162
return QString::fromStdString(rec->nodeStats.cleanSubVer);
163163
case Ping:
164-
return GUIUtil::formatPingTime(rec->nodeStats.dMinPing);
164+
return GUIUtil::formatPingTime(rec->nodeStats.m_min_ping_usec);
165165
case Sent:
166166
return GUIUtil::formatBytes(rec->nodeStats.nSendBytes);
167167
case Received:

src/qt/rpcconsole.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1109,9 +1109,9 @@ void RPCConsole::updateNodeDetail(const CNodeCombinedStats *stats)
11091109
ui->peerBytesSent->setText(GUIUtil::formatBytes(stats->nodeStats.nSendBytes));
11101110
ui->peerBytesRecv->setText(GUIUtil::formatBytes(stats->nodeStats.nRecvBytes));
11111111
ui->peerConnTime->setText(GUIUtil::formatDurationStr(GetSystemTimeInSeconds() - stats->nodeStats.nTimeConnected));
1112-
ui->peerPingTime->setText(GUIUtil::formatPingTime(stats->nodeStats.dPingTime));
1113-
ui->peerPingWait->setText(GUIUtil::formatPingTime(stats->nodeStats.dPingWait));
1114-
ui->peerMinPing->setText(GUIUtil::formatPingTime(stats->nodeStats.dMinPing));
1112+
ui->peerPingTime->setText(GUIUtil::formatPingTime(stats->nodeStats.m_ping_usec));
1113+
ui->peerPingWait->setText(GUIUtil::formatPingTime(stats->nodeStats.m_ping_wait_usec));
1114+
ui->peerMinPing->setText(GUIUtil::formatPingTime(stats->nodeStats.m_min_ping_usec));
11151115
ui->timeoffset->setText(GUIUtil::formatTimeOffset(stats->nodeStats.nTimeOffset));
11161116
ui->peerVersion->setText(QString("%1").arg(QString::number(stats->nodeStats.nVersion)));
11171117
ui->peerSubversion->setText(QString::fromStdString(stats->nodeStats.cleanSubVer));

src/rpc/net.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -168,12 +168,15 @@ static UniValue getpeerinfo(const JSONRPCRequest& request)
168168
obj.pushKV("bytesrecv", stats.nRecvBytes);
169169
obj.pushKV("conntime", stats.nTimeConnected);
170170
obj.pushKV("timeoffset", stats.nTimeOffset);
171-
if (stats.dPingTime > 0.0)
172-
obj.pushKV("pingtime", stats.dPingTime);
173-
if (stats.dMinPing < static_cast<double>(std::numeric_limits<int64_t>::max())/1e6)
174-
obj.pushKV("minping", stats.dMinPing);
175-
if (stats.dPingWait > 0.0)
176-
obj.pushKV("pingwait", stats.dPingWait);
171+
if (stats.m_ping_usec > 0) {
172+
obj.pushKV("pingtime", ((double)stats.m_ping_usec) / 1e6);
173+
}
174+
if (stats.m_min_ping_usec < std::numeric_limits<int64_t>::max()) {
175+
obj.pushKV("minping", ((double)stats.m_min_ping_usec) / 1e6);
176+
}
177+
if (stats.m_ping_wait_usec > 0) {
178+
obj.pushKV("pingwait", ((double)stats.m_ping_wait_usec) / 1e6);
179+
}
177180
obj.pushKV("version", stats.nVersion);
178181
// Use the sanitized form of subver here, to avoid tricksy remote peers from
179182
// corrupting or modifying the JSON output by putting special characters in

0 commit comments

Comments
 (0)