18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci#ifndef _TIME_UTILS_H_ 38c2ecf20Sopenharmony_ci#define _TIME_UTILS_H_ 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci#include <stddef.h> 68c2ecf20Sopenharmony_ci#include <time.h> 78c2ecf20Sopenharmony_ci#include <linux/types.h> 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_cistruct perf_time_interval { 108c2ecf20Sopenharmony_ci u64 start, end; 118c2ecf20Sopenharmony_ci}; 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ciint parse_nsec_time(const char *str, u64 *ptime); 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ciint perf_time__parse_str(struct perf_time_interval *ptime, const char *ostr); 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ciint perf_time__percent_parse_str(struct perf_time_interval *ptime_buf, int num, 188c2ecf20Sopenharmony_ci const char *ostr, u64 start, u64 end); 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_cistruct perf_time_interval *perf_time__range_alloc(const char *ostr, int *size); 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_cibool perf_time__skip_sample(struct perf_time_interval *ptime, u64 timestamp); 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_cibool perf_time__ranges_skip_sample(struct perf_time_interval *ptime_buf, 258c2ecf20Sopenharmony_ci int num, u64 timestamp); 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_cistruct perf_session; 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ciint perf_time__parse_for_ranges_reltime(const char *str, struct perf_session *session, 308c2ecf20Sopenharmony_ci struct perf_time_interval **ranges, 318c2ecf20Sopenharmony_ci int *range_size, int *range_num, 328c2ecf20Sopenharmony_ci bool reltime); 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_ciint perf_time__parse_for_ranges(const char *str, struct perf_session *session, 358c2ecf20Sopenharmony_ci struct perf_time_interval **ranges, 368c2ecf20Sopenharmony_ci int *range_size, int *range_num); 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ciint timestamp__scnprintf_usec(u64 timestamp, char *buf, size_t sz); 398c2ecf20Sopenharmony_ciint timestamp__scnprintf_nsec(u64 timestamp, char *buf, size_t sz); 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ciint fetch_current_timestamp(char *buf, size_t sz); 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_cistatic inline unsigned long long rdclock(void) 448c2ecf20Sopenharmony_ci{ 458c2ecf20Sopenharmony_ci struct timespec ts; 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci clock_gettime(CLOCK_MONOTONIC, &ts); 488c2ecf20Sopenharmony_ci return ts.tv_sec * 1000000000ULL + ts.tv_nsec; 498c2ecf20Sopenharmony_ci} 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ci#endif 52