perf tools: Add mode argument to sort_help()
authorNamhyung Kim <namhyung@kernel.org>
Wed, 31 Jul 2024 23:55:03 +0000 (16:55 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 1 Aug 2024 21:55:55 +0000 (18:55 -0300)
Some sort keys are meaningful only in a specific mode - like branch
stack and memory (data-src).  Add the mode to skip unnecessary ones.
This will be used for 'perf mem report' later.

While at it, change the prefix for the -F/--fields option to remove
the duplicate part.

Before:

  $ perf report -F
   Error: switch `F' requires a value
   Usage: perf report [<options>]

      -F, --fields <key[,keys...]>
     output field(s): overhead period sample  overhead overhead_sys
     overhead_us overhead_guest_sys overhead_guest_us overhead_children
     sample period weight1 weight2 weight3 ins_lat retire_lat
     ...
After:

  $ perf report -F
   Error: switch `F' requires a value
   Usage: perf report [<options>]

      -F, --fields <key[,keys...]>
     output field(s): overhead overhead_sys overhead_us
     overhead_guest_sys overhead_guest_us overhead_children
     sample period weight1 weight2 weight3 ins_lat retire_lat
     ...

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: https://lore.kernel.org/r/20240731235505.710436-5-namhyung@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 6edc0d4..9300529 100644 (file)
@@ -1301,8 +1301,8 @@ int cmd_report(int argc, const char **argv)
                .socket_filter           = -1,
                .skip_empty              = true,
        };
-       char *sort_order_help = sort_help("sort by key(s):");
-       char *field_order_help = sort_help("output field(s): overhead period sample ");
+       char *sort_order_help = sort_help("sort by key(s):", SORT_MODE__NORMAL);
+       char *field_order_help = sort_help("output field(s):", SORT_MODE__NORMAL);
        const char *disassembler_style = NULL, *objdump_path = NULL, *addr2line_path = NULL;
        const struct option options[] = {
        OPT_STRING('i', "input", &input_name, "file",
index ab7c7ff..c4046d5 100644 (file)
@@ -3960,7 +3960,7 @@ static void add_hpp_sort_string(struct strbuf *sb, struct hpp_dimension *s, int
                add_key(sb, s[i].name, llen);
 }
 
-char *sort_help(const char *prefix)
+char *sort_help(const char *prefix, enum sort_mode mode)
 {
        struct strbuf sb;
        char *s;
@@ -3972,10 +3972,12 @@ char *sort_help(const char *prefix)
                            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);
+       if (mode == SORT_MODE__NORMAL || mode == SORT_MODE__BRANCH)
+               add_sort_string(&sb, bstack_sort_dimensions,
+                               ARRAY_SIZE(bstack_sort_dimensions), &len);
+       if (mode == SORT_MODE__NORMAL || mode == SORT_MODE__MEMORY)
+               add_sort_string(&sb, memory_sort_dimensions,
+                               ARRAY_SIZE(memory_sort_dimensions), &len);
        s = strbuf_detach(&sb, NULL);
        strbuf_release(&sb);
        return s;
index 0bd0ee3..6357bc3 100644 (file)
@@ -130,7 +130,7 @@ void reset_output_field(void);
 void sort__setup_elide(FILE *fp);
 void perf_hpp__set_elide(int idx, bool elide);
 
-char *sort_help(const char *prefix);
+char *sort_help(const char *prefix, enum sort_mode mode);
 
 int report_parse_ignore_callees_opt(const struct option *opt, const char *arg, int unset);