@@ -7130,98 +7130,129 @@ void srt::CUDT::bstats(CBytePerfMon *perf, bool clear, bool instantaneous)
7130
7130
if (m_bBroken || m_bClosing)
7131
7131
throw CUDTException(MJ_CONNECTION, MN_CONNLOST, 0);
7132
7132
7133
-
ScopedLock statsguard(m_StatsLock);
7134
-
7135
-
const steady_clock::time_point currtime = steady_clock::now();
7136
-
7137
-
perf->msTimeStamp = count_milliseconds(currtime - m_stats.tsStartTime);
7138
-
perf->pktSent = m_stats.traceSent;
7139
-
perf->pktSentUnique = m_stats.traceSentUniq;
7140
-
perf->pktRecv = m_stats.traceRecv;
7141
-
perf->pktRecvUnique = m_stats.traceRecvUniq;
7142
-
perf->pktSndLoss = m_stats.traceSndLoss;
7143
-
perf->pktRcvLoss = m_stats.traceRcvLoss;
7144
-
perf->pktRetrans = m_stats.traceRetrans;
7145
-
perf->pktRcvRetrans = m_stats.traceRcvRetrans;
7146
-
perf->pktSentACK = m_stats.sentACK;
7147
-
perf->pktRecvACK = m_stats.recvACK;
7148
-
perf->pktSentNAK = m_stats.sentNAK;
7149
-
perf->pktRecvNAK = m_stats.recvNAK;
7150
-
perf->usSndDuration = m_stats.sndDuration;
7151
-
perf->pktReorderDistance = m_stats.traceReorderDistance;
7152
-
perf->pktReorderTolerance = m_iReorderTolerance;
7153
-
perf->pktRcvAvgBelatedTime = m_stats.traceBelatedTime;
7154
-
perf->pktRcvBelated = m_stats.traceRcvBelated;
7155
-
7156
-
perf->pktSndFilterExtra = m_stats.sndFilterExtra;
7157
-
perf->pktRcvFilterExtra = m_stats.rcvFilterExtra;
7158
-
perf->pktRcvFilterSupply = m_stats.rcvFilterSupply;
7159
-
perf->pktRcvFilterLoss = m_stats.rcvFilterLoss;
7160
-
7161
-
/* perf byte counters include all headers (SRT+UDP+IP) */
7162
7133
const int pktHdrSize = CPacket::HDR_SIZE + CPacket::UDP_HDR_SIZE;
7163
-
perf->byteSent = m_stats.traceBytesSent + (m_stats.traceSent * pktHdrSize);
7164
-
perf->byteSentUnique = m_stats.traceBytesSentUniq + (m_stats.traceSentUniq * pktHdrSize);
7165
-
perf->byteRecv = m_stats.traceBytesRecv + (m_stats.traceRecv * pktHdrSize);
7166
-
perf->byteRecvUnique = m_stats.traceBytesRecvUniq + (m_stats.traceRecvUniq * pktHdrSize);
7167
-
perf->byteRetrans = m_stats.traceBytesRetrans + (m_stats.traceRetrans * pktHdrSize);
7168
-
perf->byteRcvLoss = m_stats.traceRcvBytesLoss + (m_stats.traceRcvLoss * pktHdrSize);
7169
-
7170
-
perf->pktSndDrop = m_stats.traceSndDrop;
7171
-
perf->pktRcvDrop = m_stats.traceRcvDrop + m_stats.traceRcvUndecrypt;
7172
-
perf->byteSndDrop = m_stats.traceSndBytesDrop + (m_stats.traceSndDrop * pktHdrSize);
7173
-
perf->byteRcvDrop =
7174
-
m_stats.traceRcvBytesDrop + (m_stats.traceRcvDrop * pktHdrSize) + m_stats.traceRcvBytesUndecrypt;
7175
-
perf->pktRcvUndecrypt = m_stats.traceRcvUndecrypt;
7176
-
perf->byteRcvUndecrypt = m_stats.traceRcvBytesUndecrypt;
7177
-
7178
-
perf->pktSentTotal = m_stats.sentTotal;
7179
-
perf->pktSentUniqueTotal = m_stats.sentUniqTotal;
7180
-
perf->pktRecvTotal = m_stats.recvTotal;
7181
-
perf->pktRecvUniqueTotal = m_stats.recvUniqTotal;
7182
-
perf->pktSndLossTotal = m_stats.sndLossTotal;
7183
-
perf->pktRcvLossTotal = m_stats.rcvLossTotal;
7184
-
perf->pktRetransTotal = m_stats.retransTotal;
7185
-
perf->pktSentACKTotal = m_stats.sentACKTotal;
7186
-
perf->pktRecvACKTotal = m_stats.recvACKTotal;
7187
-
perf->pktSentNAKTotal = m_stats.sentNAKTotal;
7188
-
perf->pktRecvNAKTotal = m_stats.recvNAKTotal;
7189
-
perf->usSndDurationTotal = m_stats.m_sndDurationTotal;
7190
-
7191
-
perf->byteSentTotal = m_stats.bytesSentTotal + (m_stats.sentTotal * pktHdrSize);
7192
-
perf->byteSentUniqueTotal = m_stats.bytesSentUniqTotal + (m_stats.sentUniqTotal * pktHdrSize);
7193
-
perf->byteRecvTotal = m_stats.bytesRecvTotal + (m_stats.recvTotal * pktHdrSize);
7194
-
perf->byteRecvUniqueTotal = m_stats.bytesRecvUniqTotal + (m_stats.recvUniqTotal * pktHdrSize);
7195
-
perf->byteRetransTotal = m_stats.bytesRetransTotal + (m_stats.retransTotal * pktHdrSize);
7196
-
perf->pktSndFilterExtraTotal = m_stats.sndFilterExtraTotal;
7197
-
perf->pktRcvFilterExtraTotal = m_stats.rcvFilterExtraTotal;
7198
-
perf->pktRcvFilterSupplyTotal = m_stats.rcvFilterSupplyTotal;
7199
-
perf->pktRcvFilterLossTotal = m_stats.rcvFilterLossTotal;
7200
-
7201
-
perf->byteRcvLossTotal = m_stats.rcvBytesLossTotal + (m_stats.rcvLossTotal * pktHdrSize);
7202
-
perf->pktSndDropTotal = m_stats.sndDropTotal;
7203
-
perf->pktRcvDropTotal = m_stats.rcvDropTotal + m_stats.m_rcvUndecryptTotal;
7204
-
perf->byteSndDropTotal = m_stats.sndBytesDropTotal + (m_stats.sndDropTotal * pktHdrSize);
7205
-
perf->byteRcvDropTotal =
7206
-
m_stats.rcvBytesDropTotal + (m_stats.rcvDropTotal * pktHdrSize) + m_stats.m_rcvBytesUndecryptTotal;
7207
-
perf->pktRcvUndecryptTotal = m_stats.m_rcvUndecryptTotal;
7208
-
perf->byteRcvUndecryptTotal = m_stats.m_rcvBytesUndecryptTotal;
7209
-
7210
-
const double interval = (double) count_microseconds(currtime - m_stats.tsLastSampleTime);
7211
-
perf->mbpsSendRate = double(perf->byteSent) * 8.0 / interval;
7212
-
perf->mbpsRecvRate = double(perf->byteRecv) * 8.0 / interval;
7213
-
perf->usPktSndPeriod = (double) count_microseconds(m_tdSendInterval.load());
7214
-
perf->pktFlowWindow = m_iFlowWindowSize.load();
7215
-
perf->pktCongestionWindow = (int)m_dCongestionWindow;
7216
-
perf->pktFlightSize = getFlightSpan();
7217
-
perf->msRTT = (double)m_iSRTT / 1000.0;
7218
-
perf->msSndTsbPdDelay = m_bPeerTsbPd ? m_iPeerTsbPdDelay_ms : 0;
7219
-
perf->msRcvTsbPdDelay = isOPT_TsbPd() ? m_iTsbPdDelay_ms : 0;
7220
-
perf->byteMSS = m_config.iMSS;
7221
-
7222
-
perf->mbpsMaxBW = m_config.llMaxBW > 0 ? Bps2Mbps(m_config.llMaxBW)
7223
-
: m_CongCtl.ready() ? Bps2Mbps(m_CongCtl->sndBandwidth())
7224
-
: 0;
7134
+
{
7135
+
ScopedLock statsguard(m_StatsLock);
7136
+
7137
+
const steady_clock::time_point currtime = steady_clock::now();
7138
+
7139
+
perf->msTimeStamp = count_milliseconds(currtime - m_stats.tsStartTime);
7140
+
perf->pktSent = m_stats.traceSent;
7141
+
perf->pktSentUnique = m_stats.traceSentUniq;
7142
+
perf->pktRecv = m_stats.traceRecv;
7143
+
perf->pktRecvUnique = m_stats.traceRecvUniq;
7144
+
perf->pktSndLoss = m_stats.traceSndLoss;
7145
+
perf->pktRcvLoss = m_stats.traceRcvLoss;
7146
+
perf->pktRetrans = m_stats.traceRetrans;
7147
+
perf->pktRcvRetrans = m_stats.traceRcvRetrans;
7148
+
perf->pktSentACK = m_stats.sentACK;
7149
+
perf->pktRecvACK = m_stats.recvACK;
7150
+
perf->pktSentNAK = m_stats.sentNAK;
7151
+
perf->pktRecvNAK = m_stats.recvNAK;
7152
+
perf->usSndDuration = m_stats.sndDuration;
7153
+
perf->pktReorderDistance = m_stats.traceReorderDistance;
7154
+
perf->pktReorderTolerance = m_iReorderTolerance;
7155
+
perf->pktRcvAvgBelatedTime = m_stats.traceBelatedTime;
7156
+
perf->pktRcvBelated = m_stats.traceRcvBelated;
7157
+
7158
+
perf->pktSndFilterExtra = m_stats.sndFilterExtra;
7159
+
perf->pktRcvFilterExtra = m_stats.rcvFilterExtra;
7160
+
perf->pktRcvFilterSupply = m_stats.rcvFilterSupply;
7161
+
perf->pktRcvFilterLoss = m_stats.rcvFilterLoss;
7162
+
7163
+
/* perf byte counters include all headers (SRT+UDP+IP) */
7164
+
perf->byteSent = m_stats.traceBytesSent + (m_stats.traceSent * pktHdrSize);
7165
+
perf->byteSentUnique = m_stats.traceBytesSentUniq + (m_stats.traceSentUniq * pktHdrSize);
7166
+
perf->byteRecv = m_stats.traceBytesRecv + (m_stats.traceRecv * pktHdrSize);
7167
+
perf->byteRecvUnique = m_stats.traceBytesRecvUniq + (m_stats.traceRecvUniq * pktHdrSize);
7168
+
perf->byteRetrans = m_stats.traceBytesRetrans + (m_stats.traceRetrans * pktHdrSize);
7169
+
perf->byteRcvLoss = m_stats.traceRcvBytesLoss + (m_stats.traceRcvLoss * pktHdrSize);
7170
+
7171
+
perf->pktSndDrop = m_stats.traceSndDrop;
7172
+
perf->pktRcvDrop = m_stats.traceRcvDrop + m_stats.traceRcvUndecrypt;
7173
+
perf->byteSndDrop = m_stats.traceSndBytesDrop + (m_stats.traceSndDrop * pktHdrSize);
7174
+
perf->byteRcvDrop =
7175
+
m_stats.traceRcvBytesDrop + (m_stats.traceRcvDrop * pktHdrSize) + m_stats.traceRcvBytesUndecrypt;
7176
+
perf->pktRcvUndecrypt = m_stats.traceRcvUndecrypt;
7177
+
perf->byteRcvUndecrypt = m_stats.traceRcvBytesUndecrypt;
7178
+
7179
+
perf->pktSentTotal = m_stats.sentTotal;
7180
+
perf->pktSentUniqueTotal = m_stats.sentUniqTotal;
7181
+
perf->pktRecvTotal = m_stats.recvTotal;
7182
+
perf->pktRecvUniqueTotal = m_stats.recvUniqTotal;
7183
+
perf->pktSndLossTotal = m_stats.sndLossTotal;
7184
+
perf->pktRcvLossTotal = m_stats.rcvLossTotal;
7185
+
perf->pktRetransTotal = m_stats.retransTotal;
7186
+
perf->pktSentACKTotal = m_stats.sentACKTotal;
7187
+
perf->pktRecvACKTotal = m_stats.recvACKTotal;
7188
+
perf->pktSentNAKTotal = m_stats.sentNAKTotal;
7189
+
perf->pktRecvNAKTotal = m_stats.recvNAKTotal;
7190
+
perf->usSndDurationTotal = m_stats.m_sndDurationTotal;
7191
+
7192
+
perf->byteSentTotal = m_stats.bytesSentTotal + (m_stats.sentTotal * pktHdrSize);
7193
+
perf->byteSentUniqueTotal = m_stats.bytesSentUniqTotal + (m_stats.sentUniqTotal * pktHdrSize);
7194
+
perf->byteRecvTotal = m_stats.bytesRecvTotal + (m_stats.recvTotal * pktHdrSize);
7195
+
perf->byteRecvUniqueTotal = m_stats.bytesRecvUniqTotal + (m_stats.recvUniqTotal * pktHdrSize);
7196
+
perf->byteRetransTotal = m_stats.bytesRetransTotal + (m_stats.retransTotal * pktHdrSize);
7197
+
perf->pktSndFilterExtraTotal = m_stats.sndFilterExtraTotal;
7198
+
perf->pktRcvFilterExtraTotal = m_stats.rcvFilterExtraTotal;
7199
+
perf->pktRcvFilterSupplyTotal = m_stats.rcvFilterSupplyTotal;
7200
+
perf->pktRcvFilterLossTotal = m_stats.rcvFilterLossTotal;
7201
+
7202
+
perf->byteRcvLossTotal = m_stats.rcvBytesLossTotal + (m_stats.rcvLossTotal * pktHdrSize);
7203
+
perf->pktSndDropTotal = m_stats.sndDropTotal;
7204
+
perf->pktRcvDropTotal = m_stats.rcvDropTotal + m_stats.m_rcvUndecryptTotal;
7205
+
perf->byteSndDropTotal = m_stats.sndBytesDropTotal + (m_stats.sndDropTotal * pktHdrSize);
7206
+
perf->byteRcvDropTotal =
7207
+
m_stats.rcvBytesDropTotal + (m_stats.rcvDropTotal * pktHdrSize) + m_stats.m_rcvBytesUndecryptTotal;
7208
+
perf->pktRcvUndecryptTotal = m_stats.m_rcvUndecryptTotal;
7209
+
perf->byteRcvUndecryptTotal = m_stats.m_rcvBytesUndecryptTotal;
7210
+
7211
+
// TODO: The following class members must be protected with a different mutex, not the m_StatsLock.
7212
+
const double interval = (double) count_microseconds(currtime - m_stats.tsLastSampleTime);
7213
+
perf->mbpsSendRate = double(perf->byteSent) * 8.0 / interval;
7214
+
perf->mbpsRecvRate = double(perf->byteRecv) * 8.0 / interval;
7215
+
perf->usPktSndPeriod = (double) count_microseconds(m_tdSendInterval.load());
7216
+
perf->pktFlowWindow = m_iFlowWindowSize.load();
7217
+
perf->pktCongestionWindow = (int)m_dCongestionWindow;
7218
+
perf->pktFlightSize = getFlightSpan();
7219
+
perf->msRTT = (double)m_iSRTT / 1000.0;
7220
+
perf->msSndTsbPdDelay = m_bPeerTsbPd ? m_iPeerTsbPdDelay_ms : 0;
7221
+
perf->msRcvTsbPdDelay = isOPT_TsbPd() ? m_iTsbPdDelay_ms : 0;
7222
+
perf->byteMSS = m_config.iMSS;
7223
+
7224
+
perf->mbpsMaxBW = m_config.llMaxBW > 0 ? Bps2Mbps(m_config.llMaxBW)
7225
+
: m_CongCtl.ready() ? Bps2Mbps(m_CongCtl->sndBandwidth())
7226
+
: 0;
7227
+
7228
+
if (clear)
7229
+
{
7230
+
m_stats.traceSndDrop = 0;
7231
+
m_stats.traceRcvDrop = 0;
7232
+
m_stats.traceSndBytesDrop = 0;
7233
+
m_stats.traceRcvBytesDrop = 0;
7234
+
m_stats.traceRcvUndecrypt = 0;
7235
+
m_stats.traceRcvBytesUndecrypt = 0;
7236
+
m_stats.traceBytesSent = m_stats.traceBytesRecv = m_stats.traceBytesRetrans = 0;
7237
+
m_stats.traceBytesSentUniq = m_stats.traceBytesRecvUniq = 0;
7238
+
m_stats.traceSent = m_stats.traceRecv
7239
+
= m_stats.traceSentUniq = m_stats.traceRecvUniq
7240
+
= m_stats.traceSndLoss = m_stats.traceRcvLoss = m_stats.traceRetrans
7241
+
= m_stats.sentACK = m_stats.recvACK = m_stats.sentNAK = m_stats.recvNAK = 0;
7242
+
m_stats.sndDuration = 0;
7243
+
m_stats.traceRcvRetrans = 0;
7244
+
m_stats.traceRcvBelated = 0;
7245
+
m_stats.traceRcvBytesLoss = 0;
7246
+
7247
+
m_stats.sndFilterExtra = 0;
7248
+
m_stats.rcvFilterExtra = 0;
7249
+
7250
+
m_stats.rcvFilterSupply = 0;
7251
+
m_stats.rcvFilterLoss = 0;
7252
+
7253
+
m_stats.tsLastSampleTime = currtime;
7254
+
}
7255
+
}
7225
7256
7226
7257
const int64_t availbw = m_iBandwidth == 1 ? m_RcvTimeWindow.getBandwidth() : m_iBandwidth.load();
7227
7258
@@ -7242,7 +7273,6 @@ void srt::CUDT::bstats(CBytePerfMon *perf, bool clear, bool instantaneous)
7242
7273
perf->pktSndBuf = m_pSndBuffer->getAvgBufSize((perf->byteSndBuf), (perf->msSndBuf));
7243
7274
}
7244
7275
perf->byteSndBuf += (perf->pktSndBuf * pktHdrSize);
7245
-
//<
7246
7276
perf->byteAvailSndBuf = (m_config.iSndBufSize - perf->pktSndBuf) * m_config.iMSS;
7247
7277
}
7248
7278
else
@@ -7285,34 +7315,6 @@ void srt::CUDT::bstats(CBytePerfMon *perf, bool clear, bool instantaneous)
7285
7315
perf->byteRcvBuf = 0;
7286
7316
perf->msRcvBuf = 0;
7287
7317
}
7288
-
7289
-
if (clear)
7290
-
{
7291
-
m_stats.traceSndDrop = 0;
7292
-
m_stats.traceRcvDrop = 0;
7293
-
m_stats.traceSndBytesDrop = 0;
7294
-
m_stats.traceRcvBytesDrop = 0;
7295
-
m_stats.traceRcvUndecrypt = 0;
7296
-
m_stats.traceRcvBytesUndecrypt = 0;
7297
-
m_stats.traceBytesSent = m_stats.traceBytesRecv = m_stats.traceBytesRetrans = 0;
7298
-
m_stats.traceBytesSentUniq = m_stats.traceBytesRecvUniq = 0;
7299
-
m_stats.traceSent = m_stats.traceRecv
7300
-
= m_stats.traceSentUniq = m_stats.traceRecvUniq
7301
-
= m_stats.traceSndLoss = m_stats.traceRcvLoss = m_stats.traceRetrans
7302
-
= m_stats.sentACK = m_stats.recvACK = m_stats.sentNAK = m_stats.recvNAK = 0;
7303
-
m_stats.sndDuration = 0;
7304
-
m_stats.traceRcvRetrans = 0;
7305
-
m_stats.traceRcvBelated = 0;
7306
-
m_stats.traceRcvBytesLoss = 0;
7307
-
7308
-
m_stats.sndFilterExtra = 0;
7309
-
m_stats.rcvFilterExtra = 0;
7310
-
7311
-
m_stats.rcvFilterSupply = 0;
7312
-
m_stats.rcvFilterLoss = 0;
7313
-
7314
-
m_stats.tsLastSampleTime = currtime;
7315
-
}
7316
7318
}
7317
7319
7318
7320
bool srt::CUDT::updateCC(ETransmissionEvent evt, const EventVariant arg)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4