diff options
Diffstat (limited to 'tools/perf/builtin-stat.c')
-rw-r--r-- | tools/perf/builtin-stat.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index e459b685a4e9..ee7ada78d86f 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c | |||
@@ -66,6 +66,7 @@ | |||
66 | #include <stdlib.h> | 66 | #include <stdlib.h> |
67 | #include <sys/prctl.h> | 67 | #include <sys/prctl.h> |
68 | #include <locale.h> | 68 | #include <locale.h> |
69 | #include <math.h> | ||
69 | 70 | ||
70 | #define DEFAULT_SEPARATOR " " | 71 | #define DEFAULT_SEPARATOR " " |
71 | #define CNTR_NOT_SUPPORTED "<not supported>" | 72 | #define CNTR_NOT_SUPPORTED "<not supported>" |
@@ -991,12 +992,12 @@ static void abs_printout(int id, int nr, struct perf_evsel *evsel, double avg) | |||
991 | const char *fmt; | 992 | const char *fmt; |
992 | 993 | ||
993 | if (csv_output) { | 994 | if (csv_output) { |
994 | fmt = sc != 1.0 ? "%.2f%s" : "%.0f%s"; | 995 | fmt = floor(sc) != sc ? "%.2f%s" : "%.0f%s"; |
995 | } else { | 996 | } else { |
996 | if (big_num) | 997 | if (big_num) |
997 | fmt = sc != 1.0 ? "%'18.2f%s" : "%'18.0f%s"; | 998 | fmt = floor(sc) != sc ? "%'18.2f%s" : "%'18.0f%s"; |
998 | else | 999 | else |
999 | fmt = sc != 1.0 ? "%18.2f%s" : "%18.0f%s"; | 1000 | fmt = floor(sc) != sc ? "%18.2f%s" : "%18.0f%s"; |
1000 | } | 1001 | } |
1001 | 1002 | ||
1002 | aggr_printout(evsel, id, nr); | 1003 | aggr_printout(evsel, id, nr); |
@@ -1909,6 +1910,9 @@ static int add_default_attributes(void) | |||
1909 | } | 1910 | } |
1910 | 1911 | ||
1911 | if (!evsel_list->nr_entries) { | 1912 | if (!evsel_list->nr_entries) { |
1913 | if (target__has_cpu(&target)) | ||
1914 | default_attrs0[0].config = PERF_COUNT_SW_CPU_CLOCK; | ||
1915 | |||
1912 | if (perf_evlist__add_default_attrs(evsel_list, default_attrs0) < 0) | 1916 | if (perf_evlist__add_default_attrs(evsel_list, default_attrs0) < 0) |
1913 | return -1; | 1917 | return -1; |
1914 | if (pmu_have_event("cpu", "stalled-cycles-frontend")) { | 1918 | if (pmu_have_event("cpu", "stalled-cycles-frontend")) { |
@@ -2000,7 +2004,7 @@ static int process_stat_round_event(struct perf_tool *tool __maybe_unused, | |||
2000 | union perf_event *event, | 2004 | union perf_event *event, |
2001 | struct perf_session *session) | 2005 | struct perf_session *session) |
2002 | { | 2006 | { |
2003 | struct stat_round_event *round = &event->stat_round; | 2007 | struct stat_round_event *stat_round = &event->stat_round; |
2004 | struct perf_evsel *counter; | 2008 | struct perf_evsel *counter; |
2005 | struct timespec tsh, *ts = NULL; | 2009 | struct timespec tsh, *ts = NULL; |
2006 | const char **argv = session->header.env.cmdline_argv; | 2010 | const char **argv = session->header.env.cmdline_argv; |
@@ -2009,12 +2013,12 @@ static int process_stat_round_event(struct perf_tool *tool __maybe_unused, | |||
2009 | evlist__for_each(evsel_list, counter) | 2013 | evlist__for_each(evsel_list, counter) |
2010 | perf_stat_process_counter(&stat_config, counter); | 2014 | perf_stat_process_counter(&stat_config, counter); |
2011 | 2015 | ||
2012 | if (round->type == PERF_STAT_ROUND_TYPE__FINAL) | 2016 | if (stat_round->type == PERF_STAT_ROUND_TYPE__FINAL) |
2013 | update_stats(&walltime_nsecs_stats, round->time); | 2017 | update_stats(&walltime_nsecs_stats, stat_round->time); |
2014 | 2018 | ||
2015 | if (stat_config.interval && round->time) { | 2019 | if (stat_config.interval && stat_round->time) { |
2016 | tsh.tv_sec = round->time / NSECS_PER_SEC; | 2020 | tsh.tv_sec = stat_round->time / NSECS_PER_SEC; |
2017 | tsh.tv_nsec = round->time % NSECS_PER_SEC; | 2021 | tsh.tv_nsec = stat_round->time % NSECS_PER_SEC; |
2018 | ts = &tsh; | 2022 | ts = &tsh; |
2019 | } | 2023 | } |
2020 | 2024 | ||