diff options
Diffstat (limited to 'tools/perf')
-rw-r--r-- | tools/perf/builtin-c2c.c | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c index b3e48e42e825..4645461bd997 100644 --- a/tools/perf/builtin-c2c.c +++ b/tools/perf/builtin-c2c.c @@ -62,6 +62,7 @@ struct perf_c2c { bool show_src; bool use_stdio; bool stats_only; + bool symbol_full; /* HITM shared clines stats */ struct c2c_stats hitm_stats; @@ -336,6 +337,21 @@ struct c2c_fmt { 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, struct perf_hpp *hpp __maybe_unused, struct hists *hists __maybe_unused) @@ -346,6 +362,9 @@ static int c2c_width(struct perf_hpp_fmt *fmt, c2c_fmt = container_of(fmt, struct c2c_fmt, fmt); 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) : c2c_fmt->dim->width; } @@ -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; size_t len = fmt->user_len; - if (!len) + if (!len) { 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); } @@ -2159,6 +2182,9 @@ static int perf_c2c__browse_cacheline(struct hist_entry *he) struct hist_browser *browser; int key = -1; + /* Display compact version first. */ + c2c.symbol_full = false; + c2c_he = container_of(he, struct c2c_hist_entry, he); c2c_hists = c2c_he->hists; @@ -2178,6 +2204,9 @@ static int perf_c2c__browse_cacheline(struct hist_entry *he) key = hist_browser__run(browser, "help"); switch (key) { + case 's': + c2c.symbol_full = !c2c.symbol_full; + break; case 'q': goto out; default: @@ -2449,6 +2478,8 @@ static int perf_c2c__report(int argc, const char **argv) #endif OPT_BOOLEAN(0, "stats", &c2c.stats_only, "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, "print_type,threshold[,print_limit],order,sort_key[,branch],value", callchain_help, &parse_callchain_opt, |