Commit 590b6a3a authored by Jiri Olsa's avatar Jiri Olsa Committed by Arnaldo Carvalho de Melo

perf c2c report: Add support to manage symbol name length

The width of symbol and source line entries could get really long
and not convenient to display. Adding support to display only
patrt of such strings and possibility to switch to full length
by uing --full-symbols option or 's' key in TUI browser.
Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Don Zickus <dzickus@redhat.com>
Cc: Joe Mario <jmario@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/n/tip-yxf5hfteyfaoi8xrgczqtyha@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent bb342dae
...@@ -62,6 +62,7 @@ struct perf_c2c { ...@@ -62,6 +62,7 @@ struct perf_c2c {
bool show_src; bool show_src;
bool use_stdio; bool use_stdio;
bool stats_only; bool stats_only;
bool symbol_full;
/* HITM shared clines stats */ /* HITM shared clines stats */
struct c2c_stats hitm_stats; struct c2c_stats hitm_stats;
...@@ -336,6 +337,21 @@ struct c2c_fmt { ...@@ -336,6 +337,21 @@ struct c2c_fmt {
struct c2c_dimension *dim; struct c2c_dimension *dim;
}; };
#define SYMBOL_WIDTH 30
static struct c2c_dimension dim_symbol;
static struct c2c_dimension dim_srcline;
static int symbol_width(struct hists *hists, struct sort_entry *se)
{
int width = hists__col_len(hists, se->se_width_idx);
if (!c2c.symbol_full)
width = MIN(width, SYMBOL_WIDTH);
return width;
}
static int c2c_width(struct perf_hpp_fmt *fmt, static int c2c_width(struct perf_hpp_fmt *fmt,
struct perf_hpp *hpp __maybe_unused, struct perf_hpp *hpp __maybe_unused,
struct hists *hists __maybe_unused) struct hists *hists __maybe_unused)
...@@ -346,6 +362,9 @@ static int c2c_width(struct perf_hpp_fmt *fmt, ...@@ -346,6 +362,9 @@ static int c2c_width(struct perf_hpp_fmt *fmt,
c2c_fmt = container_of(fmt, struct c2c_fmt, fmt); c2c_fmt = container_of(fmt, struct c2c_fmt, fmt);
dim = c2c_fmt->dim; dim = c2c_fmt->dim;
if (dim == &dim_symbol || dim == &dim_srcline)
return symbol_width(hists, dim->se);
return dim->se ? hists__col_len(hists, dim->se->se_width_idx) : return dim->se ? hists__col_len(hists, dim->se->se_width_idx) :
c2c_fmt->dim->width; c2c_fmt->dim->width;
} }
...@@ -1563,9 +1582,13 @@ static int c2c_se_entry(struct perf_hpp_fmt *fmt, struct perf_hpp *hpp, ...@@ -1563,9 +1582,13 @@ static int c2c_se_entry(struct perf_hpp_fmt *fmt, struct perf_hpp *hpp,
struct c2c_dimension *dim = c2c_fmt->dim; struct c2c_dimension *dim = c2c_fmt->dim;
size_t len = fmt->user_len; size_t len = fmt->user_len;
if (!len) if (!len) {
len = hists__col_len(he->hists, dim->se->se_width_idx); len = hists__col_len(he->hists, dim->se->se_width_idx);
if (dim == &dim_symbol || dim == &dim_srcline)
len = symbol_width(he->hists, dim->se);
}
return dim->se->se_snprintf(he, hpp->buf, hpp->size, len); return dim->se->se_snprintf(he, hpp->buf, hpp->size, len);
} }
...@@ -2159,6 +2182,9 @@ static int perf_c2c__browse_cacheline(struct hist_entry *he) ...@@ -2159,6 +2182,9 @@ static int perf_c2c__browse_cacheline(struct hist_entry *he)
struct hist_browser *browser; struct hist_browser *browser;
int key = -1; int key = -1;
/* Display compact version first. */
c2c.symbol_full = false;
c2c_he = container_of(he, struct c2c_hist_entry, he); c2c_he = container_of(he, struct c2c_hist_entry, he);
c2c_hists = c2c_he->hists; c2c_hists = c2c_he->hists;
...@@ -2178,6 +2204,9 @@ static int perf_c2c__browse_cacheline(struct hist_entry *he) ...@@ -2178,6 +2204,9 @@ static int perf_c2c__browse_cacheline(struct hist_entry *he)
key = hist_browser__run(browser, "help"); key = hist_browser__run(browser, "help");
switch (key) { switch (key) {
case 's':
c2c.symbol_full = !c2c.symbol_full;
break;
case 'q': case 'q':
goto out; goto out;
default: default:
...@@ -2449,6 +2478,8 @@ static int perf_c2c__report(int argc, const char **argv) ...@@ -2449,6 +2478,8 @@ static int perf_c2c__report(int argc, const char **argv)
#endif #endif
OPT_BOOLEAN(0, "stats", &c2c.stats_only, OPT_BOOLEAN(0, "stats", &c2c.stats_only,
"Use the stdio interface"), "Use the stdio interface"),
OPT_BOOLEAN(0, "full-symbols", &c2c.symbol_full,
"Display full length of symbols"),
OPT_CALLBACK_DEFAULT('g', "call-graph", &callchain_param, OPT_CALLBACK_DEFAULT('g', "call-graph", &callchain_param,
"print_type,threshold[,print_limit],order,sort_key[,branch],value", "print_type,threshold[,print_limit],order,sort_key[,branch],value",
callchain_help, &parse_callchain_opt, callchain_help, &parse_callchain_opt,
......
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