Skip to content

Commit 4d3e7a4

Browse files
committed
add a wider variety of jitter calculations
1 parent eb68892 commit 4d3e7a4

File tree

3 files changed

+68
-9
lines changed

3 files changed

+68
-9
lines changed

reliable.c

+61-6
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,9 @@ struct reliable_endpoint_t
511511
float rtt_min;
512512
float rtt_max;
513513
float rtt_avg;
514-
float jitter;
514+
float jitter_avg_vs_min_rtt;
515+
float jitter_max_vs_min_rtt;
516+
float jitter_stddev_vs_avg_rtt;
515517
float packet_loss;
516518
float sent_bandwidth_kbps;
517519
float received_bandwidth_kbps;
@@ -1384,7 +1386,7 @@ void reliable_endpoint_update( struct reliable_endpoint_t * endpoint, double tim
13841386
}
13851387
}
13861388

1387-
// calculate jitter
1389+
// calculate average jitter vs. min rtt
13881390
{
13891391
float sum = 0.0f;
13901392
int count = 0;
@@ -1398,11 +1400,51 @@ void reliable_endpoint_update( struct reliable_endpoint_t * endpoint, double tim
13981400
}
13991401
if ( count > 0 )
14001402
{
1401-
endpoint->jitter = sum / (float)count;
1403+
endpoint->jitter_avg_vs_min_rtt = sum / (float)count;
14021404
}
14031405
else
14041406
{
1405-
endpoint->jitter = 0.0f;
1407+
endpoint->jitter_avg_vs_min_rtt = 0.0f;
1408+
}
1409+
}
1410+
1411+
// calculate max jitter vs. min rtt
1412+
{
1413+
float max = 0.0f;
1414+
for ( int i = 0; i < endpoint->config.rtt_history_size; i++ )
1415+
{
1416+
if ( endpoint->rtt_history_buffer[i] >= 0.0f )
1417+
{
1418+
float difference = ( endpoint->rtt_history_buffer[i] - endpoint->rtt_min );
1419+
if ( difference > max )
1420+
{
1421+
max = difference;
1422+
}
1423+
}
1424+
}
1425+
endpoint->jitter_max_vs_min_rtt = max;
1426+
}
1427+
1428+
// calculate stddev jitter vs. avg rtt
1429+
{
1430+
float sum = 0.0f;
1431+
int count = 0;
1432+
for ( int i = 0; i < endpoint->config.rtt_history_size; i++ )
1433+
{
1434+
if ( endpoint->rtt_history_buffer[i] >= 0.0f )
1435+
{
1436+
float deviation = ( endpoint->rtt_history_buffer[i] - endpoint->rtt_min );
1437+
sum += deviation * deviation;
1438+
count++;
1439+
}
1440+
}
1441+
if ( count > 0 )
1442+
{
1443+
endpoint->jitter_stddev_vs_avg_rtt = pow( sum / (float)count, 0.5f );
1444+
}
1445+
else
1446+
{
1447+
endpoint->jitter_stddev_vs_avg_rtt = 0.0f;
14061448
}
14071449
}
14081450

@@ -1592,10 +1634,23 @@ float reliable_endpoint_rtt_avg( struct reliable_endpoint_t * endpoint )
15921634
return endpoint->rtt_avg;
15931635
}
15941636

1595-
float reliable_endpoint_jitter( struct reliable_endpoint_t * endpoint )
1637+
float reliable_endpoint_jitter_avg_vs_min_rtt( struct reliable_endpoint_t * endpoint )
1638+
{
1639+
reliable_assert( endpoint );
1640+
return endpoint->jitter_avg_vs_min_rtt;
1641+
}
1642+
1643+
float reliable_endpoint_jitter_max_vs_min_rtt( struct reliable_endpoint_t * endpoint )
1644+
{
1645+
reliable_assert( endpoint );
1646+
return endpoint->jitter_max_vs_min_rtt;
1647+
}
1648+
1649+
1650+
float reliable_endpoint_jitter_stddev_vs_avg_rtt( struct reliable_endpoint_t * endpoint )
15961651
{
15971652
reliable_assert( endpoint );
1598-
return endpoint->jitter;
1653+
return endpoint->jitter_stddev_vs_avg_rtt;
15991654
}
16001655

16011656
float reliable_endpoint_packet_loss( struct reliable_endpoint_t * endpoint )

reliable.h

+6-2
Original file line numberDiff line numberDiff line change
@@ -138,15 +138,19 @@ void reliable_endpoint_reset( struct reliable_endpoint_t * endpoint );
138138

139139
void reliable_endpoint_update( struct reliable_endpoint_t * endpoint, double time );
140140

141-
float reliable_endpoint_rtt( struct reliable_endpoint_t * endpoint );
141+
float reliable_endpoint_rtt( struct reliable_endpoint_t * endpoint ); // exponentially smoothed moving average
142142

143143
float reliable_endpoint_rtt_min( struct reliable_endpoint_t * endpoint );
144144

145145
float reliable_endpoint_rtt_max( struct reliable_endpoint_t * endpoint );
146146

147147
float reliable_endpoint_rtt_avg( struct reliable_endpoint_t * endpoint );
148148

149-
float reliable_endpoint_jitter( struct reliable_endpoint_t * endpoint );
149+
float reliable_endpoint_jitter_avg_vs_min_rtt( struct reliable_endpoint_t * endpoint );
150+
151+
float reliable_endpoint_jitter_max_vs_min_rtt( struct reliable_endpoint_t * endpoint );
152+
153+
float reliable_endpoint_jitter_stddev_vs_avg_rtt( struct reliable_endpoint_t * endpoint );
150154

151155
float reliable_endpoint_packet_loss( struct reliable_endpoint_t * endpoint );
152156

stats.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ void stats_iteration( double time )
222222
counters[RELIABLE_ENDPOINT_COUNTER_NUM_PACKETS_RECEIVED],
223223
counters[RELIABLE_ENDPOINT_COUNTER_NUM_PACKETS_ACKED],
224224
(int) reliable_endpoint_rtt_min( global_context.client ),
225-
(int) reliable_endpoint_jitter( global_context.client ),
225+
(int) reliable_endpoint_jitter_avg_vs_min_rtt( global_context.client ),
226226
(int) ( reliable_endpoint_packet_loss( global_context.client ) + 0.5f ),
227227
(int) sent_bandwidth_kbps,
228228
(int) received_bandwidth_kbps,

0 commit comments

Comments
 (0)