Change StreamTiming::TxRxKey format

The format now matches the ttag list format input in recordTxTime() making
that API a little more optimized.
This commit is contained in:
Srivats P 2023-06-17 12:14:18 +05:30
parent 5ec7010c51
commit ee45aaf0eb
2 changed files with 18 additions and 14 deletions

View File

@ -119,7 +119,7 @@ int StreamTiming::processRecords()
struct timespec diff;
timespecsub(&rxTime, &txTime, &diff);
uint guid = i.key() >> 8;
uint guid = guidFromKey(i.key());
uint portId = i.value().portId;
if (!timing_.contains(portId))
@ -132,7 +132,7 @@ int StreamTiming::processRecords()
count++;
timingDebug("[%u/%u/%u] diff %ld.%09ld (%ld.%09ld - %ld.%09ld)",
i.value().portId, guid, i.key() & 0xFF,
i.value().portId, guid, ttagIdFromKey(i.key()),
diff.tv_sec, diff.tv_nsec,
rxTime.tv_sec, rxTime.tv_nsec,
txTime.tv_sec, txTime.tv_nsec);

View File

@ -62,10 +62,6 @@ private:
int processRecords();
int deleteStaleRecords();
quint32 makeKey(uint guid, uint ttagId) {
return guid << 8 | (ttagId & 0xFF);
}
// XXX: use only time intervals, not absolute time
quint64 timespecToNsecs(const struct timespec &interval) {
return interval.tv_nsec + interval.tv_sec*1e9;
@ -83,16 +79,26 @@ private:
QSet<uint> activePortSet_;
// XXX: TxRxKey = guid (24 bit MSB) + ttagid (8 bit LSB)
// TODO: encode tx port in in packet and use as part of key
// XXX: TxRxKey = ttagid (8 bit MSB) + guid (24 bit LSB)
// TODO: encode tx port in packet and use as part of key
typedef quint32 TxRxKey;
TxRxKey makeKey(uint guid, uint ttagId) {
return (ttagId << 24 ) | (guid & 0x00FFFFFF);
}
uint guidFromKey(TxRxKey key) {
return uint(key) & 0x00FFFFFF;
}
uint ttagIdFromKey(TxRxKey key) {
return uint(key) >> 24;
}
QHash<TxRxKey, TtagData> txHash_;
QHash<TxRxKey, TtagData> rxHash_;
QMutex txHashLock_;
QMutex rxHashLock_;
typedef uint PortIdKey;
typedef uint GuidKey;
typedef uint GuidKey; // guid only, no ttagid
typedef QHash<GuidKey, Timing> PortTiming;
QHash<PortIdKey, PortTiming*> timing_;
QMutex timingLock_;
@ -163,14 +169,12 @@ bool StreamTiming::recordTxTime(uint portId, uint *ttagList, int count,
TtagData value = { .timeStamp = timestamp, .portId = portId};
QMutexLocker locker(&txHashLock_);
// FIXME: Change TxRxKey to match the format passed to this function
for (int i = 0; i < count; i++) {
uint guid = ttagList[i] & 0x00FFFFFF;
uint ttagId = ttagList[i] >> 24;
TxRxKey key = makeKey(guid, ttagId);
TxRxKey key = TxRxKey(ttagList[i]);
timingDebug("[%d TX] %ld:%ld ttag %u guid %u", portId,
timestamp.tv_sec, long(timestamp.tv_nsec), ttagId, guid);
timestamp.tv_sec, long(timestamp.tv_nsec),
ttagIdFromKey(key), guidFromKey(key));
txHash_.insert(key, value);
}