Re: [PATCH 2/4] perf annotate: Align filename:linenr and more correct summary

From: Namhyung Kim
Date: Wed Feb 22 2017 - 06:13:18 EST


On Wed, Feb 22, 2017 at 7:08 PM, Taeung Song <treeze.taeung@xxxxxxxxx> wrote:
> In the stdio interface, currently 'filename:linenr' infos
> are confusedly printed in the intervals of assembly code.
> So fix it.
>
> The cause was a 0.5% filter of if statement. After fixed,
> additionally summary of overhead per srcline is more correct.

This patch does two things and fails to explain why.

Thanks,
Namhyung


>
> Before:
>
> # perf annotate --stdio -l
>
> Sorted summary for file /home/taeung/workspace/perf-test/test
> ----------------------------------------------
>
> 36.57 test.c:38
> 28.72 test.c:37
>
> ...
>
> Percent | Source code & Disassembly of test ...
>
> ...
>
> 0.21 : 400816: push %rbp
> test.c:26 1.86 : 400817: mov %rsp,%rbp
> 0.21 : 40081a: mov %edi,-0x24(%rbp)
> 0.21 : 40081d: mov %rsi,-0x30(%rbp)
>
> After:
>
> # perf annotate --stdio -l
>
> Sorted summary for file /home/taeung/workspace/perf-test/test
> ----------------------------------------------
>
> 37.40 test.c:38
> 29.34 test.c:37
>
> ...
>
> Percent | Source code & Disassembly of test ...
>
> ...
>
> test.c:26
> 0.21 : 400816: push %rbp
> 1.86 : 400817: mov %rsp,%rbp
> 0.21 : 40081a: mov %edi,-0x24(%rbp)
> 0.21 : 40081d: mov %rsi,-0x30(%rbp)
>
> Cc: Namhyung Kim <namhyung@xxxxxxxxxx>
> Cc: Jiri Olsa <jolsa@xxxxxxxxxx>
> Signed-off-by: Taeung Song <treeze.taeung@xxxxxxxxx>
> ---
> tools/perf/util/annotate.c | 17 ++---------------
> 1 file changed, 2 insertions(+), 15 deletions(-)
>
> diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
> index bc54e41..9d0aa50 100644
> --- a/tools/perf/util/annotate.c
> +++ b/tools/perf/util/annotate.c
> @@ -1002,7 +1002,6 @@ static int disasm_line__print(struct disasm_line *dl, struct symbol *sym, u64 st
> int max_lines, struct disasm_line *queue)
> {
> static const char *prev_line;
> - static const char *prev_color;
>
> if (dl->offset != -1) {
> const char *path = NULL;
> @@ -1059,17 +1058,10 @@ static int disasm_line__print(struct disasm_line *dl, struct symbol *sym, u64 st
>
> color = get_percent_color(max_percent);
>
> - /*
> - * Also color the filename and line if needed, with
> - * the same color than the percentage. Don't print it
> - * twice for close colored addr with the same filename:line
> - */
> if (path) {
> - if (!prev_line || strcmp(prev_line, path)
> - || color != prev_color) {
> - color_fprintf(stdout, color, " %s", path);
> + if (!prev_line || strcmp(prev_line, path)) {
> + fprintf(stdout, " %s\n", path);
> prev_line = path;
> - prev_color = color;
> }
> }
>
> @@ -1650,14 +1642,9 @@ static int symbol__get_source_line(struct symbol *sym, struct map *map,
> percent_max = src_line->samples[k].percent;
> }
>
> - if (percent_max <= 0.5)
> - goto next;
> -
> offset = start + i;
> src_line->path = get_srcline(map->dso, offset, NULL, false);
> insert_source_line(&tmp_root, src_line);
> -
> - next:
> src_line = (void *)src_line + sizeof_src_line;
> }
>
> --
> 2.7.4
>



--
Thanks,
Namhyung