diff options
author | 2015-04-09 18:53:53 +0300 | |
---|---|---|
committer | 2015-04-29 10:37:55 -0300 | |
commit | 73f75fb1bdc572f97f1eb375f2bbb68cfcba077c (patch) | |
tree | 0bd4f40544de4a62abb477022f9e9212261261b8 /tools/perf/util/auxtrace.c | |
parent | perf auxtrace: Add a heap for sorting AUX area tracing queues (diff) | |
download | linux-73f75fb1bdc572f97f1eb375f2bbb68cfcba077c.tar.gz linux-73f75fb1bdc572f97f1eb375f2bbb68cfcba077c.tar.bz2 linux-73f75fb1bdc572f97f1eb375f2bbb68cfcba077c.zip |
perf auxtrace: Add processing for AUX area tracing events
Provide hooks so that an AUX area decoder can process AUX area tracing
events.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1428594864-29309-14-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/auxtrace.c')
-rw-r--r-- | tools/perf/util/auxtrace.c | 52 |
1 files changed, 51 insertions, 1 deletions
diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c index e13b1a14c859..c4515e1a9d7f 100644 --- a/tools/perf/util/auxtrace.c +++ b/tools/perf/util/auxtrace.c @@ -615,6 +615,53 @@ out_free: return err; } +static bool auxtrace__dont_decode(struct perf_session *session) +{ + return !session->itrace_synth_opts || + session->itrace_synth_opts->dont_decode; +} + +int perf_event__process_auxtrace_info(struct perf_tool *tool __maybe_unused, + union perf_event *event, + struct perf_session *session __maybe_unused) +{ + enum auxtrace_type type = event->auxtrace_info.type; + + if (dump_trace) + fprintf(stdout, " type: %u\n", type); + + switch (type) { + case PERF_AUXTRACE_UNKNOWN: + default: + return -EINVAL; + } +} + +s64 perf_event__process_auxtrace(struct perf_tool *tool, + union perf_event *event, + struct perf_session *session) +{ + s64 err; + + if (dump_trace) + fprintf(stdout, " size: %#"PRIx64" offset: %#"PRIx64" ref: %#"PRIx64" idx: %u tid: %d cpu: %d\n", + event->auxtrace.size, event->auxtrace.offset, + event->auxtrace.reference, event->auxtrace.idx, + event->auxtrace.tid, event->auxtrace.cpu); + + if (auxtrace__dont_decode(session)) + return event->auxtrace.size; + + if (!session->auxtrace || event->header.type != PERF_RECORD_AUXTRACE) + return -EINVAL; + + err = session->auxtrace->process_auxtrace_event(session, event, tool); + if (err < 0) + return err; + + return event->auxtrace.size; +} + #define PERF_ITRACE_DEFAULT_PERIOD_TYPE PERF_ITRACE_PERIOD_NANOSECS #define PERF_ITRACE_DEFAULT_PERIOD 100000 #define PERF_ITRACE_DEFAULT_CALLCHAIN_SZ 16 @@ -801,8 +848,11 @@ void events_stats__auxtrace_error_warn(const struct events_stats *stats) int perf_event__process_auxtrace_error(struct perf_tool *tool __maybe_unused, union perf_event *event, - struct perf_session *session __maybe_unused) + struct perf_session *session) { + if (auxtrace__dont_decode(session)) + return 0; + perf_event__fprintf_auxtrace_error(event, stdout); return 0; } |