Commit-ID: 58b9a18ecd251cbd6e666ad792023ab77c7d100e Gitweb: http://git.kernel.org/tip/58b9a18ecd251cbd6e666ad792023ab77c7d100e Author: Stanislav Fomichev <[email protected]> AuthorDate: Mon, 2 Dec 2013 18:37:35 +0400 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 16 Dec 2013 16:34:27 -0300
perf timechart: Get number of CPUs from perf header Print all CPUs, even if there were no events (use perf header to get number of CPUs). This is required to support topology in the next patch. Signed-off-by: Stanislav Fomichev <[email protected]> Cc: Ingo Molnar <[email protected]> Cc: Jiri Olsa <[email protected]> Cc: Namhyung Kim <[email protected]> Cc: Paul Mackerras <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Ramkumar Ramachandra <[email protected]> Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Arnaldo Carvalho de Melo <[email protected]> --- tools/perf/builtin-timechart.c | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/tools/perf/builtin-timechart.c b/tools/perf/builtin-timechart.c index 99fe363..db9c4c1 100644 --- a/tools/perf/builtin-timechart.c +++ b/tools/perf/builtin-timechart.c @@ -531,12 +531,10 @@ static int process_sample_event(struct perf_tool *tool, tchart->last_time = sample->time; } - if (sample->cpu > tchart->numcpus) - tchart->numcpus = sample->cpu; - if (evsel->handler != NULL) { tracepoint_handler f = evsel->handler; - return f(tchart, evsel, sample, cat_backtrace(event, sample, machine)); + return f(tchart, evsel, sample, + cat_backtrace(event, sample, machine)); } return 0; @@ -1038,8 +1036,6 @@ static void write_svg_file(struct timechart *tchart, const char *filename) int count; int thresh = TIME_THRESH; - tchart->numcpus++; - if (tchart->power_only) tchart->proc_num = 0; @@ -1069,6 +1065,25 @@ static void write_svg_file(struct timechart *tchart, const char *filename) svg_close(); } +static int process_header(struct perf_file_section *section __maybe_unused, + struct perf_header *ph, + int feat, + int fd __maybe_unused, + void *data) +{ + struct timechart *tchart = data; + + switch (feat) { + case HEADER_NRCPUS: + tchart->numcpus = ph->env.nr_cpus_avail; + break; + default: + break; + } + + return 0; +} + static int __cmd_timechart(struct timechart *tchart, const char *output_name) { const struct perf_evsel_str_handler power_tracepoints[] = { @@ -1094,6 +1109,11 @@ static int __cmd_timechart(struct timechart *tchart, const char *output_name) if (session == NULL) return -ENOMEM; + (void)perf_header__process_sections(&session->header, + perf_data_file__fd(session->file), + tchart, + process_header); + if (!perf_session__has_traces(session, "timechart record")) goto out_delete; -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

