perf hists browser: Fix dump to show correct callchain style
The commit8c430a3486
("perf hists browser: Support folded callchains") missed to update hist_browser__dump() so it always shows graph-style callchains regardless of current setting. To fix that, factor out callchain printing code and rename the existing function which prints graph-style callchain. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Cc: Andi Kleen <andi@firstfloor.org> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Wang Nan <wangnan0@huawei.com> Fixes:8c430a3486
("perf hists browser: Support folded callchains") Link: http://lkml.kernel.org/r/1453909257-26015-8-git-send-email-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
7ed5d6e28a
commit
0c841c6c16
|
@ -844,7 +844,7 @@ next:
|
||||||
return row - first_row;
|
return row - first_row;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int hist_browser__show_callchain(struct hist_browser *browser,
|
static int hist_browser__show_callchain_graph(struct hist_browser *browser,
|
||||||
struct rb_root *root, int level,
|
struct rb_root *root, int level,
|
||||||
unsigned short row, u64 total,
|
unsigned short row, u64 total,
|
||||||
print_callchain_entry_fn print,
|
print_callchain_entry_fn print,
|
||||||
|
@ -898,7 +898,7 @@ static int hist_browser__show_callchain(struct hist_browser *browser,
|
||||||
else
|
else
|
||||||
new_total = total;
|
new_total = total;
|
||||||
|
|
||||||
row += hist_browser__show_callchain(browser, &child->rb_root,
|
row += hist_browser__show_callchain_graph(browser, &child->rb_root,
|
||||||
new_level, row, new_total,
|
new_level, row, new_total,
|
||||||
print, arg, is_output_full);
|
print, arg, is_output_full);
|
||||||
}
|
}
|
||||||
|
@ -910,6 +910,43 @@ out:
|
||||||
return row - first_row;
|
return row - first_row;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int hist_browser__show_callchain(struct hist_browser *browser,
|
||||||
|
struct hist_entry *entry, int level,
|
||||||
|
unsigned short row,
|
||||||
|
print_callchain_entry_fn print,
|
||||||
|
struct callchain_print_arg *arg,
|
||||||
|
check_output_full_fn is_output_full)
|
||||||
|
{
|
||||||
|
u64 total = hists__total_period(entry->hists);
|
||||||
|
int printed;
|
||||||
|
|
||||||
|
if (callchain_param.mode == CHAIN_GRAPH_REL) {
|
||||||
|
if (symbol_conf.cumulate_callchain)
|
||||||
|
total = entry->stat_acc->period;
|
||||||
|
else
|
||||||
|
total = entry->stat.period;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (callchain_param.mode == CHAIN_FLAT) {
|
||||||
|
printed = hist_browser__show_callchain_flat(browser,
|
||||||
|
&entry->sorted_chain, row, total,
|
||||||
|
print, arg, is_output_full);
|
||||||
|
} else if (callchain_param.mode == CHAIN_FOLDED) {
|
||||||
|
printed = hist_browser__show_callchain_folded(browser,
|
||||||
|
&entry->sorted_chain, row, total,
|
||||||
|
print, arg, is_output_full);
|
||||||
|
} else {
|
||||||
|
printed = hist_browser__show_callchain_graph(browser,
|
||||||
|
&entry->sorted_chain, level, row, total,
|
||||||
|
print, arg, is_output_full);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (arg->is_current_entry)
|
||||||
|
browser->he_selection = entry;
|
||||||
|
|
||||||
|
return printed;
|
||||||
|
}
|
||||||
|
|
||||||
struct hpp_arg {
|
struct hpp_arg {
|
||||||
struct ui_browser *b;
|
struct ui_browser *b;
|
||||||
char folded_sign;
|
char folded_sign;
|
||||||
|
@ -1084,38 +1121,14 @@ static int hist_browser__show_entry(struct hist_browser *browser,
|
||||||
--row_offset;
|
--row_offset;
|
||||||
|
|
||||||
if (folded_sign == '-' && row != browser->b.rows) {
|
if (folded_sign == '-' && row != browser->b.rows) {
|
||||||
u64 total = hists__total_period(entry->hists);
|
|
||||||
struct callchain_print_arg arg = {
|
struct callchain_print_arg arg = {
|
||||||
.row_offset = row_offset,
|
.row_offset = row_offset,
|
||||||
.is_current_entry = current_entry,
|
.is_current_entry = current_entry,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (callchain_param.mode == CHAIN_GRAPH_REL) {
|
printed += hist_browser__show_callchain(browser, entry, 1, row,
|
||||||
if (symbol_conf.cumulate_callchain)
|
|
||||||
total = entry->stat_acc->period;
|
|
||||||
else
|
|
||||||
total = entry->stat.period;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (callchain_param.mode == CHAIN_FLAT) {
|
|
||||||
printed += hist_browser__show_callchain_flat(browser,
|
|
||||||
&entry->sorted_chain, row, total,
|
|
||||||
hist_browser__show_callchain_entry, &arg,
|
hist_browser__show_callchain_entry, &arg,
|
||||||
hist_browser__check_output_full);
|
hist_browser__check_output_full);
|
||||||
} else if (callchain_param.mode == CHAIN_FOLDED) {
|
|
||||||
printed += hist_browser__show_callchain_folded(browser,
|
|
||||||
&entry->sorted_chain, row, total,
|
|
||||||
hist_browser__show_callchain_entry, &arg,
|
|
||||||
hist_browser__check_output_full);
|
|
||||||
} else {
|
|
||||||
printed += hist_browser__show_callchain(browser,
|
|
||||||
&entry->sorted_chain, 1, row, total,
|
|
||||||
hist_browser__show_callchain_entry, &arg,
|
|
||||||
hist_browser__check_output_full);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (arg.is_current_entry)
|
|
||||||
browser->he_selection = entry;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return printed;
|
return printed;
|
||||||
|
@ -1380,15 +1393,11 @@ do_offset:
|
||||||
static int hist_browser__fprintf_callchain(struct hist_browser *browser,
|
static int hist_browser__fprintf_callchain(struct hist_browser *browser,
|
||||||
struct hist_entry *he, FILE *fp)
|
struct hist_entry *he, FILE *fp)
|
||||||
{
|
{
|
||||||
u64 total = hists__total_period(he->hists);
|
|
||||||
struct callchain_print_arg arg = {
|
struct callchain_print_arg arg = {
|
||||||
.fp = fp,
|
.fp = fp,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (symbol_conf.cumulate_callchain)
|
hist_browser__show_callchain(browser, he, 1, 0,
|
||||||
total = he->stat_acc->period;
|
|
||||||
|
|
||||||
hist_browser__show_callchain(browser, &he->sorted_chain, 1, 0, total,
|
|
||||||
hist_browser__fprintf_callchain_entry, &arg,
|
hist_browser__fprintf_callchain_entry, &arg,
|
||||||
hist_browser__check_dump_full);
|
hist_browser__check_dump_full);
|
||||||
return arg.printed;
|
return arg.printed;
|
||||||
|
|
Loading…
Reference in New Issue