diff options
author | Namhyung Kim <namhyung.kim@lge.com> | 2013-05-13 22:09:00 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2013-05-28 09:23:59 -0400 |
commit | 6f29097f45f6c375f2f6a76c589577575c7feb52 (patch) | |
tree | 9eb90631bc8f0f5b36fdc1aa10ee99fdd41ed9f7 /tools | |
parent | 933cbb1c6c617a6ae167538c2fa503efc9c4a832 (diff) |
perf top: Fix percent output when no samples collected
If there's no sample, kernel and exact percent output at the header
looked like "-nan%".
Tested-by: Jiri Olsa <jolsa@redhat.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1368497347-9628-3-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/perf/util/top.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/tools/perf/util/top.c b/tools/perf/util/top.c index 54d37a4753c5..f857b51b6bde 100644 --- a/tools/perf/util/top.c +++ b/tools/perf/util/top.c | |||
@@ -23,20 +23,31 @@ | |||
23 | 23 | ||
24 | size_t perf_top__header_snprintf(struct perf_top *top, char *bf, size_t size) | 24 | size_t perf_top__header_snprintf(struct perf_top *top, char *bf, size_t size) |
25 | { | 25 | { |
26 | float samples_per_sec = top->samples / top->delay_secs; | 26 | float samples_per_sec; |
27 | float ksamples_per_sec = top->kernel_samples / top->delay_secs; | 27 | float ksamples_per_sec; |
28 | float esamples_percent = (100.0 * top->exact_samples) / top->samples; | 28 | float esamples_percent; |
29 | struct perf_record_opts *opts = &top->record_opts; | 29 | struct perf_record_opts *opts = &top->record_opts; |
30 | struct perf_target *target = &opts->target; | 30 | struct perf_target *target = &opts->target; |
31 | size_t ret = 0; | 31 | size_t ret = 0; |
32 | 32 | ||
33 | if (top->samples) { | ||
34 | samples_per_sec = top->samples / top->delay_secs; | ||
35 | ksamples_per_sec = top->kernel_samples / top->delay_secs; | ||
36 | esamples_percent = (100.0 * top->exact_samples) / top->samples; | ||
37 | } else { | ||
38 | samples_per_sec = ksamples_per_sec = esamples_percent = 0.0; | ||
39 | } | ||
40 | |||
33 | if (!perf_guest) { | 41 | if (!perf_guest) { |
42 | float ksamples_percent = 0.0; | ||
43 | |||
44 | if (samples_per_sec) | ||
45 | ksamples_percent = (100.0 * ksamples_per_sec) / | ||
46 | samples_per_sec; | ||
34 | ret = SNPRINTF(bf, size, | 47 | ret = SNPRINTF(bf, size, |
35 | " PerfTop:%8.0f irqs/sec kernel:%4.1f%%" | 48 | " PerfTop:%8.0f irqs/sec kernel:%4.1f%%" |
36 | " exact: %4.1f%% [", samples_per_sec, | 49 | " exact: %4.1f%% [", samples_per_sec, |
37 | 100.0 - (100.0 * ((samples_per_sec - ksamples_per_sec) / | 50 | ksamples_percent, esamples_percent); |
38 | samples_per_sec)), | ||
39 | esamples_percent); | ||
40 | } else { | 51 | } else { |
41 | float us_samples_per_sec = top->us_samples / top->delay_secs; | 52 | float us_samples_per_sec = top->us_samples / top->delay_secs; |
42 | float guest_kernel_samples_per_sec = top->guest_kernel_samples / top->delay_secs; | 53 | float guest_kernel_samples_per_sec = top->guest_kernel_samples / top->delay_secs; |