1e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#ifndef _PERF_UTIL_TRACE_EVENT_H 2e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define _PERF_UTIL_TRACE_EVENT_H 3e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 4e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <traceevent/event-parse.h> 5e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "parse-events.h" 6e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "session.h" 7e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 8e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct machine; 9e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct perf_sample; 10e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengunion perf_event; 11e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct perf_tool; 12e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct thread; 13e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 14e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengextern struct pevent *perf_pevent; 15e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 16e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint bigendian(void); 17e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 18e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct pevent *read_trace_init(int file_bigendian, int host_bigendian); 19e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengvoid event_format__print(struct event_format *event, 20e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng int cpu, void *data, int size); 21e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 22e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint parse_ftrace_file(struct pevent *pevent, char *buf, unsigned long size); 23e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint parse_event_file(struct pevent *pevent, 24e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng char *buf, unsigned long size, char *sys); 25e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 26e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct pevent_record *trace_peek_data(struct pevent *pevent, int cpu); 27e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 28e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengunsigned long long 29e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengraw_field_value(struct event_format *event, const char *name, void *data); 30e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengvoid *raw_field_ptr(struct event_format *event, const char *name, void *data); 31e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 32e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengvoid parse_proc_kallsyms(struct pevent *pevent, char *file, unsigned int size); 33e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengvoid parse_ftrace_printk(struct pevent *pevent, char *file, unsigned int size); 34e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 35e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengssize_t trace_report(int fd, struct pevent **pevent, bool repipe); 36e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 37e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint trace_parse_common_type(struct pevent *pevent, void *data); 38e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint trace_parse_common_pid(struct pevent *pevent, void *data); 39e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 40e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct event_format *trace_find_next_event(struct pevent *pevent, 41e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct event_format *event); 42e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengunsigned long long read_size(struct event_format *event, void *ptr, int size); 43e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengunsigned long long eval_flag(const char *flag); 44e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 45e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct pevent_record *trace_read_data(struct pevent *pevent, int cpu); 46e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint read_tracing_data(int fd, struct list_head *pattrs); 47e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 48e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct tracing_data { 49e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* size is only valid if temp is 'true' */ 50e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ssize_t size; 51e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng bool temp; 52e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng char temp_file[50]; 53e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 54e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 55e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct tracing_data *tracing_data_get(struct list_head *pattrs, 56e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng int fd, bool temp); 57e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint tracing_data_put(struct tracing_data *tdata); 58e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 59e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 60e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct addr_location; 61e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 62e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct perf_session; 63e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 64e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct scripting_ops { 65e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng const char *name; 66e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng int (*start_script) (const char *script, int argc, const char **argv); 67e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng int (*stop_script) (void); 68e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng void (*process_event) (union perf_event *event, 69e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_sample *sample, 70e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel, 71e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct machine *machine, 72e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct thread *thread, 73e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct addr_location *al); 74e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng int (*generate_script) (struct pevent *pevent, const char *outfile); 75e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 76e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 77e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint script_spec_register(const char *spec, struct scripting_ops *ops); 78e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 79e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengvoid setup_perl_scripting(void); 80e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengvoid setup_python_scripting(void); 81e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 82e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct scripting_context { 83e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct pevent *pevent; 84e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng void *event_data; 85e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 86e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 87e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint common_pc(struct scripting_context *context); 88e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint common_flags(struct scripting_context *context); 89e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint common_lock_depth(struct scripting_context *context); 90e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 91e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#endif /* _PERF_UTIL_TRACE_EVENT_H */ 92