perf tools: Fix named threads support in perf-script
PATCH 1/1 perf tools: Fix named threads support in perf-script
Commit 73994dc broke named thread support in perf-script. The thread struct in al is the main thread for a multithreaded process. The thread struct used for analysis (e.g., dumping events) should be the specific thread for the sample.
--- tools/perf/builtin-script.c | 6 +++--- tools/perf/util/scripting-engines/trace-event-perl.c | 14 ++++++++------ tools/perf/util/scripting-engines/trace-event-python.c | 9 +++++---- tools/perf/util/trace-event-scripting.c | 3 ++- tools/perf/util/trace-event.h | 4 +++- 5 files changed, 21 insertions(+), 15 deletions(-)
tools/perf/builtin-script.c +3 -3
@@ -483,10 +483,10 @@ static void print_sample_bts(union perf_event *event,static void process_event (union perf_event *event,struct perf_sample *sample,struct perf_evsel *evsel,struct machine *machine, -struct addr_location *al) +struct thread *thread, +struct addr_location *al__maybe_unused ) {struct perf_event_attr *attr = &evsel->attr; -struct thread *thread = al->thread;if (output[attr->type].fields ==0 )return ;
@@ -598,7 +598,7 @@ static int process_sample_event(struct perf_tool *tool __maybe_unused,if (cpu_list && !test_bit (sample->cpu, cpu_bitmap))return 0 ; - scripting_ops->process_event (event, sample, evsel, machine, &al); + scripting_ops->process_event (event, sample, evsel, machine, thread, &al); evsel->hists.stats.total_period += sample->period;return 0 ;
tools/perf/util/scripting-engines/trace-event-perl.c +8 -6
@@ -261,7 +261,8 @@ static void perl_process_tracepoint(union perf_event *perf_event __maybe_unused,struct perf_sample *sample, struct perf_evsel *evsel, struct machine *machine __maybe_unused, - struct addr_location *al) + struct thread *thread, + struct addr_location *al) { struct format_field *field;static char handler[256 ];
@@ -272,7 +273,6 @@ static void perl_process_tracepoint(union perf_event *perf_event __maybe_unused,int cpu = sample->cpu;void *data = sample->raw_data;unsigned long long nsecs = sample->time; -struct thread *thread = al->thread;char *comm = thread->comm; dSP;
@@ -351,7 +351,8 @@ static void perl_process_event_generic(union perf_event *event,struct perf_sample *sample, struct perf_evsel *evsel, struct machine *machine __maybe_unused, - struct addr_location *al __maybe_unused) + struct thread *thread __maybe_unused, + struct addr_location *al __maybe_unused) { dSP;
@@ -377,10 +378,11 @@ static void perl_process_event(union perf_event *event,struct perf_sample *sample, struct perf_evsel *evsel, struct machine *machine, - struct addr_location *al) + struct thread *thread, + struct addr_location *al) { -perl_process_tracepoint (event ,sample ,evsel ,machine ,al ); -perl_process_event_generic (event, sample, evsel, machine, al); +perl_process_tracepoint (event ,sample ,evsel ,machine ,thread ,al ); +perl_process_event_generic (event, sample, evsel, machine, thread, al); }static void run_start_sub (void )
tools/perf/util/scripting-engines/trace-event-python.c +5 -4
@@ -225,6 +225,7 @@ static void python_process_tracepoint(union perf_event *perf_eventstruct perf_sample *sample, struct perf_evsel *evsel, struct machine *machine __maybe_unused, + struct thread *thread, struct addr_location *al) { PyObject *handler, *retval, *context, *t, *obj, *dict = NULL;
@@ -238,7 +239,6 @@ static void python_process_tracepoint(union perf_event *perf_eventint cpu = sample->cpu;void *data = sample->raw_data;unsigned long long nsecs = sample->time; -struct thread *thread = al->thread;char *comm = thread->comm; t =PyTuple_New (MAX_FIELDS );
@@ -345,12 +345,12 @@ static void python_process_general_event(union perf_event *perf_eventstruct perf_sample *sample, struct perf_evsel *evsel, struct machine *machine __maybe_unused, + struct thread *thread, struct addr_location *al) { PyObject *handler, *retval, *t, *dict;static char handler_name[64 ];unsigned n =0 ; -struct thread *thread = al->thread;/* * Use the MAX_FIELDS to make the function expandable, though
@@ -404,17 +404,18 @@ static void python_process_event(union perf_event *perf_event,struct perf_sample *sample, struct perf_evsel *evsel, struct machine *machine, + struct thread *thread, struct addr_location *al) { switch (evsel->attr.type) { case PERF_TYPE_TRACEPOINT:python_process_tracepoint (perf_event ,sample ,evsel , -machine ,al ); +machine ,thread ,al );break ;/* Reserve for future process_hw/sw/raw APIs */ default :python_process_general_event (perf_event, sample, evsel, - machine, al); + machine, thread, al); } }
tools/perf/util/trace-event-scripting.c +2 -1
@@ -39,7 +39,8 @@ static void process_event_unsupported(union perf_event *event __maybe_unused,struct perf_sample *sample__maybe_unused , struct perf_evsel *evsel __maybe_unused, struct machine *machine __maybe_unused, - struct addr_location *al __maybe_unused) + struct thread *thread __maybe_unused, + struct addr_location *al __maybe_unused) { }
tools/perf/util/trace-event.h +3 -1
@@ -9,6 +9,7 @@ struct machine;struct perf_sample ;union perf_event ;struct perf_tool ; +struct thread ;extern struct pevent *perf_pevent;
@@ -68,7 +69,8 @@ struct scripting_ops {struct perf_sample *sample, struct perf_evsel *evsel, struct machine *machine, - struct addr_location *al); + struct thread *thread, + struct addr_location *al);int (*generate_script) (struct pevent *pevent,const char *outfile); };
Signature · 1 line
1.7.10.1
Arnaldo Carvalho de Melo
AppliedEm Thu, Jul 18, 2013 at 04:06:15PM -0600, David Ahern escreveu:
Quoted 4 lines
Commit 73994dc broke named thread support in perf-script. The thread struct in al is the main thread for a multithreaded process. The thread struct used for analysis (e.g., dumping events) should be the specific thread for the sample.
Thanks, applied.
- Arnaldo
tip-bot for David Ahern
merge bot[tip:perf/core] perf script: Fix named threads support
In reply to David Ahernperf script: Fix named threads support
Commit-ID: 2eaa1b407aa6592a884f1be061ef61de7012c97a Gitweb: http://git.kernel.org/tip/2eaa1b407aa6592a884f1be061ef61de7012c97a Author: David Ahern <[email protected]> AuthorDate: Thu, 18 Jul 2013 16:06:15 -0600 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 22 Jul 2013 11:55:53 -0300
perf script: Fix named threads support
Commit 73994dc broke named thread support in perf-script. The thread struct in al is the main thread for a multithreaded process. The thread struct used for analysis (e.g., dumping events) should be the specific thread for the sample.
--- tools/perf/builtin-script.c | 6 +++--- tools/perf/util/scripting-engines/trace-event-perl.c | 14 ++++++++------ tools/perf/util/scripting-engines/trace-event-python.c | 9 +++++---- tools/perf/util/trace-event-scripting.c | 3 ++- tools/perf/util/trace-event.h | 4 +++- 5 files changed, 21 insertions(+), 15 deletions(-)
tools/perf/builtin-script.c +3 -3
@@ -397,10 +397,10 @@ static void print_sample_bts(union perf_event *event,static void process_event (union perf_event *event,struct perf_sample *sample,struct perf_evsel *evsel,struct machine *machine, -struct addr_location *al) +struct thread *thread, +struct addr_location *al__maybe_unused ) {struct perf_event_attr *attr = &evsel->attr; -struct thread *thread = al->thread;if (output[attr->type].fields ==0 )return ;
@@ -511,7 +511,7 @@ static int process_sample_event(struct perf_tool *tool __maybe_unused,if (cpu_list && !test_bit (sample->cpu, cpu_bitmap))return 0 ; - scripting_ops->process_event (event, sample, evsel, machine, &al); + scripting_ops->process_event (event, sample, evsel, machine, thread, &al); evsel->hists.stats.total_period += sample->period;return 0 ;
tools/perf/util/scripting-engines/trace-event-perl.c +8 -6
@@ -261,7 +261,8 @@ static void perl_process_tracepoint(union perf_event *perf_event __maybe_unused,struct perf_sample *sample, struct perf_evsel *evsel, struct machine *machine __maybe_unused, - struct addr_location *al) + struct thread *thread, + struct addr_location *al) { struct format_field *field;static char handler[256 ];
@@ -272,7 +273,6 @@ static void perl_process_tracepoint(union perf_event *perf_event __maybe_unused,int cpu = sample->cpu;void *data = sample->raw_data;unsigned long long nsecs = sample->time; -struct thread *thread = al->thread;char *comm = thread->comm; dSP;
@@ -351,7 +351,8 @@ static void perl_process_event_generic(union perf_event *event,struct perf_sample *sample, struct perf_evsel *evsel, struct machine *machine __maybe_unused, - struct addr_location *al __maybe_unused) + struct thread *thread __maybe_unused, + struct addr_location *al __maybe_unused) { dSP;
@@ -377,10 +378,11 @@ static void perl_process_event(union perf_event *event,struct perf_sample *sample, struct perf_evsel *evsel, struct machine *machine, - struct addr_location *al) + struct thread *thread, + struct addr_location *al) { -perl_process_tracepoint (event ,sample ,evsel ,machine ,al ); -perl_process_event_generic (event, sample, evsel, machine, al); +perl_process_tracepoint (event ,sample ,evsel ,machine ,thread ,al ); +perl_process_event_generic (event, sample, evsel, machine, thread, al); }static void run_start_sub (void )
tools/perf/util/scripting-engines/trace-event-python.c +5 -4
@@ -225,6 +225,7 @@ static void python_process_tracepoint(union perf_event *perf_eventstruct perf_sample *sample, struct perf_evsel *evsel, struct machine *machine __maybe_unused, + struct thread *thread, struct addr_location *al) { PyObject *handler, *retval, *context, *t, *obj, *dict = NULL;
@@ -238,7 +239,6 @@ static void python_process_tracepoint(union perf_event *perf_eventint cpu = sample->cpu;void *data = sample->raw_data;unsigned long long nsecs = sample->time; -struct thread *thread = al->thread;char *comm = thread->comm; t =PyTuple_New (MAX_FIELDS );
@@ -345,12 +345,12 @@ static void python_process_general_event(union perf_event *perf_eventstruct perf_sample *sample, struct perf_evsel *evsel, struct machine *machine __maybe_unused, + struct thread *thread, struct addr_location *al) { PyObject *handler, *retval, *t, *dict;static char handler_name[64 ];unsigned n =0 ; -struct thread *thread = al->thread;/* * Use the MAX_FIELDS to make the function expandable, though
@@ -404,17 +404,18 @@ static void python_process_event(union perf_event *perf_event,struct perf_sample *sample, struct perf_evsel *evsel, struct machine *machine, + struct thread *thread, struct addr_location *al) { switch (evsel->attr.type) { case PERF_TYPE_TRACEPOINT:python_process_tracepoint (perf_event ,sample ,evsel , -machine ,al ); +machine ,thread ,al );break ;/* Reserve for future process_hw/sw/raw APIs */ default :python_process_general_event (perf_event, sample, evsel, - machine, al); + machine, thread, al); } }
tools/perf/util/trace-event-scripting.c +2 -1
@@ -39,7 +39,8 @@ static void process_event_unsupported(union perf_event *event __maybe_unused,struct perf_sample *sample__maybe_unused , struct perf_evsel *evsel __maybe_unused, struct machine *machine __maybe_unused, - struct addr_location *al __maybe_unused) + struct thread *thread __maybe_unused, + struct addr_location *al __maybe_unused) { }
tools/perf/util/trace-event.h +3 -1
@@ -9,6 +9,7 @@ struct machine;struct perf_sample ;union perf_event ;struct perf_tool ; +struct thread ;extern struct pevent *perf_pevent;
@@ -68,7 +69,8 @@ struct scripting_ops {struct perf_sample *sample, struct perf_evsel *evsel, struct machine *machine, - struct addr_location *al); + struct thread *thread, + struct addr_location *al);int (*generate_script) (struct pevent *pevent,const char *outfile); };