1 /* timestats.c
2  * routines for time statistics
3  * Copyright 2003 Lars Roland
4  *
5  * Wireshark - Network traffic analyzer
6  * By Gerald Combs <gerald@wireshark.org>
7  * Copyright 1998 Gerald Combs
8  *
9  * SPDX-License-Identifier: GPL-2.0-or-later
10  */
11 
12 #include "config.h"
13 
14 #include "timestats.h"
15 
16 /* Initialize a timestat_t struct */
17 void
18 time_stat_init(timestat_t *stats)
19 {
20 	stats->num = 0;
21 	stats->min_num = 0;
22 	stats->max_num = 0;
23 	nstime_set_zero(&stats->min);
24 	nstime_set_zero(&stats->max);
25 	nstime_set_zero(&stats->tot);
26 	stats->variance = 0.0;
27 }
28 
29 /* Update a timestat_t struct with a new sample */
30 void
31 time_stat_update(timestat_t *stats, const nstime_t *delta, packet_info *pinfo)
32 {
33 	if(stats->num==0){
34 		stats->max=*delta;
35 		stats->max_num=pinfo->num;
36 		stats->min=*delta;
37 		stats->min_num=pinfo->num;
38 	}
39 
40 	if( (delta->secs<stats->min.secs)
41 	||( (delta->secs==stats->min.secs)
42 	  &&(delta->nsecs<stats->min.nsecs) ) ){
43 		stats->min=*delta;
44 		stats->min_num=pinfo->num;
45 	}
46 
47 	if( (delta->secs>stats->max.secs)
48 	||( (delta->secs==stats->max.secs)
49 	  &&(delta->nsecs>stats->max.nsecs) ) ){
50 		stats->max=*delta;
51 		stats->max_num=pinfo->num;
52 	}
53 
54 	nstime_add(&stats->tot, delta);
55 
56 	stats->num++;
57 }
58 
59 /*
60  * get_average - function
61  *
62  * function to calculate the average
63  * returns the average as a gdouble , time base is milli seconds
64  */
65 
66 gdouble get_average(const nstime_t *sum, guint32 num)
67 {
68 	gdouble average;
69 
70 	if(num > 0) {
71 		average = (double)sum->secs*1000 + (double)sum->nsecs/1000000;
72 		average /= num;
73 	}
74 	else {
75 		average = 0;
76 	}
77 	return average;
78 }
79 
80 /*
81  * Editor modelines  -  https://www.wireshark.org/tools/modelines.html
82  *
83  * Local variables:
84  * c-basic-offset: 8
85  * tab-width: 8
86  * indent-tabs-mode: t
87  * End:
88  *
89  * vi: set shiftwidth=8 tabstop=8 noexpandtab:
90  * :indentSize=8:tabSize=8:noTabs=false:
91  */
92