Commit 0c841c6c authored by Namhyung Kim's avatar Namhyung Kim Committed by Arnaldo Carvalho de Melo

perf hists browser: Fix dump to show correct callchain style

The commit 8c430a34 ("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: default avatarNamhyung 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: 8c430a34 ("perf hists browser: Support folded callchains")
Link: http://lkml.kernel.org/r/1453909257-26015-8-git-send-email-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 7ed5d6e2
......@@ -844,7 +844,7 @@ static int hist_browser__show_callchain_folded(struct hist_browser *browser,
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,
unsigned short row, u64 total,
print_callchain_entry_fn print,
......@@ -898,7 +898,7 @@ static int hist_browser__show_callchain(struct hist_browser *browser,
else
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,
print, arg, is_output_full);
}
......@@ -910,6 +910,43 @@ static int hist_browser__show_callchain(struct hist_browser *browser,
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 ui_browser *b;
char folded_sign;
......@@ -1084,38 +1121,14 @@ static int hist_browser__show_entry(struct hist_browser *browser,
--row_offset;
if (folded_sign == '-' && row != browser->b.rows) {
u64 total = hists__total_period(entry->hists);
struct callchain_print_arg arg = {
.row_offset = row_offset,
.is_current_entry = current_entry,
};
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,
printed += hist_browser__show_callchain(browser, entry, 1, row,
hist_browser__show_callchain_entry, &arg,
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;
......@@ -1380,15 +1393,11 @@ static void ui_browser__hists_seek(struct ui_browser *browser,
static int hist_browser__fprintf_callchain(struct hist_browser *browser,
struct hist_entry *he, FILE *fp)
{
u64 total = hists__total_period(he->hists);
struct callchain_print_arg arg = {
.fp = fp,
};
if (symbol_conf.cumulate_callchain)
total = he->stat_acc->period;
hist_browser__show_callchain(browser, &he->sorted_chain, 1, 0, total,
hist_browser__show_callchain(browser, he, 1, 0,
hist_browser__fprintf_callchain_entry, &arg,
hist_browser__check_dump_full);
return arg.printed;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment