aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-stat.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/builtin-stat.c')
-rw-r--r--tools/perf/builtin-stat.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index a9f06715e44d..1ad04ce29c34 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -61,6 +61,8 @@
61#include <locale.h> 61#include <locale.h>
62 62
63#define DEFAULT_SEPARATOR " " 63#define DEFAULT_SEPARATOR " "
64#define CNTR_NOT_SUPPORTED "<not supported>"
65#define CNTR_NOT_COUNTED "<not counted>"
64 66
65static struct perf_event_attr default_attrs[] = { 67static struct perf_event_attr default_attrs[] = {
66 68
@@ -448,6 +450,7 @@ static int run_perf_stat(int argc __used, const char **argv)
448 if (verbose) 450 if (verbose)
449 ui__warning("%s event is not supported by the kernel.\n", 451 ui__warning("%s event is not supported by the kernel.\n",
450 event_name(counter)); 452 event_name(counter));
453 counter->supported = false;
451 continue; 454 continue;
452 } 455 }
453 456
@@ -466,6 +469,7 @@ static int run_perf_stat(int argc __used, const char **argv)
466 die("Not all events could be opened.\n"); 469 die("Not all events could be opened.\n");
467 return -1; 470 return -1;
468 } 471 }
472 counter->supported = true;
469 } 473 }
470 474
471 if (perf_evlist__set_filters(evsel_list)) { 475 if (perf_evlist__set_filters(evsel_list)) {
@@ -513,7 +517,10 @@ static void print_noise_pct(double total, double avg)
513 if (avg) 517 if (avg)
514 pct = 100.0*total/avg; 518 pct = 100.0*total/avg;
515 519
516 fprintf(stderr, " ( +-%6.2f%% )", pct); 520 if (csv_output)
521 fprintf(stderr, "%s%.2f%%", csv_sep, pct);
522 else
523 fprintf(stderr, " ( +-%6.2f%% )", pct);
517} 524}
518 525
519static void print_noise(struct perf_evsel *evsel, double avg) 526static void print_noise(struct perf_evsel *evsel, double avg)
@@ -861,7 +868,7 @@ static void print_counter_aggr(struct perf_evsel *counter)
861 if (scaled == -1) { 868 if (scaled == -1) {
862 fprintf(stderr, "%*s%s%*s", 869 fprintf(stderr, "%*s%s%*s",
863 csv_output ? 0 : 18, 870 csv_output ? 0 : 18,
864 "<not counted>", 871 counter->supported ? CNTR_NOT_COUNTED : CNTR_NOT_SUPPORTED,
865 csv_sep, 872 csv_sep,
866 csv_output ? 0 : -24, 873 csv_output ? 0 : -24,
867 event_name(counter)); 874 event_name(counter));
@@ -878,13 +885,13 @@ static void print_counter_aggr(struct perf_evsel *counter)
878 else 885 else
879 abs_printout(-1, counter, avg); 886 abs_printout(-1, counter, avg);
880 887
888 print_noise(counter, avg);
889
881 if (csv_output) { 890 if (csv_output) {
882 fputc('\n', stderr); 891 fputc('\n', stderr);
883 return; 892 return;
884 } 893 }
885 894
886 print_noise(counter, avg);
887
888 if (scaled) { 895 if (scaled) {
889 double avg_enabled, avg_running; 896 double avg_enabled, avg_running;
890 897
@@ -914,7 +921,8 @@ static void print_counter(struct perf_evsel *counter)
914 csv_output ? 0 : -4, 921 csv_output ? 0 : -4,
915 evsel_list->cpus->map[cpu], csv_sep, 922 evsel_list->cpus->map[cpu], csv_sep,
916 csv_output ? 0 : 18, 923 csv_output ? 0 : 18,
917 "<not counted>", csv_sep, 924 counter->supported ? CNTR_NOT_COUNTED : CNTR_NOT_SUPPORTED,
925 csv_sep,
918 csv_output ? 0 : -24, 926 csv_output ? 0 : -24,
919 event_name(counter)); 927 event_name(counter));
920 928
@@ -1024,7 +1032,7 @@ static int stat__set_big_num(const struct option *opt __used,
1024static const struct option options[] = { 1032static const struct option options[] = {
1025 OPT_CALLBACK('e', "event", &evsel_list, "event", 1033 OPT_CALLBACK('e', "event", &evsel_list, "event",
1026 "event selector. use 'perf list' to list available events", 1034 "event selector. use 'perf list' to list available events",
1027 parse_events), 1035 parse_events_option),
1028 OPT_CALLBACK(0, "filter", &evsel_list, "filter", 1036 OPT_CALLBACK(0, "filter", &evsel_list, "filter",
1029 "event filter", parse_filter), 1037 "event filter", parse_filter),
1030 OPT_BOOLEAN('i', "no-inherit", &no_inherit, 1038 OPT_BOOLEAN('i', "no-inherit", &no_inherit,