• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) 2015 Cyril Hrubis <chrubis@suse.cz>
4  */
5 
6 #include <errno.h>
7 
8 #define TST_NO_DEFAULT_MAIN
9 
10 #include "tst_test.h"
11 #include "tst_timer.h"
12 #include "tst_clocks.h"
13 #include "lapi/posix_clocks.h"
14 
15 static struct timespec start_time, stop_time;
16 static clockid_t clock_id;
17 
tst_timer_check(clockid_t clk_id)18 void tst_timer_check(clockid_t clk_id)
19 {
20 	if (tst_clock_gettime(clk_id, &start_time)) {
21 		if (errno == EINVAL) {
22 			tst_brk(TCONF,
23 			         "Clock id %s(%u) not supported by kernel",
24 				 tst_clock_name(clk_id), clk_id);
25 			return;
26 		}
27 
28 		tst_brk(TBROK | TERRNO, "tst_clock_gettime() failed");
29 	}
30 }
31 
tst_timer_start(clockid_t clk_id)32 void tst_timer_start(clockid_t clk_id)
33 {
34 	clock_id = clk_id;
35 
36 	if (tst_clock_gettime(clock_id, &start_time))
37 		tst_res(TWARN | TERRNO, "tst_clock_gettime() failed");
38 }
39 
tst_timer_expired_ms(long long ms)40 int tst_timer_expired_ms(long long ms)
41 {
42 	struct timespec cur_time;
43 
44 	if (tst_clock_gettime(clock_id, &cur_time))
45 		tst_res(TWARN | TERRNO, "tst_clock_gettime() failed");
46 
47 	return tst_timespec_diff_ms(cur_time, start_time) >= ms;
48 }
49 
tst_timer_stop(void)50 void tst_timer_stop(void)
51 {
52 	if (tst_clock_gettime(clock_id, &stop_time))
53 		tst_res(TWARN | TERRNO, "tst_clock_gettime() failed");
54 }
55 
tst_timer_elapsed(void)56 struct timespec tst_timer_elapsed(void)
57 {
58 	return tst_timespec_diff(stop_time, start_time);
59 }
60