Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf tools: Add trace-event object

Add trace-event object to keep together 'struct pevent' object with its
loaded plugins with following interface:

int trace_event__init(struct trace_event *t);

- Initalizes 'struct pevent' object and loads plugins for it

void trace_event__cleanup(struct trace_event *t);

- Cleanups both 'struct pevent' and plugins

Signed-off-by: Jiri Olsa <jolsa@redhat.com>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Steven Rostedt <rostedt@goodmis.org>
Link: http://lkml.kernel.org/r/1386076182-14484-10-git-send-email-jolsa@redhat.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Jiri Olsa and committed by
Arnaldo Carvalho de Melo
29f5ffd3 cef82c9f

+51 -31
+1
tools/perf/Makefile.perf
··· 353 353 LIB_OBJS += $(OUTPUT)util/trace-event-read.o 354 354 LIB_OBJS += $(OUTPUT)util/trace-event-info.o 355 355 LIB_OBJS += $(OUTPUT)util/trace-event-scripting.o 356 + LIB_OBJS += $(OUTPUT)util/trace-event.o 356 357 LIB_OBJS += $(OUTPUT)util/svghelper.o 357 358 LIB_OBJS += $(OUTPUT)util/sort.o 358 359 LIB_OBJS += $(OUTPUT)util/hist.o
+1 -1
tools/perf/builtin-script.c
··· 1786 1786 return -1; 1787 1787 } 1788 1788 1789 - err = scripting_ops->generate_script(session->pevent, 1789 + err = scripting_ops->generate_script(session->tevent.pevent, 1790 1790 "perf-script"); 1791 1791 goto out; 1792 1792 }
+4 -4
tools/perf/util/header.c
··· 2834 2834 2835 2835 symbol_conf.nr_events = nr_attrs; 2836 2836 2837 - perf_header__process_sections(header, fd, &session->pevent, 2837 + perf_header__process_sections(header, fd, &session->tevent, 2838 2838 perf_file_section__process); 2839 2839 2840 2840 if (perf_evlist__prepare_tracepoint_events(session->evlist, 2841 - session->pevent)) 2841 + session->tevent.pevent)) 2842 2842 goto out_delete_evlist; 2843 2843 2844 2844 return 0; ··· 3003 3003 lseek(fd, offset + sizeof(struct tracing_data_event), 3004 3004 SEEK_SET); 3005 3005 3006 - size_read = trace_report(fd, &session->pevent, 3006 + size_read = trace_report(fd, &session->tevent, 3007 3007 session->repipe); 3008 3008 padding = PERF_ALIGN(size_read, sizeof(u64)) - size_read; 3009 3009 ··· 3025 3025 } 3026 3026 3027 3027 perf_evlist__prepare_tracepoint_events(session->evlist, 3028 - session->pevent); 3028 + session->tevent.pevent); 3029 3029 3030 3030 return size_read + padding; 3031 3031 }
+1
tools/perf/util/python-ext-sources
··· 18 18 util/rblist.c 19 19 util/strlist.c 20 20 util/fs.c 21 + util/trace-event.c 21 22 ../../lib/rbtree.c
+2 -1
tools/perf/util/session.h
··· 1 1 #ifndef __PERF_SESSION_H 2 2 #define __PERF_SESSION_H 3 3 4 + #include "trace-event.h" 4 5 #include "hist.h" 5 6 #include "event.h" 6 7 #include "header.h" ··· 33 32 struct perf_header header; 34 33 struct machines machines; 35 34 struct perf_evlist *evlist; 36 - struct pevent *pevent; 35 + struct trace_event tevent; 37 36 struct events_stats stats; 38 37 bool repipe; 39 38 struct ordered_samples ordered_samples;
-13
tools/perf/util/trace-event-parse.c
··· 28 28 #include "util.h" 29 29 #include "trace-event.h" 30 30 31 - struct pevent *read_trace_init(int file_bigendian, int host_bigendian) 32 - { 33 - struct pevent *pevent = pevent_alloc(); 34 - 35 - if (pevent != NULL) { 36 - pevent_set_flag(pevent, PEVENT_NSEC_OUTPUT); 37 - pevent_set_file_bigendian(pevent, file_bigendian); 38 - pevent_set_host_bigendian(pevent, host_bigendian); 39 - } 40 - 41 - return pevent; 42 - } 43 - 44 31 static int get_common_field(struct scripting_context *context, 45 32 int *offset, int *size, const char *type) 46 33 {
+11 -9
tools/perf/util/trace-event-read.c
··· 343 343 return 0; 344 344 } 345 345 346 - ssize_t trace_report(int fd, struct pevent **ppevent, bool __repipe) 346 + ssize_t trace_report(int fd, struct trace_event *tevent, bool __repipe) 347 347 { 348 348 char buf[BUFSIZ]; 349 349 char test[] = { 23, 8, 68 }; ··· 356 356 int host_bigendian; 357 357 int file_long_size; 358 358 int file_page_size; 359 - struct pevent *pevent; 359 + struct pevent *pevent = NULL; 360 360 int err; 361 - 362 - *ppevent = NULL; 363 361 364 362 repipe = __repipe; 365 363 input_fd = fd; ··· 388 390 file_bigendian = buf[0]; 389 391 host_bigendian = bigendian(); 390 392 391 - pevent = read_trace_init(file_bigendian, host_bigendian); 392 - if (pevent == NULL) { 393 - pr_debug("read_trace_init failed"); 393 + if (trace_event__init(tevent)) { 394 + pr_debug("trace_event__init failed"); 394 395 goto out; 395 396 } 397 + 398 + pevent = tevent->pevent; 399 + 400 + pevent_set_flag(pevent, PEVENT_NSEC_OUTPUT); 401 + pevent_set_file_bigendian(pevent, file_bigendian); 402 + pevent_set_host_bigendian(pevent, host_bigendian); 396 403 397 404 if (do_read(buf, 1) < 0) 398 405 goto out; ··· 435 432 pevent_print_printk(pevent); 436 433 } 437 434 438 - *ppevent = pevent; 439 435 pevent = NULL; 440 436 441 437 out: 442 438 if (pevent) 443 - pevent_free(pevent); 439 + trace_event__cleanup(tevent); 444 440 return size; 445 441 }
+21
tools/perf/util/trace-event.c
··· 1 + 2 + #include <traceevent/event-parse.h> 3 + #include "trace-event.h" 4 + 5 + int trace_event__init(struct trace_event *t) 6 + { 7 + struct pevent *pevent = pevent_alloc(); 8 + 9 + if (pevent) { 10 + t->plugin_list = traceevent_load_plugins(pevent); 11 + t->pevent = pevent; 12 + } 13 + 14 + return pevent ? 0 : -1; 15 + } 16 + 17 + void trace_event__cleanup(struct trace_event *t) 18 + { 19 + pevent_free(t->pevent); 20 + traceevent_unload_plugins(t->plugin_list); 21 + }
+10 -3
tools/perf/util/trace-event.h
··· 3 3 4 4 #include <traceevent/event-parse.h> 5 5 #include "parse-events.h" 6 - #include "session.h" 7 6 8 7 struct machine; 9 8 struct perf_sample; 10 9 union perf_event; 11 10 struct perf_tool; 12 11 struct thread; 12 + struct plugin_list; 13 + 14 + struct trace_event { 15 + struct pevent *pevent; 16 + struct plugin_list *plugin_list; 17 + }; 18 + 19 + int trace_event__init(struct trace_event *t); 20 + void trace_event__cleanup(struct trace_event *t); 13 21 14 22 int bigendian(void); 15 23 16 - struct pevent *read_trace_init(int file_bigendian, int host_bigendian); 17 24 void event_format__print(struct event_format *event, 18 25 int cpu, void *data, int size); 19 26 ··· 34 27 void parse_proc_kallsyms(struct pevent *pevent, char *file, unsigned int size); 35 28 void parse_ftrace_printk(struct pevent *pevent, char *file, unsigned int size); 36 29 37 - ssize_t trace_report(int fd, struct pevent **pevent, bool repipe); 30 + ssize_t trace_report(int fd, struct trace_event *tevent, bool repipe); 38 31 39 32 struct event_format *trace_find_next_event(struct pevent *pevent, 40 33 struct event_format *event);