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