3
/* nettle, low-level cryptographics library
5
* Copyright (C) 2013 Niels Möller
7
* The nettle library is free software; you can redistribute it and/or modify
8
* it under the terms of the GNU Lesser General Public License as published by
9
* the Free Software Foundation; either version 2.1 of the License, or (at your
10
* option) any later version.
12
* The nettle library is distributed in the hope that it will be useful, but
13
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
15
* License for more details.
17
* You should have received a copy of the GNU Lesser General Public License
18
* along with the nettle library; see the file COPYING.LIB. If not, write to
19
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
36
#if HAVE_CLOCK_GETTIME && defined CLOCK_PROCESS_CPUTIME_ID
37
#define TRY_CLOCK_GETTIME 1
38
struct timespec cgt_start;
40
static void NORETURN PRINTF_STYLE(1,2)
41
die(const char *format, ...)
44
va_start(args, format);
45
vfprintf(stderr, format, args);
55
return clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &now) == 0;
61
if (clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &cgt_start) < 0)
62
die("clock_gettime failed: %s\n", strerror(errno));
69
if (clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end) < 0)
70
die("clock_gettime failed: %s\n", strerror(errno));
72
return end.tv_sec - cgt_start.tv_sec
73
+ 1e-9 * (end.tv_nsec - cgt_start.tv_nsec);
75
#endif /* !HAVE_CLOCK_GETTIME */
77
static clock_t clock_start;
80
clock_time_start(void)
82
clock_start = clock();
88
return (double) (clock() - (clock_start)) / CLOCKS_PER_SEC;
91
void (*time_start)(void) = clock_time_start;
92
double (*time_end)(void) = clock_time_end;
96
/* Choose timing function */
100
time_start = cgt_time_start;
101
time_end = cgt_time_end;
105
fprintf(stderr, "clock_gettime not working, falling back to clock\n");
106
time_start = clock_time_start;
107
time_end = clock_time_end;