From 9b4e53306a68935caddd62b4f34c0d97ed6f02f1 Mon Sep 17 00:00:00 2001 From: Arnaldo Carvalho de Melo Date: Thu, 10 Feb 2011 12:52:47 -0200 Subject: [PATCH] --- yaml --- r: 233259 b: refs/heads/master c: 401b8e1317d288f28d6e1afd13271dcb08fd9869 h: refs/heads/master i: 233257: 44865b11a23b0cb68502ff1246e04a86f0873b63 233255: cb3ace8f2c67ef083c99880239b3e7540aeeecca v: v3 --- [refs] | 2 +- trunk/tools/perf/builtin-record.c | 4 ++-- trunk/tools/perf/builtin-top.c | 2 +- trunk/tools/perf/util/event.c | 18 +++++++++++++----- trunk/tools/perf/util/event.h | 6 ++++-- 5 files changed, 21 insertions(+), 11 deletions(-) diff --git a/[refs] b/[refs] index 3225cded6667..15b47821feaa 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5651f7f47dbb1cf2b95a60582546db4ff508e2b4 +refs/heads/master: 401b8e1317d288f28d6e1afd13271dcb08fd9869 diff --git a/trunk/tools/perf/builtin-record.c b/trunk/tools/perf/builtin-record.c index b2f729fdb317..60cac6f92e8b 100644 --- a/trunk/tools/perf/builtin-record.c +++ b/trunk/tools/perf/builtin-record.c @@ -759,8 +759,8 @@ static int __cmd_record(int argc, const char **argv) perf_session__process_machines(session, event__synthesize_guest_os); if (!system_wide) - event__synthesize_thread(target_tid, process_synthesized_event, - session); + event__synthesize_thread_map(threads, process_synthesized_event, + session); else event__synthesize_threads(process_synthesized_event, session); diff --git a/trunk/tools/perf/builtin-top.c b/trunk/tools/perf/builtin-top.c index b6998e055767..5a29d9cd9486 100644 --- a/trunk/tools/perf/builtin-top.c +++ b/trunk/tools/perf/builtin-top.c @@ -1306,7 +1306,7 @@ static int __cmd_top(void) return -ENOMEM; if (target_tid != -1) - event__synthesize_thread(target_tid, event__process, session); + event__synthesize_thread_map(threads, event__process, session); else event__synthesize_threads(event__process, session); diff --git a/trunk/tools/perf/util/event.c b/trunk/tools/perf/util/event.c index 1478ab4ee222..50d0a931497a 100644 --- a/trunk/tools/perf/util/event.c +++ b/trunk/tools/perf/util/event.c @@ -263,11 +263,12 @@ static int __event__synthesize_thread(event_t *comm_event, event_t *mmap_event, process, session); } -int event__synthesize_thread(pid_t pid, event__handler_t process, - struct perf_session *session) +int event__synthesize_thread_map(struct thread_map *threads, + event__handler_t process, + struct perf_session *session) { event_t *comm_event, *mmap_event; - int err = -1; + int err = -1, thread; comm_event = malloc(sizeof(comm_event->comm) + session->id_hdr_size); if (comm_event == NULL) @@ -277,8 +278,15 @@ int event__synthesize_thread(pid_t pid, event__handler_t process, if (mmap_event == NULL) goto out_free_comm; - err = __event__synthesize_thread(comm_event, mmap_event, pid, - process, session); + err = 0; + for (thread = 0; thread < threads->nr; ++thread) { + if (__event__synthesize_thread(comm_event, mmap_event, + threads->map[thread], + process, session)) { + err = -1; + break; + } + } free(mmap_event); out_free_comm: free(comm_event); diff --git a/trunk/tools/perf/util/event.h b/trunk/tools/perf/util/event.h index 2b7e91902f10..cc7b52f9b492 100644 --- a/trunk/tools/perf/util/event.h +++ b/trunk/tools/perf/util/event.h @@ -135,14 +135,16 @@ typedef union event_union { void event__print_totals(void); struct perf_session; +struct thread_map; typedef int (*event__handler_synth_t)(event_t *event, struct perf_session *session); typedef int (*event__handler_t)(event_t *event, struct sample_data *sample, struct perf_session *session); -int event__synthesize_thread(pid_t pid, event__handler_t process, - struct perf_session *session); +int event__synthesize_thread_map(struct thread_map *threads, + event__handler_t process, + struct perf_session *session); int event__synthesize_threads(event__handler_t process, struct perf_session *session); int event__synthesize_kernel_mmap(event__handler_t process,