1 /* Utilities for benchmarks.
2 Copyright (C) 2018-2025 Free Software Foundation, Inc.
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <https://www.gnu.org/licenses/>. */
18 #include <sys/resource.h>
23 /* Filled when the timings start. */
24 struct timeval real_start
;
25 struct timeval user_start
;
26 struct timeval sys_start
;
27 /* Filled when the timings end. */
34 timing_start (struct timings_state
*ts
)
38 getrusage (RUSAGE_SELF
, &usage
);
39 ts
->user_start
= usage
.ru_utime
;
40 ts
->sys_start
= usage
.ru_stime
;
42 gettimeofday (&ts
->real_start
, NULL
);
46 timing_end (struct timings_state
*ts
)
48 struct timeval real_end
;
51 gettimeofday (&real_end
, NULL
);
53 getrusage (RUSAGE_SELF
, &usage
);
55 ts
->real_usec
= (real_end
.tv_sec
- ts
->real_start
.tv_sec
) * 1000000
56 + real_end
.tv_usec
- ts
->real_start
.tv_usec
;
57 ts
->user_usec
= (usage
.ru_utime
.tv_sec
- ts
->user_start
.tv_sec
) * 1000000
58 + usage
.ru_utime
.tv_usec
- ts
->user_start
.tv_usec
;
59 ts
->sys_usec
= (usage
.ru_stime
.tv_sec
- ts
->sys_start
.tv_sec
) * 1000000
60 + usage
.ru_stime
.tv_usec
- ts
->sys_start
.tv_usec
;
63 _GL_UNUSED
static void
64 timing_output (const struct timings_state
*ts
)
66 printf ("real %10.6f\n", (double)ts
->real_usec
/ 1000000.0);
67 printf ("user %7.3f\n", (double)ts
->user_usec
/ 1000000.0);
68 printf ("sys %7.3f\n", (double)ts
->sys_usec
/ 1000000.0);