diff options
author | Jiri Olsa <jolsa@kernel.org> | 2015-10-25 10:51:19 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2015-12-17 12:38:16 -0500 |
commit | 5f3339d2e83ca587c2e13c3e37e1b5fb7c68ebe5 (patch) | |
tree | 3f8d94380430eecd081f6d95793ae6cc7aa0835c /tools/perf/util/session.c | |
parent | 1843b4e057b7717db21a3ad96fa16d6b4ee8f6c4 (diff) |
perf thread_map: Add thread_map user level event
Adding the thread_map event to pass/store thread maps as data in
the pipe/perf.data.
Storing the thread ID along with the standard comm[16] thread name string.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Tested-by: Kan Liang <kan.liang@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1445784728-21732-4-git-send-email-jolsa@kernel.org
[ Renamed thread_map_data_event to thread_map_event_entry ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/session.c')
-rw-r--r-- | tools/perf/util/session.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index 9774686525b4..36b07b22392d 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c | |||
@@ -296,6 +296,16 @@ int process_event_auxtrace_error_stub(struct perf_tool *tool __maybe_unused, | |||
296 | return 0; | 296 | return 0; |
297 | } | 297 | } |
298 | 298 | ||
299 | |||
300 | static | ||
301 | int process_event_thread_map_stub(struct perf_tool *tool __maybe_unused, | ||
302 | union perf_event *event __maybe_unused, | ||
303 | struct perf_session *session __maybe_unused) | ||
304 | { | ||
305 | dump_printf(": unhandled!\n"); | ||
306 | return 0; | ||
307 | } | ||
308 | |||
299 | void perf_tool__fill_defaults(struct perf_tool *tool) | 309 | void perf_tool__fill_defaults(struct perf_tool *tool) |
300 | { | 310 | { |
301 | if (tool->sample == NULL) | 311 | if (tool->sample == NULL) |
@@ -346,6 +356,8 @@ void perf_tool__fill_defaults(struct perf_tool *tool) | |||
346 | tool->auxtrace = process_event_auxtrace_stub; | 356 | tool->auxtrace = process_event_auxtrace_stub; |
347 | if (tool->auxtrace_error == NULL) | 357 | if (tool->auxtrace_error == NULL) |
348 | tool->auxtrace_error = process_event_auxtrace_error_stub; | 358 | tool->auxtrace_error = process_event_auxtrace_error_stub; |
359 | if (tool->thread_map == NULL) | ||
360 | tool->thread_map = process_event_thread_map_stub; | ||
349 | } | 361 | } |
350 | 362 | ||
351 | static void swap_sample_id_all(union perf_event *event, void *data) | 363 | static void swap_sample_id_all(union perf_event *event, void *data) |
@@ -616,6 +628,17 @@ static void perf_event__auxtrace_error_swap(union perf_event *event, | |||
616 | event->auxtrace_error.ip = bswap_64(event->auxtrace_error.ip); | 628 | event->auxtrace_error.ip = bswap_64(event->auxtrace_error.ip); |
617 | } | 629 | } |
618 | 630 | ||
631 | static void perf_event__thread_map_swap(union perf_event *event, | ||
632 | bool sample_id_all __maybe_unused) | ||
633 | { | ||
634 | unsigned i; | ||
635 | |||
636 | event->thread_map.nr = bswap_64(event->thread_map.nr); | ||
637 | |||
638 | for (i = 0; i < event->thread_map.nr; i++) | ||
639 | event->thread_map.entries[i].pid = bswap_64(event->thread_map.entries[i].pid); | ||
640 | } | ||
641 | |||
619 | typedef void (*perf_event__swap_op)(union perf_event *event, | 642 | typedef void (*perf_event__swap_op)(union perf_event *event, |
620 | bool sample_id_all); | 643 | bool sample_id_all); |
621 | 644 | ||
@@ -643,6 +666,7 @@ static perf_event__swap_op perf_event__swap_ops[] = { | |||
643 | [PERF_RECORD_AUXTRACE_INFO] = perf_event__auxtrace_info_swap, | 666 | [PERF_RECORD_AUXTRACE_INFO] = perf_event__auxtrace_info_swap, |
644 | [PERF_RECORD_AUXTRACE] = perf_event__auxtrace_swap, | 667 | [PERF_RECORD_AUXTRACE] = perf_event__auxtrace_swap, |
645 | [PERF_RECORD_AUXTRACE_ERROR] = perf_event__auxtrace_error_swap, | 668 | [PERF_RECORD_AUXTRACE_ERROR] = perf_event__auxtrace_error_swap, |
669 | [PERF_RECORD_THREAD_MAP] = perf_event__thread_map_swap, | ||
646 | [PERF_RECORD_HEADER_MAX] = NULL, | 670 | [PERF_RECORD_HEADER_MAX] = NULL, |
647 | }; | 671 | }; |
648 | 672 | ||
@@ -1179,6 +1203,8 @@ static s64 perf_session__process_user_event(struct perf_session *session, | |||
1179 | case PERF_RECORD_AUXTRACE_ERROR: | 1203 | case PERF_RECORD_AUXTRACE_ERROR: |
1180 | perf_session__auxtrace_error_inc(session, event); | 1204 | perf_session__auxtrace_error_inc(session, event); |
1181 | return tool->auxtrace_error(tool, event, session); | 1205 | return tool->auxtrace_error(tool, event, session); |
1206 | case PERF_RECORD_THREAD_MAP: | ||
1207 | return tool->thread_map(tool, event, session); | ||
1182 | default: | 1208 | default: |
1183 | return -EINVAL; | 1209 | return -EINVAL; |
1184 | } | 1210 | } |