| /* Copyright (c) 2015 Google Inc |
| * Davide Libenzi <dlibenzi@google.com> |
| * See LICENSE for details. |
| */ |
| |
| #pragma once |
| |
| #include <ros/arch/arch.h> |
| #include <ros/arch/perfmon.h> |
| #include <ros/common.h> |
| #include <sys/types.h> |
| #include <stdint.h> |
| #include <stdio.h> |
| #include <limits.h> |
| #include <parlib/core_set.h> |
| #include "perfconv.h" |
| |
| #define MAX_CPU_EVENTS 256 |
| |
| struct perf_arch_info { |
| uint32_t perfmon_version; |
| uint32_t proc_arch_events; |
| uint32_t bits_x_counter; |
| uint32_t counters_x_proc; |
| uint32_t bits_x_fix_counter; |
| uint32_t fix_counters_x_proc; |
| }; |
| |
| #define MAX_FQSTR_SZ 128 |
| struct perf_eventsel { |
| struct perfmon_event ev; |
| bool attr_emitted; |
| uint32_t type; |
| uint64_t config; |
| char fq_str[MAX_FQSTR_SZ]; |
| }; |
| |
| struct perf_event { |
| struct core_set cores; |
| struct perf_eventsel sel; |
| int ped; |
| }; |
| |
| struct perf_context_config { |
| const char *perf_file; |
| const char *kpctl_file; |
| const char *kpdata_file; |
| }; |
| |
| struct perf_context { |
| struct perf_context_config *cfg; |
| int perf_fd; |
| int kpctl_fd; |
| struct perf_arch_info pai; |
| int event_count; |
| struct perf_event events[MAX_CPU_EVENTS]; |
| }; |
| |
| void perf_initialize(void); |
| void perf_finalize(void); |
| struct perf_eventsel *perf_parse_event(const char *str); |
| struct perf_context *perf_create_context(struct perf_context_config *cfg); |
| void perf_free_context(struct perf_context *pctx); |
| void perf_context_event_submit(struct perf_context *pctx, |
| const struct core_set *cores, |
| const struct perf_eventsel *sel); |
| void perf_stop_events(struct perf_context *pctx); |
| void perf_start_sampling(struct perf_context *pctx); |
| void perf_stop_sampling(struct perf_context *pctx); |
| uint64_t perf_get_event_count(struct perf_context *pctx, unsigned int idx); |
| void perf_context_show_events(struct perf_context *pctx, FILE *file); |
| void perf_show_events(const char *rx, FILE *file); |
| void perf_convert_trace_data(struct perfconv_context *cctx, const char *input, |
| FILE *outfile); |
| |
| static inline const struct perf_arch_info *perf_context_get_arch_info( |
| const struct perf_context *pctx) |
| { |
| return &pctx->pai; |
| } |