Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

drifttracer: add cumulativeOverdrift and expose via stats #2481

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions srtcore/buffer_rcv.h
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,8 @@ class CRcvBuffer
}

int64_t getDrift() const { return m_tsbpd.drift(); }
int64_t getOverdrift() const { return m_tsbpd.overdrift(); }
int64_t getCumulativeOverdrift() const { return m_tsbpd.cumulativeoverdrift(); }

// TODO: make thread safe?
int debugGetSize() const
Expand Down
3 changes: 3 additions & 0 deletions srtcore/core.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7348,13 +7348,15 @@ void srt::CUDT::bstats(CBytePerfMon *perf, bool clear, bool instantaneous)
{
perf->pktRcvBuf = m_pRcvBuffer->getRcvAvgDataSize(perf->byteRcvBuf, perf->msRcvBuf);
}
perf->usRcvCumulativeOverdrift = m_pRcvBuffer->getCumulativeOverdrift();
}
else
{
perf->byteAvailRcvBuf = 0;
perf->pktRcvBuf = 0;
perf->byteRcvBuf = 0;
perf->msRcvBuf = 0;
perf->usRcvCumulativeOverdrift = 0;
}

leaveCS(m_ConnectionLock);
Expand All @@ -7368,6 +7370,7 @@ void srt::CUDT::bstats(CBytePerfMon *perf, bool clear, bool instantaneous)
perf->msSndBuf = 0;
perf->byteRcvBuf = 0;
perf->msRcvBuf = 0;
perf->usRcvCumulativeOverdrift = 0;
}
}

Expand Down
1 change: 1 addition & 0 deletions srtcore/srt.h
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,7 @@ struct CBytePerfMon
int byteRcvBuf; // Undelivered bytes of UDT receiver
int msRcvBuf; // Undelivered timespan (msec) of UDT receiver
int msRcvTsbPdDelay; // Timestamp-based Packet Delivery Delay
int64_t usRcvCumulativeOverdrift; // Cumulative overdrift, in microseconds

int pktSndFilterExtraTotal; // number of control packets supplied by packet filter
int pktRcvFilterExtraTotal; // number of control packets received and not supplied back
Expand Down
5 changes: 4 additions & 1 deletion srtcore/tsbpd_time.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ class drift_logger
int64_t drift_sample,
int64_t drift,
int64_t overdrift,
int64_t cumulativeoverdrift,
const srt::sync::steady_clock::time_point& pkt_base,
const srt::sync::steady_clock::time_point& tsbpd_base)
{
Expand All @@ -61,6 +62,7 @@ class drift_logger
m_fout << drift_sample << ",";
m_fout << drift << ",";
m_fout << overdrift << ",";
m_fout << cumulativeoverdrift << ",";
m_fout << str_pkt_base << ",";
m_fout << str_tbase << "\n";
m_fout.flush();
Expand All @@ -70,7 +72,7 @@ class drift_logger
void print_header()
{
m_fout << "usElapsedStd,usAckAckTimestampStd,";
m_fout << "usRTTStd,usDriftSampleStd,usDriftStd,usOverdriftStd,tsPktBase,TSBPDBase\n";
m_fout << "usRTTStd,usDriftSampleStd,usDriftStd,usOverdriftStd,usCumulativeOverdriftStd,tsPktBase,TSBPDBase\n";
}

void create_file()
Expand Down Expand Up @@ -150,6 +152,7 @@ bool CTsbpdTime::addDriftSample(uint32_t usPktTimestamp, const time_point& tsPkt
count_microseconds(tdDrift),
m_DriftTracer.drift(),
m_DriftTracer.overdrift(),
m_DriftTracer.cumulativeoverdrift(),
tsPktBaseTime,
m_tsTsbPdTimeBase);
#endif
Expand Down
4 changes: 4 additions & 0 deletions srtcore/tsbpd_time.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,10 @@ class CTsbpdTime
/// @return current overdrift value.
int64_t overdrift() const { return m_DriftTracer.overdrift(); }

/// @brief Get current cumulative overdrift value.
/// @return current cumulative overdrift value.
int64_t cumulativeoverdrift() const { return m_DriftTracer.cumulativeoverdrift(); }

/// @brief Get internal state to apply to another member of a socket group.
/// @param w_tb TsbPd base time.
/// @param w_udrift drift value.
Expand Down
4 changes: 4 additions & 0 deletions srtcore/utilities.h
Original file line number Diff line number Diff line change
Expand Up @@ -824,6 +824,7 @@ class DriftTracer
{
int64_t m_qDrift;
int64_t m_qOverdrift;
int64_t m_qCumulativeOverdrift;

int64_t m_qDriftSum;
unsigned m_uDriftSpan;
Expand All @@ -832,6 +833,7 @@ class DriftTracer
DriftTracer()
: m_qDrift(0)
, m_qOverdrift(0)
, m_qCumulativeOverdrift(0)
, m_qDriftSum(0)
, m_uDriftSpan(0)
{}
Expand Down Expand Up @@ -865,6 +867,7 @@ class DriftTracer
{
m_qOverdrift = m_qDrift < 0 ? -MAX_DRIFT : MAX_DRIFT;
m_qDrift -= m_qOverdrift;
m_qCumulativeOverdrift += m_qOverdrift;
}

// printDriftOffset(m_qOverdrift, m_qDrift);
Expand Down Expand Up @@ -904,6 +907,7 @@ class DriftTracer
// overdrift.
int64_t drift() const { return m_qDrift; }
int64_t overdrift() const { return m_qOverdrift; }
int64_t cumulativeoverdrift() const { return m_qCumulativeOverdrift; }
};

template <class KeyType, class ValueType>
Expand Down