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, ...@@ -844,7 +844,7 @@ static int hist_browser__show_callchain_folded(struct hist_browser *browser,
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, ...@@ -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 @@ static int hist_browser__show_callchain(struct hist_browser *browser, ...@@ -910,6 +910,43 @@ static int hist_browser__show_callchain(struct hist_browser *browser,
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, ...@@ -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 @@ static void ui_browser__hists_seek(struct ui_browser *browser, ...@@ -1380,15 +1393,11 @@ static void ui_browser__hists_seek(struct ui_browser *browser,
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;
......
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