OSDN Git Service

perf annotate: Introduce set_offsets() method out of TUI code
authorArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 15 Mar 2018 18:59:01 +0000 (15:59 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 20 Mar 2018 16:19:29 +0000 (13:19 -0300)
More non-strictly TUI code being moved to the UI neutral annotation
library, to be used in the upcoming --stdio2 output mode.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jin Yao <yao.jin@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: https://lkml.kernel.org/n/tip-ek20dnd8z2y5v54pcepihybz@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/ui/browsers/annotate.c
tools/perf/util/annotate.c
tools/perf/util/annotate.h

index 00b8834..977c7e9 100644 (file)
@@ -938,7 +938,6 @@ int symbol__tui_annotate(struct symbol *sym, struct map *map,
                         struct perf_evsel *evsel,
                         struct hist_browser_timer *hbt)
 {
-       struct annotation_line *al;
        struct annotation *notes = symbol__annotation(sym);
        size_t size;
        struct map_symbol ms = {
@@ -991,27 +990,8 @@ int symbol__tui_annotate(struct symbol *sym, struct map *map,
 
        notes->start = map__rip_2objdump(map, sym->start);
 
-       list_for_each_entry(al, &notes->src->source, node) {
-               size_t line_len = strlen(al->line);
-
-               if (browser.b.width < line_len)
-                       browser.b.width = line_len;
-               al->idx = notes->nr_entries++;
-               if (al->offset != -1) {
-                       al->idx_asm = notes->nr_asm_entries++;
-                       /*
-                        * FIXME: short term bandaid to cope with assembly
-                        * routines that comes with labels in the same column
-                        * as the address in objdump, sigh.
-                        *
-                        * E.g. copy_user_generic_unrolled
-                        */
-                       if (al->offset < (s64)size)
-                               notes->offsets[al->offset] = al;
-               } else
-                       al->idx_asm = -1;
-       }
-
+       annotation__set_offsets(notes, size);
+       browser.b.width = notes->max_line_len;
        annotation__mark_jump_targets(notes, sym);
        annotation__compute_ipc(notes, size);
 
index 3302756..b976e39 100644 (file)
@@ -2056,6 +2056,34 @@ void annotation__mark_jump_targets(struct annotation *notes, struct symbol *sym)
        }
 }
 
+void annotation__set_offsets(struct annotation *notes, s64 size)
+{
+       struct annotation_line *al;
+
+       notes->max_line_len = 0;
+
+       list_for_each_entry(al, &notes->src->source, node) {
+               size_t line_len = strlen(al->line);
+
+               if (notes->max_line_len < line_len)
+                       notes->max_line_len = line_len;
+               al->idx = notes->nr_entries++;
+               if (al->offset != -1) {
+                       al->idx_asm = notes->nr_asm_entries++;
+                       /*
+                        * FIXME: short term bandaid to cope with assembly
+                        * routines that comes with labels in the same column
+                        * as the address in objdump, sigh.
+                        *
+                        * E.g. copy_user_generic_unrolled
+                        */
+                       if (al->offset < size)
+                               notes->offsets[al->offset] = al;
+               } else
+                       al->idx_asm = -1;
+       }
+}
+
 static void annotation__calc_lines(struct annotation *notes, struct map *map,
                                  struct rb_root *root, u64 start)
 {
index 0c34eb0..8a61ec9 100644 (file)
@@ -177,6 +177,7 @@ struct annotation {
        int                     max_jump_sources;
        int                     nr_entries;
        int                     nr_asm_entries;
+       u16                     max_line_len;
        bool                    have_cycles;
        struct annotated_source *src;
 };
@@ -191,6 +192,8 @@ static inline int annotation__pcnt_width(struct annotation *notes)
        return (notes->options->show_total_period ? 12 : 7) * notes->nr_events;
 }
 
+
+void annotation__set_offsets(struct annotation *notes, s64 size);
 void annotation__compute_ipc(struct annotation *notes, size_t size);
 void annotation__mark_jump_targets(struct annotation *notes, struct symbol *sym);