Skip to content

Commit

Permalink
perf trace: Use new machine method to loop over threads
Browse files Browse the repository at this point in the history
Use the new machine method that loops over threads to dump summary data.

Signed-off-by: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung.kim@lge.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1380395584-9025-3-git-send-email-dsahern@gmail.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
David Ahern authored and Arnaldo Carvalho de Melo committed Oct 11, 2013
1 parent 35feee1 commit 896cbb5
Showing 1 changed file with 48 additions and 28 deletions.
76 changes: 48 additions & 28 deletions tools/perf/builtin-trace.c
Original file line number Diff line number Diff line change
Expand Up @@ -1751,37 +1751,57 @@ static size_t trace__fprintf_threads_header(FILE *fp)
return printed;
}

/* struct used to pass data to per-thread function */
struct summary_data {
FILE *fp;
struct trace *trace;
size_t printed;
};

static int trace__fprintf_one_thread(struct thread *thread, void *priv)
{
struct summary_data *data = priv;
FILE *fp = data->fp;
size_t printed = data->printed;
struct trace *trace = data->trace;
struct thread_trace *ttrace = thread->priv;
const char *color;
double ratio;

if (ttrace == NULL)
return 0;

ratio = (double)ttrace->nr_events / trace->nr_events * 100.0;

color = PERF_COLOR_NORMAL;
if (ratio > 50.0)
color = PERF_COLOR_RED;
else if (ratio > 25.0)
color = PERF_COLOR_GREEN;
else if (ratio > 5.0)
color = PERF_COLOR_YELLOW;

printed += color_fprintf(fp, color, "%20s", thread->comm);
printed += fprintf(fp, " - %-5d :%11lu [", thread->tid, ttrace->nr_events);
printed += color_fprintf(fp, color, "%5.1f%%", ratio);
printed += fprintf(fp, " ] %10.3f ms\n", ttrace->runtime_ms);

data->printed += printed;

return 0;
}

static size_t trace__fprintf_thread_summary(struct trace *trace, FILE *fp)
{
size_t printed = trace__fprintf_threads_header(fp);
struct rb_node *nd;

for (nd = rb_first(&trace->host->threads); nd; nd = rb_next(nd)) {
struct thread *thread = rb_entry(nd, struct thread, rb_node);
struct thread_trace *ttrace = thread->priv;
const char *color;
double ratio;

if (ttrace == NULL)
continue;

ratio = (double)ttrace->nr_events / trace->nr_events * 100.0;

color = PERF_COLOR_NORMAL;
if (ratio > 50.0)
color = PERF_COLOR_RED;
else if (ratio > 25.0)
color = PERF_COLOR_GREEN;
else if (ratio > 5.0)
color = PERF_COLOR_YELLOW;

printed += color_fprintf(fp, color, "%20s", thread->comm);
printed += fprintf(fp, " - %-5d :%11lu [", thread->tid, ttrace->nr_events);
printed += color_fprintf(fp, color, "%5.1f%%", ratio);
printed += fprintf(fp, " ] %10.3f ms\n", ttrace->runtime_ms);
}
struct summary_data data = {
.fp = fp,
.trace = trace
};
data.printed = trace__fprintf_threads_header(fp);

return printed;
machine__for_each_thread(trace->host, trace__fprintf_one_thread, &data);

return data.printed;
}

static int trace__set_duration(const struct option *opt, const char *str,
Expand Down

0 comments on commit 896cbb5

Please sign in to comment.