xref: /openbmc/linux/tools/perf/util/time-utils.h (revision b3509b6e)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2fdf9dc4bSDavid Ahern #ifndef _TIME_UTILS_H_
3fdf9dc4bSDavid Ahern #define _TIME_UTILS_H_
4fdf9dc4bSDavid Ahern 
5c5e4027eSArnaldo Carvalho de Melo #include <stddef.h>
6f3711020SArnaldo Carvalho de Melo #include <time.h>
7c5e4027eSArnaldo Carvalho de Melo #include <linux/types.h>
8c5e4027eSArnaldo Carvalho de Melo 
9fdf9dc4bSDavid Ahern struct perf_time_interval {
10fdf9dc4bSDavid Ahern 	u64 start, end;
11fdf9dc4bSDavid Ahern };
12fdf9dc4bSDavid Ahern 
13c284d669SDavid Ahern int parse_nsec_time(const char *str, u64 *ptime);
14c284d669SDavid Ahern 
15fdf9dc4bSDavid Ahern int perf_time__parse_str(struct perf_time_interval *ptime, const char *ostr);
16fdf9dc4bSDavid Ahern 
1713a70f35SJin Yao int perf_time__percent_parse_str(struct perf_time_interval *ptime_buf, int num,
1813a70f35SJin Yao 				 const char *ostr, u64 start, u64 end);
1913a70f35SJin Yao 
205a031f88SJin Yao struct perf_time_interval *perf_time__range_alloc(const char *ostr, int *size);
215a031f88SJin Yao 
22fdf9dc4bSDavid Ahern bool perf_time__skip_sample(struct perf_time_interval *ptime, u64 timestamp);
23fdf9dc4bSDavid Ahern 
249a9b8b4bSJin Yao bool perf_time__ranges_skip_sample(struct perf_time_interval *ptime_buf,
259a9b8b4bSJin Yao 				   int num, u64 timestamp);
269a9b8b4bSJin Yao 
27284c4e18SJin Yao struct perf_session;
28284c4e18SJin Yao 
29b3509b6eSAndi Kleen int perf_time__parse_for_ranges_reltime(const char *str, struct perf_session *session,
30b3509b6eSAndi Kleen 				struct perf_time_interval **ranges,
31b3509b6eSAndi Kleen 				int *range_size, int *range_num,
32b3509b6eSAndi Kleen 				bool reltime);
33b3509b6eSAndi Kleen 
34284c4e18SJin Yao int perf_time__parse_for_ranges(const char *str, struct perf_session *session,
35284c4e18SJin Yao 				struct perf_time_interval **ranges,
36284c4e18SJin Yao 				int *range_size, int *range_num);
37284c4e18SJin Yao 
38c5e4027eSArnaldo Carvalho de Melo int timestamp__scnprintf_usec(u64 timestamp, char *buf, size_t sz);
39f8c856cbSAndi Kleen int timestamp__scnprintf_nsec(u64 timestamp, char *buf, size_t sz);
40c5e4027eSArnaldo Carvalho de Melo 
41c5e4027eSArnaldo Carvalho de Melo int fetch_current_timestamp(char *buf, size_t sz);
42c5e4027eSArnaldo Carvalho de Melo 
rdclock(void)43f3711020SArnaldo Carvalho de Melo static inline unsigned long long rdclock(void)
44f3711020SArnaldo Carvalho de Melo {
45f3711020SArnaldo Carvalho de Melo 	struct timespec ts;
46f3711020SArnaldo Carvalho de Melo 
47f3711020SArnaldo Carvalho de Melo 	clock_gettime(CLOCK_MONOTONIC, &ts);
48f3711020SArnaldo Carvalho de Melo 	return ts.tv_sec * 1000000000ULL + ts.tv_nsec;
49f3711020SArnaldo Carvalho de Melo }
50f3711020SArnaldo Carvalho de Melo 
51fdf9dc4bSDavid Ahern #endif
52