perf trace: Count number of events for each thread and globally
Commit-ID: efd5745e43f3aabd95d521289e0caa0e30668cf4 Gitweb: http://git.kernel.org/tip/efd5745e43f3aabd95d521289e0caa0e30668cf4 Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Wed, 17 Oct 2012 17:09:46 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Thu, 25 Oct 2012 10:40:37 -0200
perf trace: Count number of events for each thread and globally
The nr_events in trace__run was local, but we will need it in other trace methods, move it to struct trace.
We'll also need the number of events per thread, so introduce a nr_events method for that in struct thread_trace.
Cc David Ahern <[email protected]>
Cc Frederic Weisbecker <[email protected]>
Cc Jiri Olsa <[email protected]>
Cc Mike Galbraith <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Paul Mackerras <[email protected]>
Cc Peter Zijlstra <[email protected]>
Cc Stephane Eranian <[email protected]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/builtin-trace.c | 20 ++++++++++++++------ 1 files changed, 14 insertions(+), 6 deletions(-)
tools/perf/builtin-trace.c +14 -6
@@ -67,6 +67,7 @@ struct thread_trace {u64 entry_time;u64 exit_time;bool entry_pending; +unsigned long nr_events;char *entry_str; };
@@ -77,16 +78,21 @@ static struct thread_trace *thread_trace__new(void)static struct thread_trace *thread__trace (struct thread *thread) { +struct thread_trace *ttrace; +if (thread ==NULL ) goto fail;if (thread->priv ==NULL ) thread->priv =thread_trace__new (); - +if (thread->priv ==NULL ) goto fail; -return thread->priv; + ttrace = thread->priv; + ++ttrace->nr_events; + +return ttrace; fail:color_fprintf (stdout,PERF_COLOR_RED ,"WARNING: not enough memory, dropping samples!\n" );
@@ -102,6 +108,7 @@ struct trace {struct perf_record_opts opts;struct machine host;u64 base_time; +unsigned long nr_events;bool multiple_threads;double duration_filter; };
@@ -386,7 +393,8 @@ static int trace__run(struct trace *trace, int argc, const char **argv) {struct perf_evlist *evlist =perf_evlist__new (NULL ,NULL );struct perf_evsel *evsel; -int err =-1 , i, nr_events =0 , before; +int err =-1 , i; +unsigned long before;const bool forks = argc >0 ;if (evlist ==NULL ) {
@@ -444,7 +452,7 @@ static int trace__run(struct trace *trace, int argc, const char **argv) trace->multiple_threads = evlist->threads->map[0 ] ==-1 || evlist->threads->nr >1 ; again: - before = nr_events; + before = trace->nr_events;for (i =0 ; i < evlist->nr_mmaps; i++) {union perf_event *event;
@@ -454,7 +462,7 @@ again:tracepoint_handler handler;struct perf_sample sample; - ++nr_events; + ++trace->nr_events; err =perf_evlist__parse_sample (evlist, event, &sample);if (err) {
@@ -495,7 +503,7 @@ again: } } -if (nr_events == before) { +if (trace->nr_events == before) {if (done) goto out_delete_evlist;