+90
-6
lines changedFilter options
+90
-6
lines changed Original file line number Diff line number Diff line change
@@ -1722,6 +1722,75 @@ unsigned CRcvBuffer::getRcvAvgPayloadSize() const
1722
1722
return m_uAvgPayloadSz;
1723
1723
}
1724
1724
1725
+
CRcvBuffer::ReadingState CRcvBuffer::debugGetReadingState() const
1726
+
{
1727
+
ReadingState readstate;
1728
+
1729
+
readstate.iNumAcknowledged = 0;
1730
+
readstate.iNumUnacknowledged = m_iMaxPos;
1731
+
1732
+
if ((NULL != m_pUnit[m_iStartPos]) && (m_pUnit[m_iStartPos]->m_iFlag == CUnit::GOOD))
1733
+
{
1734
+
if (m_tsbpd.isEnabled())
1735
+
readstate.tsStart = m_tsbpd.getPktTsbPdTime(m_pUnit[m_iStartPos]->m_Packet.getMsgTimeStamp());
1736
+
1737
+
readstate.iNumAcknowledged = m_iLastAckPos > m_iStartPos
1738
+
? m_iLastAckPos - m_iStartPos
1739
+
: m_iLastAckPos + (m_iSize - m_iStartPos);
1740
+
}
1741
+
1742
+
// All further stats are valid if TSBPD is enabled.
1743
+
if (!m_tsbpd.isEnabled())
1744
+
return readstate;
1745
+
1746
+
// m_iLastAckPos points to the first unacknowledged packet
1747
+
const int iLastAckPos = (m_iLastAckPos - 1) % m_iSize;
1748
+
if (m_iLastAckPos != m_iStartPos && (NULL != m_pUnit[iLastAckPos]) && (m_pUnit[iLastAckPos]->m_iFlag == CUnit::GOOD))
1749
+
{
1750
+
readstate.tsLastAck = m_tsbpd.getPktTsbPdTime(m_pUnit[iLastAckPos]->m_Packet.getMsgTimeStamp());
1751
+
}
1752
+
1753
+
const int iEndPos = (m_iLastAckPos + m_iMaxPos - 1) % m_iSize;
1754
+
if (m_iMaxPos == 0)
1755
+
{
1756
+
readstate.tsEnd = readstate.tsLastAck;
1757
+
}
1758
+
else if ((NULL != m_pUnit[iEndPos]) && (m_pUnit[iEndPos]->m_iFlag == CUnit::GOOD))
1759
+
{
1760
+
readstate.tsEnd = m_tsbpd.getPktTsbPdTime(m_pUnit[iEndPos]->m_Packet.getMsgTimeStamp());
1761
+
}
1762
+
1763
+
return readstate;
1764
+
}
1765
+
1766
+
string CRcvBuffer::strFullnessState(const time_point& tsNow) const
1767
+
{
1768
+
const ReadingState bufstate = debugGetReadingState();
1769
+
stringstream ss;
1770
+
1771
+
ss << "Space avail " << getAvailBufSize() << "/" << m_iSize;
1772
+
ss << " pkts. Packets ACKed: " << bufstate.iNumAcknowledged;
1773
+
if (!is_zero(bufstate.tsStart) && !is_zero(bufstate.tsLastAck))
1774
+
{
1775
+
ss << " (TSBPD ready in ";
1776
+
ss << count_milliseconds(bufstate.tsStart - tsNow);
1777
+
ss << " : ";
1778
+
ss << count_milliseconds(bufstate.tsLastAck - tsNow);
1779
+
ss << " ms)";
1780
+
}
1781
+
1782
+
ss << ", not ACKed: " << bufstate.iNumUnacknowledged;
1783
+
if (!is_zero(bufstate.tsStart) && !is_zero(bufstate.tsEnd))
1784
+
{
1785
+
ss << ", timespan ";
1786
+
ss << count_milliseconds(bufstate.tsEnd - bufstate.tsStart);
1787
+
ss << " ms";
1788
+
}
1789
+
1790
+
ss << ". " SRT_SYNC_CLOCK_STR " drift " << getDrift() / 1000 << " ms.";
1791
+
return ss.str();
1792
+
}
1793
+
1725
1794
void CRcvBuffer::dropMsg(int32_t msgno, bool using_rexmit_flag)
1726
1795
{
1727
1796
for (int i = m_iStartPos, n = shift(m_iLastAckPos, m_iMaxPos); i != n; i = shiftFwd(i))
Original file line number Diff line number Diff line change
@@ -348,6 +348,21 @@ class CRcvBuffer
348
348
/// @return size (bytes) of payload size
349
349
unsigned getRcvAvgPayloadSize() const;
350
350
351
+
struct ReadingState
352
+
{
353
+
time_point tsStart;
354
+
time_point tsLastAck;
355
+
time_point tsEnd;
356
+
int iNumAcknowledged;
357
+
int iNumUnacknowledged;
358
+
};
359
+
360
+
ReadingState debugGetReadingState() const;
361
+
362
+
/// Form a string of the current buffer fullness state.
363
+
/// number of packets acknowledged, TSBPD readiness, etc.
364
+
std::string strFullnessState(const time_point& tsNow) const;
365
+
351
366
/// Mark the message to be dropped from the message list.
352
367
/// @param [in] msgno message number.
353
368
/// @param [in] using_rexmit_flag whether the MSGNO field uses rexmit flag (if not, one more bit is part of the
@@ -462,6 +477,7 @@ class CRcvBuffer
462
477
bool getRcvReadyMsg(time_point& w_tsbpdtime, int32_t& w_curpktseq, int upto);
463
478
464
479
public:
480
+
/// @brief Get clock drift in microseconds.
465
481
int64_t getDrift() const { return m_tsbpd.drift(); }
466
482
467
483
public:
Original file line number Diff line number Diff line change
@@ -9622,12 +9622,11 @@ int CUDT::processData(CUnit* in_unit)
9622
9622
}
9623
9623
else
9624
9624
{
9625
-
LOGC(qrlog.Warn, log << CONID() << "No room to store incoming packet: offset="
9626
-
<< offset << " avail=" << avail_bufsize
9627
-
<< " ack.seq=" << m_iRcvLastSkipAck << " pkt.seq=" << rpkt.m_iSeqNo
9628
-
<< " rcv-remain=" << m_pRcvBuffer->debugGetSize()
9629
-
<< " drift=" << m_pRcvBuffer->getDrift()
9630
-
);
9625
+
LOGC(qrlog.Warn, log << CONID() << "No room to store incoming packet seqno " << rpkt.m_iSeqNo
9626
+
<< ", insert offset " << offset << ". "
9627
+
<< m_pRcvBuffer->strFullnessState(steady_clock::now())
9628
+
);
9629
+
9631
9630
return -1;
9632
9631
}
9633
9632
}
You can’t perform that action at this time.
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