Skip to content

Commit f321975

Browse files
committed
More agressive jitter calculation algorithm
1 parent 30eac77 commit f321975

2 files changed

Lines changed: 27 additions & 15 deletions

File tree

lib/dtsc.cpp

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2655,9 +2655,11 @@ namespace DTSC{
26552655
for (int i = 0; i < 8; ++i){
26562656
trueTime[i] = 0;
26572657
packTime[i] = 0;
2658+
peaks[i] = 0;
26582659
}
2659-
maxJitter = 200;
2660+
maxJitter = 120;
26602661
lastTime = 0;
2662+
curJitter = 0;
26612663
x = 0;
26622664
}
26632665

@@ -2676,18 +2678,27 @@ namespace DTSC{
26762678
lastTime = t;
26772679
curJitter = 0;
26782680
}
2679-
if (t > lastTime + 2500){
2680-
if ((x % 4) == 0){
2681-
if (maxJitter > 50 && curJitter < maxJitter - 50){
2682-
MEDIUM_MSG("Jitter lowered from %" PRIu64 " to %" PRIu64 " ms", maxJitter, curJitter);
2683-
maxJitter = curJitter;
2684-
}
2685-
curJitter = maxJitter*0.90;
2686-
}
2681+
if (t >= lastTime + 2500) {
26872682
++x;
26882683
trueTime[x % 8] = curMs;
26892684
packTime[x % 8] = t;
2685+
peaks[x % 8] = curJitter;
26902686
lastTime = t;
2687+
curJitter = 0;
2688+
2689+
uint64_t totJitter = 0;
2690+
uint64_t maxPeak = 0;
2691+
for (int i = 0; i < 8; ++i) {
2692+
totJitter += peaks[i];
2693+
if (peaks[i] > maxPeak) { maxPeak = peaks[i]; }
2694+
}
2695+
uint64_t weighted = (totJitter / 8 + maxPeak * 2) / 3 + 1;
2696+
// Limit lowering to max 250ms per step (10% of measurement window size)
2697+
if (maxJitter > weighted + 500) { weighted = maxJitter - 500; }
2698+
maxJitter = (maxJitter + weighted) / 2;
2699+
INFO_MSG("Average peak %" PRIu64 "ms, highest peak %" PRIu64 "ms, weighted %" PRIu64 "ms. New jitter %" PRIu64
2700+
"ms",
2701+
totJitter / 8, maxPeak, weighted, maxJitter);
26912702
}
26922703
uint64_t realTime = (curMs - trueTime[(x + 1) % 8]);
26932704
uint64_t arriTime = (t - packTime[(x + 1) % 8]);

lib/dtsc.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -303,12 +303,13 @@ namespace DTSC{
303303

304304
class jitterTimer{
305305
public:
306-
uint64_t trueTime[8]; // Array of bootMS-based measurement points
307-
uint64_t packTime[8]; // Array of corresponding packet times
308-
uint64_t curJitter; // Maximum jitter measurement in past 10 seconds
309-
unsigned int x; // Current indice within above two arrays
310-
uint64_t maxJitter; // Highest jitter ever observed by this jitterTimer
311-
uint64_t lastTime; // Last packet used for a measurement point
306+
uint64_t trueTime[8]; ///< Array of bootMS-based measurement points
307+
uint64_t packTime[8]; ///< Array of corresponding packet times
308+
uint64_t curJitter; ///< Maximum jitter measurement in the current time window so far
309+
unsigned int x; ///< Current indice within above two arrays
310+
uint64_t peaks[8]; ///< Highest jitter observed in each time window
311+
uint64_t maxJitter; ///< Highest jitter ever observed by this jitterTimer
312+
uint64_t lastTime; ///< Last packet used for a measurement point
312313
jitterTimer();
313314
uint64_t addPack(uint64_t t);
314315
};

0 commit comments

Comments
 (0)