Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf tools: Consolidate management of default sort orders

The perf uses different default sort orders for different use-cases,
and this was scattered throughout the code. Add get_default_sort_
order() function to handle this and change initial value of sort_order
to NULL to distinguish it from user-given one.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1400480762-22852-10-git-send-email-namhyung@kernel.org
Signed-off-by: Jiri Olsa <jolsa@kernel.org>

authored by

Namhyung Kim and committed by
Jiri Olsa
512ae1bd a2ce067e

+31 -24
+2 -2
tools/perf/builtin-diff.c
··· 60 60 #define data__for_each_file(i, d) data__for_each_file_start(i, d, 0) 61 61 #define data__for_each_file_new(i, d) data__for_each_file_start(i, d, 1) 62 62 63 - static char diff__default_sort_order[] = "dso,symbol"; 64 63 static bool force; 65 64 static bool show_period; 66 65 static bool show_formula; ··· 1141 1142 { 1142 1143 perf_config(perf_default_config, NULL); 1143 1144 1144 - sort_order = diff__default_sort_order; 1145 1145 argc = parse_options(argc, argv, options, diff_usage, 0); 1146 1146 1147 1147 if (symbol__init() < 0) ··· 1150 1152 return -1; 1151 1153 1152 1154 ui_init(); 1155 + 1156 + sort__mode = SORT_MODE__DIFF; 1153 1157 1154 1158 if (setup_sorting() < 0) 1155 1159 usage_with_options(diff_usage, options);
-18
tools/perf/builtin-report.c
··· 805 805 if (branch_mode == -1 && has_br_stack) 806 806 sort__mode = SORT_MODE__BRANCH; 807 807 808 - /* sort__mode could be NORMAL if --no-branch-stack */ 809 - if (sort__mode == SORT_MODE__BRANCH) { 810 - /* 811 - * if no sort_order is provided, then specify 812 - * branch-mode specific order 813 - */ 814 - if (sort_order == default_sort_order) 815 - sort_order = "comm,dso_from,symbol_from," 816 - "dso_to,symbol_to"; 817 - 818 - } 819 808 if (report.mem_mode) { 820 809 if (sort__mode == SORT_MODE__BRANCH) { 821 810 pr_err("branch and mem mode incompatible\n"); 822 811 goto error; 823 812 } 824 813 sort__mode = SORT_MODE__MEMORY; 825 - 826 - /* 827 - * if no sort_order is provided, then specify 828 - * branch-mode specific order 829 - */ 830 - if (sort_order == default_sort_order) 831 - sort_order = "local_weight,mem,sym,dso,symbol_daddr,dso_daddr,snoop,tlb,locked"; 832 814 } 833 815 834 816 if (setup_sorting() < 0) {
+1 -2
tools/perf/builtin-top.c
··· 1137 1137 if (argc) 1138 1138 usage_with_options(top_usage, options); 1139 1139 1140 - if (sort_order == default_sort_order) 1141 - sort_order = "dso,symbol"; 1140 + sort__mode = SORT_MODE__TOP; 1142 1141 1143 1142 if (setup_sorting() < 0) { 1144 1143 parse_options_usage(top_usage, options, "s", 1);
+26 -2
tools/perf/util/sort.c
··· 8 8 const char default_parent_pattern[] = "^sys_|^do_page_fault"; 9 9 const char *parent_pattern = default_parent_pattern; 10 10 const char default_sort_order[] = "comm,dso,symbol"; 11 - const char *sort_order = default_sort_order; 11 + const char default_branch_sort_order[] = "comm,dso_from,symbol_from,dso_to,symbol_to"; 12 + const char default_mem_sort_order[] = "local_weight,mem,sym,dso,symbol_daddr,dso_daddr,snoop,tlb,locked"; 13 + const char default_top_sort_order[] = "dso,symbol"; 14 + const char default_diff_sort_order[] = "dso,symbol"; 15 + const char *sort_order; 12 16 regex_t ignore_callees_regex; 13 17 int have_ignore_callees = 0; 14 18 int sort__need_collapse = 0; ··· 1222 1218 return -ESRCH; 1223 1219 } 1224 1220 1221 + static const char *get_default_sort_order(void) 1222 + { 1223 + const char *default_sort_orders[] = { 1224 + default_sort_order, 1225 + default_branch_sort_order, 1226 + default_mem_sort_order, 1227 + default_top_sort_order, 1228 + default_diff_sort_order, 1229 + }; 1230 + 1231 + BUG_ON(sort__mode >= ARRAY_SIZE(default_sort_orders)); 1232 + 1233 + return default_sort_orders[sort__mode]; 1234 + } 1235 + 1225 1236 int setup_sorting(void) 1226 1237 { 1227 - char *tmp, *tok, *str = strdup(sort_order); 1238 + char *tmp, *tok, *str; 1239 + const char *sort_keys = sort_order; 1228 1240 int ret = 0; 1229 1241 1242 + if (sort_keys == NULL) 1243 + sort_keys = get_default_sort_order(); 1244 + 1245 + str = strdup(sort_keys); 1230 1246 if (str == NULL) { 1231 1247 error("Not enough memory to setup sort keys"); 1232 1248 return -ENOMEM;
+2
tools/perf/util/sort.h
··· 133 133 SORT_MODE__NORMAL, 134 134 SORT_MODE__BRANCH, 135 135 SORT_MODE__MEMORY, 136 + SORT_MODE__TOP, 137 + SORT_MODE__DIFF, 136 138 }; 137 139 138 140 enum sort_type {