From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754663Ab3LQUwc (ORCPT ); Tue, 17 Dec 2013 15:52:32 -0500 Received: from merlin.infradead.org ([205.233.59.134]:56145 "EHLO merlin.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754429Ab3LQUwV (ORCPT ); Tue, 17 Dec 2013 15:52:21 -0500 From: Arnaldo Carvalho de Melo To: Ingo Molnar Cc: linux-kernel@vger.kernel.org, Stanislav Fomichev , Ingo Molnar , Jiri Olsa , Namhyung Kim , Paul Mackerras , Peter Zijlstra , Ramkumar Ramachandra , Arnaldo Carvalho de Melo Subject: [PATCH 04/10] perf timechart: Get number of CPUs from perf header Date: Tue, 17 Dec 2013 17:52:05 -0300 Message-Id: <1387313531-14629-5-git-send-email-acme@infradead.org> X-Mailer: git-send-email 1.8.1.4 In-Reply-To: <1387313531-14629-1-git-send-email-acme@infradead.org> References: <1387313531-14629-1-git-send-email-acme@infradead.org> X-SRS-Rewrite: SMTP reverse-path rewritten from by merlin.infradead.org See http://www.infradead.org/rpr.html Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Stanislav Fomichev 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 Cc: Ingo Molnar Cc: Jiri Olsa Cc: Namhyung Kim Cc: Paul Mackerras Cc: Peter Zijlstra Cc: Ramkumar Ramachandra Link: http://lkml.kernel.org/r/1385995056-20158-4-git-send-email-stfomichev@yandex-team.ru Signed-off-by: Arnaldo Carvalho de Melo --- 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 99fe363f1de8..db9c4c172587 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; -- 1.8.1.4