|
@@ -1157,6 +1157,7 @@ __sort_dimension__alloc_hpp(struct sort_dimension *sd)
|
|
|
|
|
|
INIT_LIST_HEAD(&hse->hpp.list);
|
|
INIT_LIST_HEAD(&hse->hpp.list);
|
|
INIT_LIST_HEAD(&hse->hpp.sort_list);
|
|
INIT_LIST_HEAD(&hse->hpp.sort_list);
|
|
|
|
+ hse->hpp.elide = false;
|
|
|
|
|
|
return hse;
|
|
return hse;
|
|
}
|
|
}
|
|
@@ -1364,27 +1365,64 @@ static int __setup_sorting(void)
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
-bool perf_hpp__should_skip(struct perf_hpp_fmt *format)
|
|
|
|
|
|
+void perf_hpp__set_elide(int idx, bool elide)
|
|
{
|
|
{
|
|
- if (perf_hpp__is_sort_entry(format)) {
|
|
|
|
- struct hpp_sort_entry *hse;
|
|
|
|
|
|
+ struct perf_hpp_fmt *fmt;
|
|
|
|
+ struct hpp_sort_entry *hse;
|
|
|
|
|
|
- hse = container_of(format, struct hpp_sort_entry, hpp);
|
|
|
|
- return hse->se->elide;
|
|
|
|
|
|
+ perf_hpp__for_each_format(fmt) {
|
|
|
|
+ if (!perf_hpp__is_sort_entry(fmt))
|
|
|
|
+ continue;
|
|
|
|
+
|
|
|
|
+ hse = container_of(fmt, struct hpp_sort_entry, hpp);
|
|
|
|
+ if (hse->se->se_width_idx == idx) {
|
|
|
|
+ fmt->elide = elide;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- return false;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
-static void sort_entry__setup_elide(struct sort_entry *se,
|
|
|
|
- struct strlist *list,
|
|
|
|
- const char *list_name, FILE *fp)
|
|
|
|
|
|
+static bool __get_elide(struct strlist *list, const char *list_name, FILE *fp)
|
|
{
|
|
{
|
|
if (list && strlist__nr_entries(list) == 1) {
|
|
if (list && strlist__nr_entries(list) == 1) {
|
|
if (fp != NULL)
|
|
if (fp != NULL)
|
|
fprintf(fp, "# %s: %s\n", list_name,
|
|
fprintf(fp, "# %s: %s\n", list_name,
|
|
strlist__entry(list, 0)->s);
|
|
strlist__entry(list, 0)->s);
|
|
- se->elide = true;
|
|
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ return false;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static bool get_elide(int idx, FILE *output)
|
|
|
|
+{
|
|
|
|
+ switch (idx) {
|
|
|
|
+ case HISTC_SYMBOL:
|
|
|
|
+ return __get_elide(symbol_conf.sym_list, "symbol", output);
|
|
|
|
+ case HISTC_DSO:
|
|
|
|
+ return __get_elide(symbol_conf.dso_list, "dso", output);
|
|
|
|
+ case HISTC_COMM:
|
|
|
|
+ return __get_elide(symbol_conf.comm_list, "comm", output);
|
|
|
|
+ default:
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ if (sort__mode != SORT_MODE__BRANCH)
|
|
|
|
+ return false;
|
|
|
|
+
|
|
|
|
+ switch (idx) {
|
|
|
|
+ case HISTC_SYMBOL_FROM:
|
|
|
|
+ return __get_elide(symbol_conf.sym_from_list, "sym_from", output);
|
|
|
|
+ case HISTC_SYMBOL_TO:
|
|
|
|
+ return __get_elide(symbol_conf.sym_to_list, "sym_to", output);
|
|
|
|
+ case HISTC_DSO_FROM:
|
|
|
|
+ return __get_elide(symbol_conf.dso_from_list, "dso_from", output);
|
|
|
|
+ case HISTC_DSO_TO:
|
|
|
|
+ return __get_elide(symbol_conf.dso_to_list, "dso_to", output);
|
|
|
|
+ default:
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return false;
|
|
}
|
|
}
|
|
|
|
|
|
void sort__setup_elide(FILE *output)
|
|
void sort__setup_elide(FILE *output)
|
|
@@ -1392,39 +1430,12 @@ void sort__setup_elide(FILE *output)
|
|
struct perf_hpp_fmt *fmt;
|
|
struct perf_hpp_fmt *fmt;
|
|
struct hpp_sort_entry *hse;
|
|
struct hpp_sort_entry *hse;
|
|
|
|
|
|
- sort_entry__setup_elide(&sort_dso, symbol_conf.dso_list,
|
|
|
|
- "dso", output);
|
|
|
|
- sort_entry__setup_elide(&sort_comm, symbol_conf.comm_list,
|
|
|
|
- "comm", output);
|
|
|
|
- sort_entry__setup_elide(&sort_sym, symbol_conf.sym_list,
|
|
|
|
- "symbol", output);
|
|
|
|
-
|
|
|
|
- if (sort__mode == SORT_MODE__BRANCH) {
|
|
|
|
- sort_entry__setup_elide(&sort_dso_from,
|
|
|
|
- symbol_conf.dso_from_list,
|
|
|
|
- "dso_from", output);
|
|
|
|
- sort_entry__setup_elide(&sort_dso_to,
|
|
|
|
- symbol_conf.dso_to_list,
|
|
|
|
- "dso_to", output);
|
|
|
|
- sort_entry__setup_elide(&sort_sym_from,
|
|
|
|
- symbol_conf.sym_from_list,
|
|
|
|
- "sym_from", output);
|
|
|
|
- sort_entry__setup_elide(&sort_sym_to,
|
|
|
|
- symbol_conf.sym_to_list,
|
|
|
|
- "sym_to", output);
|
|
|
|
- } else if (sort__mode == SORT_MODE__MEMORY) {
|
|
|
|
- sort_entry__setup_elide(&sort_dso, symbol_conf.dso_list,
|
|
|
|
- "symbol_daddr", output);
|
|
|
|
- sort_entry__setup_elide(&sort_dso, symbol_conf.dso_list,
|
|
|
|
- "dso_daddr", output);
|
|
|
|
- sort_entry__setup_elide(&sort_dso, symbol_conf.dso_list,
|
|
|
|
- "mem", output);
|
|
|
|
- sort_entry__setup_elide(&sort_dso, symbol_conf.dso_list,
|
|
|
|
- "local_weight", output);
|
|
|
|
- sort_entry__setup_elide(&sort_dso, symbol_conf.dso_list,
|
|
|
|
- "tlb", output);
|
|
|
|
- sort_entry__setup_elide(&sort_dso, symbol_conf.dso_list,
|
|
|
|
- "snoop", output);
|
|
|
|
|
|
+ perf_hpp__for_each_format(fmt) {
|
|
|
|
+ if (!perf_hpp__is_sort_entry(fmt))
|
|
|
|
+ continue;
|
|
|
|
+
|
|
|
|
+ hse = container_of(fmt, struct hpp_sort_entry, hpp);
|
|
|
|
+ fmt->elide = get_elide(hse->se->se_width_idx, output);
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -1435,8 +1446,7 @@ void sort__setup_elide(FILE *output)
|
|
if (!perf_hpp__is_sort_entry(fmt))
|
|
if (!perf_hpp__is_sort_entry(fmt))
|
|
continue;
|
|
continue;
|
|
|
|
|
|
- hse = container_of(fmt, struct hpp_sort_entry, hpp);
|
|
|
|
- if (!hse->se->elide)
|
|
|
|
|
|
+ if (!fmt->elide)
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1444,8 +1454,7 @@ void sort__setup_elide(FILE *output)
|
|
if (!perf_hpp__is_sort_entry(fmt))
|
|
if (!perf_hpp__is_sort_entry(fmt))
|
|
continue;
|
|
continue;
|
|
|
|
|
|
- hse = container_of(fmt, struct hpp_sort_entry, hpp);
|
|
|
|
- hse->se->elide = false;
|
|
|
|
|
|
+ fmt->elide = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|