From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965430AbcIVPjo (ORCPT ); Thu, 22 Sep 2016 11:39:44 -0400 Received: from mx1.redhat.com ([209.132.183.28]:45010 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965365AbcIVPj3 (ORCPT ); Thu, 22 Sep 2016 11:39:29 -0400 From: Jiri Olsa To: Arnaldo Carvalho de Melo Cc: lkml , Don Zickus , Joe Mario , Ingo Molnar , Peter Zijlstra , Namhyung Kim , David Ahern , Andi Kleen Subject: [PATCH 54/57] perf c2c report: Add support to manage symbol name length Date: Thu, 22 Sep 2016 17:37:22 +0200 Message-Id: <1474558645-19956-55-git-send-email-jolsa@kernel.org> In-Reply-To: <1474558645-19956-1-git-send-email-jolsa@kernel.org> References: <1474558645-19956-1-git-send-email-jolsa@kernel.org> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Thu, 22 Sep 2016 15:39:29 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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. Link: http://lkml.kernel.org/n/tip-yxf5hfteyfaoi8xrgczqtyha@git.kernel.org Signed-off-by: Jiri Olsa --- tools/perf/builtin-c2c.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c index f39947d29765..73771c3f600e 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; @@ -334,6 +335,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) @@ -344,6 +360,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; } @@ -1560,9 +1579,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); } @@ -2153,6 +2176,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; @@ -2172,6 +2198,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: @@ -2443,6 +2472,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, -- 2.7.4