Re: RFC: callchain showing same entry as hist_entry

From: Namhyung Kim
Date: Tue Aug 16 2016 - 10:56:43 EST


Hi Arnaldo,

On Tue, Aug 16, 2016 at 11:36:28AM -0300, Arnaldo Carvalho de Melo wrote:
> Hi Namhyung, Jiri,
>
> please take a look at the patch below, and Ack if possible, it
> is a problem introduced in:
>
> cfaa154b2335 ("perf tools: Get rid of obsolete hist_entry__sort_list")
>
> That is not equivalent to the code that was there and results in having
> the same entry as the first entry for the callchain as in the
> hist_entry, which is annoying and doesn't match the original intent of
> that 'continue' branch, as described in the comment right above it.

AFAIK the intent was to skip first callchain entry iff the first sort
key is 'symbol'. The sort_order being NULL means it'd use the default
sort key which is 'comm,dso,sym' so it should not skip the first
callchain entry.

The original code (before cfaa154b2335) was like below:

- if (!i++ && sort__first_dimension == SORT_SYM)
+ if (!i++ && field_order == NULL &&
+ sort_order && !prefixcmp(sort_order, "sym"))

I think the current code works as intended, no?

Thanks,
Namhyung


>
> Now looking at doing the same for the TUI...
>
> - Arnaldo
>
> diff --git a/tools/perf/ui/stdio/hist.c b/tools/perf/ui/stdio/hist.c
> index 9b65f4a6b35a..46a083e59ce9 100644
> --- a/tools/perf/ui/stdio/hist.c
> +++ b/tools/perf/ui/stdio/hist.c
> @@ -207,7 +207,7 @@ static size_t callchain__fprintf_graph(FILE *fp, struct rb_root *root,
> * displayed twice.
> */
> if (!i++ && field_order == NULL &&
> - sort_order && !prefixcmp(sort_order, "sym"))
> + (sort_order == NULL || !prefixcmp(sort_order, "sym")))
> continue;
> if (!printed) {
> ret += callchain__fprintf_left_margin(fp, left_margin);