perf annotate: Introduce symbol__annotate2 method
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: ecda45bd6cfe0badda0e8215c5a008eaf7647716 Gitweb: https://git.kernel.org/tip/ecda45bd6cfe0badda0e8215c5a008eaf7647716 Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Thu, 15 Mar 2018 16:54:11 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Tue, 20 Mar 2018 13:19:30 -0300
perf annotate: Introduce symbol__annotate2 method
That does all the extended boilerplate the TUI browser did, leaving the symbol__annotate() function to be used by the old --stdio output mode.
Now the upcoming --stdio2 output mode should just use this one to set things up.
Cc Adrian Hunter <[email protected]>
Cc Andi Kleen <[email protected]>
Cc David Ahern <[email protected]>
Cc Jin Yao <[email protected]>
Cc Jiri Olsa <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Wang Nan <[email protected]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/ui/browsers/annotate.c | 28 +--------------------------- tools/perf/util/annotate.c | 39 +++++++++++++++++++++++++++++++++++++++ tools/perf/util/annotate.h | 4 ++++ 3 files changed, 44 insertions(+), 27 deletions(-)
tools/perf/ui/browsers/annotate.c +1 -27
@@ -910,7 +910,6 @@ int symbol__tui_annotate(struct symbol *sym, struct map *map, struct hist_browser_timer *hbt) {struct annotation *notes =symbol__annotation (sym); -size_t size;struct map_symbol ms = { .map = map, .sym = sym,
@@ -926,28 +925,14 @@ int symbol__tui_annotate(struct symbol *sym, struct map *map, }, };int ret =-1 , err; -int nr_pcnt =1 ;if (sym ==NULL )return -1 ; - size =symbol__size (sym); -if (map->dso->annotate_warned)return -1 ; - notes->options = &annotate_browser__opts; - - notes->offsets =zalloc (size *sizeof (struct annotation_line *)); -if (notes->offsets ==NULL ) { -ui__error ("Not enough memory!" ); -return -1 ; - } - -if (perf_evsel__is_group_event (evsel)) - nr_pcnt = evsel->nr_members; - - err =symbol__annotate (sym, map, evsel,0 , &browser.arch); + err =symbol__annotate2 (sym, map, evsel, &annotate_browser__opts, &browser.arch);if (err) {char msg[BUFSIZ ];symbol__strerror_disassemble (sym, map, err, msg,sizeof (msg));
@@ -955,18 +940,9 @@ int symbol__tui_annotate(struct symbol *sym, struct map *map, goto out_free_offsets; } -symbol__calc_percent (sym, evsel); -ui_helpline__push ("Press ESC to exit" ); - notes->start =map__rip_2objdump (map, sym->start); - -annotation__set_offsets (notes, size); browser.b.width = notes->max_line_len; -annotation__mark_jump_targets (notes, sym); -annotation__compute_ipc (notes, size); -annotation__init_column_widths (notes, sym); - notes->nr_events = nr_pcnt; browser.b.nr_entries = notes->nr_entries; browser.b.entries = ¬es->src->source, browser.b.width +=18 ;/* Percentage */
@@ -974,8 +950,6 @@ int symbol__tui_annotate(struct symbol *sym, struct map *map,if (notes->options->hide_src_code)ui_browser__init_asm_mode (&browser.b); -annotation__update_column_widths (notes); - ret =annotate_browser__run (&browser, evsel, hbt);annotated_source__purge (notes->src);
tools/perf/util/annotate.c +39 -0
@@ -2183,3 +2183,42 @@ bool ui__has_annotation(void) {return use_browser ==1 && perf_hpp_list.sym; } + +int symbol__annotate2 (struct symbol *sym,struct map *map,struct perf_evsel *evsel, +struct annotation_options *options,struct arch **parch) +{ +struct annotation *notes =symbol__annotation (sym); +size_t size =symbol__size (sym); +int nr_pcnt =1 , err; + + notes->offsets =zalloc (size *sizeof (struct annotation_line *)); +if (notes->offsets ==NULL ) +return -1 ; + +if (perf_evsel__is_group_event (evsel)) + nr_pcnt = evsel->nr_members; + + err =symbol__annotate (sym, map, evsel,0 , parch); +if (err) + goto out_free_offsets; + + notes->options = options; + +symbol__calc_percent (sym, evsel); + + notes->start =map__rip_2objdump (map, sym->start); + +annotation__set_offsets (notes, size); +annotation__mark_jump_targets (notes, sym); +annotation__compute_ipc (notes, size); +annotation__init_column_widths (notes, sym); + notes->nr_events = nr_pcnt; + +annotation__update_column_widths (notes); + +return 0 ; + +out_free_offsets: +zfree (¬es->offsets); +return -1 ; +}
tools/perf/util/annotate.h +4 -0
@@ -233,6 +233,10 @@ void symbol__annotate_zero_histograms(struct symbol *sym);int symbol__annotate (struct symbol *sym,struct map *map,struct perf_evsel *evsel,size_t privsize,struct arch **parch); +int symbol__annotate2 (struct symbol *sym,struct map *map, +struct perf_evsel *evsel, +struct annotation_options *options, +struct arch **parch);enum symbol_disassemble_errno {SYMBOL_ANNOTATE_ERRNO__SUCCESS =0 ,