]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
perf report: Show all sort keys in help output
authorAndi Kleen <ak@linux.intel.com>
Thu, 14 Mar 2019 22:49:57 +0000 (15:49 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 19 Mar 2019 19:15:42 +0000 (16:15 -0300)
Show all the supported sort keys in the command line help output, so
that it's not needed to refer to the manpage.

Before:

  % perf report -h
  ...
       -s, --sort <key[,key2...]>
                            sort by key(s): pid, comm, dso, symbol, parent, cpu, srcline, ... Please refer the man page for the complete list.

After:

  % perf report -h
  ...
      -s, --sort <key[,key2...]>
                            sort by key(s): overhead overhead_sys overhead_us overhead_guest_sys overhead_guest_us overhead_children sample period pid comm dso symbol parent cpu ...

Signed-off-by: Andi Kleen <ak@linux.intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
LPU-Reference: 20190314225002.30108-5-andi@firstfloor.org
Link: https://lkml.kernel.org/n/tip-9r3uz2ch4izoi1uln3f889co@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-report.c
tools/perf/util/sort.c
tools/perf/util/sort.h

index 1921aaa9cece896ca9265eeb6b8f36e097a83f8f..4054eb1f98ac19d956cf680dfb84dcf13d509db5 100644 (file)
@@ -1083,10 +1083,9 @@ int cmd_report(int argc, const char **argv)
        OPT_BOOLEAN(0, "header-only", &report.header_only,
                    "Show only data header."),
        OPT_STRING('s', "sort", &sort_order, "key[,key2...]",
-                  "sort by key(s): pid, comm, dso, symbol, parent, cpu, srcline, ..."
-                  " Please refer the man page for the complete list."),
+                  sort_help("sort by key(s):")),
        OPT_STRING('F', "fields", &field_order, "key[,keys...]",
-                  "output field(s): overhead, period, sample plus all of sort keys"),
+                  sort_help("output field(s): overhead period sample ")),
        OPT_BOOLEAN(0, "show-cpu-utilization", &symbol_conf.show_cpu_utilization,
                    "Show sample percentage for different cpu modes"),
        OPT_BOOLEAN_FLAG(0, "showcpuutilization", &symbol_conf.show_cpu_utilization,
index bdd30cab51cb7564227c5097dbb52119f6934cdd..5d2518e89fc49f21ac6a85c69283c07dc05042ef 100644 (file)
@@ -13,6 +13,7 @@
 #include "evsel.h"
 #include "evlist.h"
 #include "strlist.h"
+#include "strbuf.h"
 #include <traceevent/event-parse.h>
 #include "mem-events.h"
 #include "annotate.h"
@@ -3107,3 +3108,54 @@ void reset_output_field(void)
        reset_dimensions();
        perf_hpp__reset_output_field(&perf_hpp_list);
 }
+
+#define INDENT (3*8 + 1)
+
+static void add_key(struct strbuf *sb, const char *str, int *llen)
+{
+       if (*llen >= 75) {
+               strbuf_addstr(sb, "\n\t\t\t ");
+               *llen = INDENT;
+       }
+       strbuf_addf(sb, " %s", str);
+       *llen += strlen(str) + 1;
+}
+
+static void add_sort_string(struct strbuf *sb, struct sort_dimension *s, int n,
+                           int *llen)
+{
+       int i;
+
+       for (i = 0; i < n; i++)
+               add_key(sb, s[i].name, llen);
+}
+
+static void add_hpp_sort_string(struct strbuf *sb, struct hpp_dimension *s, int n,
+                               int *llen)
+{
+       int i;
+
+       for (i = 0; i < n; i++)
+               add_key(sb, s[i].name, llen);
+}
+
+const char *sort_help(const char *prefix)
+{
+       struct strbuf sb;
+       char *s;
+       int len = strlen(prefix) + INDENT;
+
+       strbuf_init(&sb, 300);
+       strbuf_addstr(&sb, prefix);
+       add_hpp_sort_string(&sb, hpp_sort_dimensions,
+                           ARRAY_SIZE(hpp_sort_dimensions), &len);
+       add_sort_string(&sb, common_sort_dimensions,
+                           ARRAY_SIZE(common_sort_dimensions), &len);
+       add_sort_string(&sb, bstack_sort_dimensions,
+                           ARRAY_SIZE(bstack_sort_dimensions), &len);
+       add_sort_string(&sb, memory_sort_dimensions,
+                           ARRAY_SIZE(memory_sort_dimensions), &len);
+       s = strbuf_detach(&sb, NULL);
+       strbuf_release(&sb);
+       return s;
+}
index bb9442ab7a0c3084bc23b8634cc8ac735e27c338..ce376a73f964dc83dc9a222b212cfcf3bad82aff 100644 (file)
@@ -296,6 +296,8 @@ void reset_output_field(void);
 void sort__setup_elide(FILE *fp);
 void perf_hpp__set_elide(int idx, bool elide);
 
+const char *sort_help(const char *prefix);
+
 int report_parse_ignore_callees_opt(const struct option *opt, const char *arg, int unset);
 
 bool is_strict_order(const char *order);