Commit db8fd07a authored by Namhyung Kim's avatar Namhyung Kim Committed by Arnaldo Carvalho de Melo

perf annotate: Pass evsel instead of evidx on annotation functions

Pass evsel instead of evidx.  This is a preparation for supporting event
group view in annotation and no functional change is intended.
Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Pekka Enberg <penberg@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1362462812-30885-2-git-send-email-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent acf28922
...@@ -109,14 +109,16 @@ static int process_sample_event(struct perf_tool *tool, ...@@ -109,14 +109,16 @@ static int process_sample_event(struct perf_tool *tool,
return 0; return 0;
} }
static int hist_entry__tty_annotate(struct hist_entry *he, int evidx, static int hist_entry__tty_annotate(struct hist_entry *he,
struct perf_evsel *evsel,
struct perf_annotate *ann) struct perf_annotate *ann)
{ {
return symbol__tty_annotate(he->ms.sym, he->ms.map, evidx, return symbol__tty_annotate(he->ms.sym, he->ms.map, evsel,
ann->print_line, ann->full_paths, 0, 0); ann->print_line, ann->full_paths, 0, 0);
} }
static void hists__find_annotations(struct hists *self, int evidx, static void hists__find_annotations(struct hists *self,
struct perf_evsel *evsel,
struct perf_annotate *ann) struct perf_annotate *ann)
{ {
struct rb_node *nd = rb_first(&self->entries), *next; struct rb_node *nd = rb_first(&self->entries), *next;
...@@ -142,14 +144,14 @@ static void hists__find_annotations(struct hists *self, int evidx, ...@@ -142,14 +144,14 @@ static void hists__find_annotations(struct hists *self, int evidx,
if (use_browser == 2) { if (use_browser == 2) {
int ret; int ret;
ret = hist_entry__gtk_annotate(he, evidx, NULL); ret = hist_entry__gtk_annotate(he, evsel, NULL);
if (!ret || !ann->skip_missing) if (!ret || !ann->skip_missing)
return; return;
/* skip missing symbols */ /* skip missing symbols */
nd = rb_next(nd); nd = rb_next(nd);
} else if (use_browser == 1) { } else if (use_browser == 1) {
key = hist_entry__tui_annotate(he, evidx, NULL); key = hist_entry__tui_annotate(he, evsel, NULL);
switch (key) { switch (key) {
case -1: case -1:
if (!ann->skip_missing) if (!ann->skip_missing)
...@@ -168,7 +170,7 @@ static void hists__find_annotations(struct hists *self, int evidx, ...@@ -168,7 +170,7 @@ static void hists__find_annotations(struct hists *self, int evidx,
if (next != NULL) if (next != NULL)
nd = next; nd = next;
} else { } else {
hist_entry__tty_annotate(he, evidx, ann); hist_entry__tty_annotate(he, evsel, ann);
nd = rb_next(nd); nd = rb_next(nd);
/* /*
* Since we have a hist_entry per IP for the same * Since we have a hist_entry per IP for the same
...@@ -230,7 +232,7 @@ static int __cmd_annotate(struct perf_annotate *ann) ...@@ -230,7 +232,7 @@ static int __cmd_annotate(struct perf_annotate *ann)
total_nr_samples += nr_samples; total_nr_samples += nr_samples;
hists__collapse_resort(hists); hists__collapse_resort(hists);
hists__output_resort(hists); hists__output_resort(hists);
hists__find_annotations(hists, pos->idx, ann); hists__find_annotations(hists, pos, ann);
} }
} }
......
...@@ -231,7 +231,7 @@ static void perf_top__show_details(struct perf_top *top) ...@@ -231,7 +231,7 @@ static void perf_top__show_details(struct perf_top *top)
printf("Showing %s for %s\n", perf_evsel__name(top->sym_evsel), symbol->name); printf("Showing %s for %s\n", perf_evsel__name(top->sym_evsel), symbol->name);
printf(" Events Pcnt (>=%d%%)\n", top->sym_pcnt_filter); printf(" Events Pcnt (>=%d%%)\n", top->sym_pcnt_filter);
more = symbol__annotate_printf(symbol, he->ms.map, top->sym_evsel->idx, more = symbol__annotate_printf(symbol, he->ms.map, top->sym_evsel,
0, top->sym_pcnt_filter, top->print_entries, 4); 0, top->sym_pcnt_filter, top->print_entries, 4);
if (top->zero) if (top->zero)
symbol__annotate_zero_histogram(symbol, top->sym_evsel->idx); symbol__annotate_zero_histogram(symbol, top->sym_evsel->idx);
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "../../util/hist.h" #include "../../util/hist.h"
#include "../../util/sort.h" #include "../../util/sort.h"
#include "../../util/symbol.h" #include "../../util/symbol.h"
#include "../../util/evsel.h"
#include <pthread.h> #include <pthread.h>
#include <newt.h> #include <newt.h>
...@@ -331,7 +332,7 @@ static void annotate_browser__set_rb_top(struct annotate_browser *browser, ...@@ -331,7 +332,7 @@ static void annotate_browser__set_rb_top(struct annotate_browser *browser,
} }
static void annotate_browser__calc_percent(struct annotate_browser *browser, static void annotate_browser__calc_percent(struct annotate_browser *browser,
int evidx) struct perf_evsel *evsel)
{ {
struct map_symbol *ms = browser->b.priv; struct map_symbol *ms = browser->b.priv;
struct symbol *sym = ms->sym; struct symbol *sym = ms->sym;
...@@ -344,7 +345,7 @@ static void annotate_browser__calc_percent(struct annotate_browser *browser, ...@@ -344,7 +345,7 @@ static void annotate_browser__calc_percent(struct annotate_browser *browser,
list_for_each_entry(pos, &notes->src->source, node) { list_for_each_entry(pos, &notes->src->source, node) {
struct browser_disasm_line *bpos = disasm_line__browser(pos); struct browser_disasm_line *bpos = disasm_line__browser(pos);
bpos->percent = disasm_line__calc_percent(pos, sym, evidx); bpos->percent = disasm_line__calc_percent(pos, sym, evsel->idx);
if (bpos->percent < 0.01) { if (bpos->percent < 0.01) {
RB_CLEAR_NODE(&bpos->rb_node); RB_CLEAR_NODE(&bpos->rb_node);
continue; continue;
...@@ -401,7 +402,8 @@ static void annotate_browser__init_asm_mode(struct annotate_browser *browser) ...@@ -401,7 +402,8 @@ static void annotate_browser__init_asm_mode(struct annotate_browser *browser)
browser->b.nr_entries = browser->nr_asm_entries; browser->b.nr_entries = browser->nr_asm_entries;
} }
static bool annotate_browser__callq(struct annotate_browser *browser, int evidx, static bool annotate_browser__callq(struct annotate_browser *browser,
struct perf_evsel *evsel,
struct hist_browser_timer *hbt) struct hist_browser_timer *hbt)
{ {
struct map_symbol *ms = browser->b.priv; struct map_symbol *ms = browser->b.priv;
...@@ -432,7 +434,7 @@ static bool annotate_browser__callq(struct annotate_browser *browser, int evidx, ...@@ -432,7 +434,7 @@ static bool annotate_browser__callq(struct annotate_browser *browser, int evidx,
} }
pthread_mutex_unlock(&notes->lock); pthread_mutex_unlock(&notes->lock);
symbol__tui_annotate(target, ms->map, evidx, hbt); symbol__tui_annotate(target, ms->map, evsel, hbt);
ui_browser__show_title(&browser->b, sym->name); ui_browser__show_title(&browser->b, sym->name);
return true; return true;
} }
...@@ -615,7 +617,8 @@ static void annotate_browser__update_addr_width(struct annotate_browser *browser ...@@ -615,7 +617,8 @@ static void annotate_browser__update_addr_width(struct annotate_browser *browser
browser->addr_width += browser->jumps_width + 1; browser->addr_width += browser->jumps_width + 1;
} }
static int annotate_browser__run(struct annotate_browser *browser, int evidx, static int annotate_browser__run(struct annotate_browser *browser,
struct perf_evsel *evsel,
struct hist_browser_timer *hbt) struct hist_browser_timer *hbt)
{ {
struct rb_node *nd = NULL; struct rb_node *nd = NULL;
...@@ -628,7 +631,7 @@ static int annotate_browser__run(struct annotate_browser *browser, int evidx, ...@@ -628,7 +631,7 @@ static int annotate_browser__run(struct annotate_browser *browser, int evidx,
if (ui_browser__show(&browser->b, sym->name, help) < 0) if (ui_browser__show(&browser->b, sym->name, help) < 0)
return -1; return -1;
annotate_browser__calc_percent(browser, evidx); annotate_browser__calc_percent(browser, evsel);
if (browser->curr_hot) { if (browser->curr_hot) {
annotate_browser__set_rb_top(browser, browser->curr_hot); annotate_browser__set_rb_top(browser, browser->curr_hot);
...@@ -641,7 +644,7 @@ static int annotate_browser__run(struct annotate_browser *browser, int evidx, ...@@ -641,7 +644,7 @@ static int annotate_browser__run(struct annotate_browser *browser, int evidx,
key = ui_browser__run(&browser->b, delay_secs); key = ui_browser__run(&browser->b, delay_secs);
if (delay_secs != 0) { if (delay_secs != 0) {
annotate_browser__calc_percent(browser, evidx); annotate_browser__calc_percent(browser, evsel);
/* /*
* Current line focus got out of the list of most active * Current line focus got out of the list of most active
* lines, NULL it so that if TAB|UNTAB is pressed, we * lines, NULL it so that if TAB|UNTAB is pressed, we
...@@ -657,7 +660,7 @@ static int annotate_browser__run(struct annotate_browser *browser, int evidx, ...@@ -657,7 +660,7 @@ static int annotate_browser__run(struct annotate_browser *browser, int evidx,
hbt->timer(hbt->arg); hbt->timer(hbt->arg);
if (delay_secs != 0) if (delay_secs != 0)
symbol__annotate_decay_histogram(sym, evidx); symbol__annotate_decay_histogram(sym, evsel->idx);
continue; continue;
case K_TAB: case K_TAB:
if (nd != NULL) { if (nd != NULL) {
...@@ -754,7 +757,7 @@ static int annotate_browser__run(struct annotate_browser *browser, int evidx, ...@@ -754,7 +757,7 @@ static int annotate_browser__run(struct annotate_browser *browser, int evidx,
goto show_sup_ins; goto show_sup_ins;
goto out; goto out;
} else if (!(annotate_browser__jump(browser) || } else if (!(annotate_browser__jump(browser) ||
annotate_browser__callq(browser, evidx, hbt))) { annotate_browser__callq(browser, evsel, hbt))) {
show_sup_ins: show_sup_ins:
ui_helpline__puts("Actions are only available for 'callq', 'retq' & jump instructions."); ui_helpline__puts("Actions are only available for 'callq', 'retq' & jump instructions.");
} }
...@@ -776,10 +779,10 @@ static int annotate_browser__run(struct annotate_browser *browser, int evidx, ...@@ -776,10 +779,10 @@ static int annotate_browser__run(struct annotate_browser *browser, int evidx,
return key; return key;
} }
int hist_entry__tui_annotate(struct hist_entry *he, int evidx, int hist_entry__tui_annotate(struct hist_entry *he, struct perf_evsel *evsel,
struct hist_browser_timer *hbt) struct hist_browser_timer *hbt)
{ {
return symbol__tui_annotate(he->ms.sym, he->ms.map, evidx, hbt); return symbol__tui_annotate(he->ms.sym, he->ms.map, evsel, hbt);
} }
static void annotate_browser__mark_jump_targets(struct annotate_browser *browser, static void annotate_browser__mark_jump_targets(struct annotate_browser *browser,
...@@ -826,7 +829,8 @@ static inline int width_jumps(int n) ...@@ -826,7 +829,8 @@ static inline int width_jumps(int n)
return 1; return 1;
} }
int symbol__tui_annotate(struct symbol *sym, struct map *map, int evidx, int symbol__tui_annotate(struct symbol *sym, struct map *map,
struct perf_evsel *evsel,
struct hist_browser_timer *hbt) struct hist_browser_timer *hbt)
{ {
struct disasm_line *pos, *n; struct disasm_line *pos, *n;
...@@ -909,7 +913,7 @@ int symbol__tui_annotate(struct symbol *sym, struct map *map, int evidx, ...@@ -909,7 +913,7 @@ int symbol__tui_annotate(struct symbol *sym, struct map *map, int evidx,
annotate_browser__update_addr_width(&browser); annotate_browser__update_addr_width(&browser);
ret = annotate_browser__run(&browser, evidx, hbt); ret = annotate_browser__run(&browser, evsel, hbt);
list_for_each_entry_safe(pos, n, &notes->src->source, node) { list_for_each_entry_safe(pos, n, &notes->src->source, node) {
list_del(&pos->node); list_del(&pos->node);
disasm_line__free(pos); disasm_line__free(pos);
......
...@@ -1599,7 +1599,7 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events, ...@@ -1599,7 +1599,7 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,
* Don't let this be freed, say, by hists__decay_entry. * Don't let this be freed, say, by hists__decay_entry.
*/ */
he->used = true; he->used = true;
err = hist_entry__tui_annotate(he, evsel->idx, hbt); err = hist_entry__tui_annotate(he, evsel, hbt);
he->used = false; he->used = false;
/* /*
* offer option to annotate the other branch source or target * offer option to annotate the other branch source or target
......
#include "gtk.h" #include "gtk.h"
#include "util/debug.h" #include "util/debug.h"
#include "util/annotate.h" #include "util/annotate.h"
#include "util/evsel.h"
#include "ui/helpline.h" #include "ui/helpline.h"
...@@ -85,7 +86,7 @@ static int perf_gtk__get_line(char *buf, size_t size, struct disasm_line *dl) ...@@ -85,7 +86,7 @@ static int perf_gtk__get_line(char *buf, size_t size, struct disasm_line *dl)
} }
static int perf_gtk__annotate_symbol(GtkWidget *window, struct symbol *sym, static int perf_gtk__annotate_symbol(GtkWidget *window, struct symbol *sym,
struct map *map, int evidx, struct map *map, struct perf_evsel *evsel,
struct hist_browser_timer *hbt __maybe_unused) struct hist_browser_timer *hbt __maybe_unused)
{ {
struct disasm_line *pos, *n; struct disasm_line *pos, *n;
...@@ -121,7 +122,7 @@ static int perf_gtk__annotate_symbol(GtkWidget *window, struct symbol *sym, ...@@ -121,7 +122,7 @@ static int perf_gtk__annotate_symbol(GtkWidget *window, struct symbol *sym,
gtk_list_store_append(store, &iter); gtk_list_store_append(store, &iter);
if (perf_gtk__get_percent(s, sizeof(s), sym, pos, evidx)) if (perf_gtk__get_percent(s, sizeof(s), sym, pos, evsel->idx))
gtk_list_store_set(store, &iter, ANN_COL__PERCENT, s, -1); gtk_list_store_set(store, &iter, ANN_COL__PERCENT, s, -1);
if (perf_gtk__get_offset(s, sizeof(s), sym, map, pos)) if (perf_gtk__get_offset(s, sizeof(s), sym, map, pos))
gtk_list_store_set(store, &iter, ANN_COL__OFFSET, s, -1); gtk_list_store_set(store, &iter, ANN_COL__OFFSET, s, -1);
...@@ -139,7 +140,8 @@ static int perf_gtk__annotate_symbol(GtkWidget *window, struct symbol *sym, ...@@ -139,7 +140,8 @@ static int perf_gtk__annotate_symbol(GtkWidget *window, struct symbol *sym,
return 0; return 0;
} }
int symbol__gtk_annotate(struct symbol *sym, struct map *map, int evidx, int symbol__gtk_annotate(struct symbol *sym, struct map *map,
struct perf_evsel *evsel,
struct hist_browser_timer *hbt) struct hist_browser_timer *hbt)
{ {
GtkWidget *window; GtkWidget *window;
...@@ -206,7 +208,7 @@ int symbol__gtk_annotate(struct symbol *sym, struct map *map, int evidx, ...@@ -206,7 +208,7 @@ int symbol__gtk_annotate(struct symbol *sym, struct map *map, int evidx,
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), scrolled_window, gtk_notebook_append_page(GTK_NOTEBOOK(notebook), scrolled_window,
tab_label); tab_label);
perf_gtk__annotate_symbol(scrolled_window, sym, map, evidx, hbt); perf_gtk__annotate_symbol(scrolled_window, sym, map, evsel, hbt);
return 0; return 0;
} }
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "symbol.h" #include "symbol.h"
#include "debug.h" #include "debug.h"
#include "annotate.h" #include "annotate.h"
#include "evsel.h"
#include <pthread.h> #include <pthread.h>
#include <linux/bitops.h> #include <linux/bitops.h>
...@@ -603,7 +604,7 @@ struct disasm_line *disasm__get_next_ip_line(struct list_head *head, struct disa ...@@ -603,7 +604,7 @@ struct disasm_line *disasm__get_next_ip_line(struct list_head *head, struct disa
} }
static int disasm_line__print(struct disasm_line *dl, struct symbol *sym, u64 start, static int disasm_line__print(struct disasm_line *dl, struct symbol *sym, u64 start,
int evidx, u64 len, int min_pcnt, int printed, struct perf_evsel *evsel, u64 len, int min_pcnt, int printed,
int max_lines, struct disasm_line *queue) int max_lines, struct disasm_line *queue)
{ {
static const char *prev_line; static const char *prev_line;
...@@ -616,7 +617,7 @@ static int disasm_line__print(struct disasm_line *dl, struct symbol *sym, u64 st ...@@ -616,7 +617,7 @@ static int disasm_line__print(struct disasm_line *dl, struct symbol *sym, u64 st
const char *color; const char *color;
struct annotation *notes = symbol__annotation(sym); struct annotation *notes = symbol__annotation(sym);
struct source_line *src_line = notes->src->lines; struct source_line *src_line = notes->src->lines;
struct sym_hist *h = annotation__histogram(notes, evidx); struct sym_hist *h = annotation__histogram(notes, evsel->idx);
s64 offset = dl->offset; s64 offset = dl->offset;
const u64 addr = start + offset; const u64 addr = start + offset;
struct disasm_line *next; struct disasm_line *next;
...@@ -648,7 +649,7 @@ static int disasm_line__print(struct disasm_line *dl, struct symbol *sym, u64 st ...@@ -648,7 +649,7 @@ static int disasm_line__print(struct disasm_line *dl, struct symbol *sym, u64 st
list_for_each_entry_from(queue, &notes->src->source, node) { list_for_each_entry_from(queue, &notes->src->source, node) {
if (queue == dl) if (queue == dl)
break; break;
disasm_line__print(queue, sym, start, evidx, len, disasm_line__print(queue, sym, start, evsel, len,
0, 0, 1, NULL); 0, 0, 1, NULL);
} }
} }
...@@ -935,7 +936,8 @@ static void symbol__free_source_line(struct symbol *sym, int len) ...@@ -935,7 +936,8 @@ static void symbol__free_source_line(struct symbol *sym, int len)
/* Get the filename:line for the colored entries */ /* Get the filename:line for the colored entries */
static int symbol__get_source_line(struct symbol *sym, struct map *map, static int symbol__get_source_line(struct symbol *sym, struct map *map,
int evidx, struct rb_root *root, int len, struct perf_evsel *evsel,
struct rb_root *root, int len,
const char *filename) const char *filename)
{ {
u64 start; u64 start;
...@@ -943,7 +945,7 @@ static int symbol__get_source_line(struct symbol *sym, struct map *map, ...@@ -943,7 +945,7 @@ static int symbol__get_source_line(struct symbol *sym, struct map *map,
char cmd[PATH_MAX * 2]; char cmd[PATH_MAX * 2];
struct source_line *src_line; struct source_line *src_line;
struct annotation *notes = symbol__annotation(sym); struct annotation *notes = symbol__annotation(sym);
struct sym_hist *h = annotation__histogram(notes, evidx); struct sym_hist *h = annotation__histogram(notes, evsel->idx);
struct rb_root tmp_root = RB_ROOT; struct rb_root tmp_root = RB_ROOT;
if (!h->sum) if (!h->sum)
...@@ -1018,10 +1020,10 @@ static void print_summary(struct rb_root *root, const char *filename) ...@@ -1018,10 +1020,10 @@ static void print_summary(struct rb_root *root, const char *filename)
} }
} }
static void symbol__annotate_hits(struct symbol *sym, int evidx) static void symbol__annotate_hits(struct symbol *sym, struct perf_evsel *evsel)
{ {
struct annotation *notes = symbol__annotation(sym); struct annotation *notes = symbol__annotation(sym);
struct sym_hist *h = annotation__histogram(notes, evidx); struct sym_hist *h = annotation__histogram(notes, evsel->idx);
u64 len = symbol__size(sym), offset; u64 len = symbol__size(sym), offset;
for (offset = 0; offset < len; ++offset) for (offset = 0; offset < len; ++offset)
...@@ -1031,9 +1033,9 @@ static void symbol__annotate_hits(struct symbol *sym, int evidx) ...@@ -1031,9 +1033,9 @@ static void symbol__annotate_hits(struct symbol *sym, int evidx)
printf("%*s: %" PRIu64 "\n", BITS_PER_LONG / 2, "h->sum", h->sum); printf("%*s: %" PRIu64 "\n", BITS_PER_LONG / 2, "h->sum", h->sum);
} }
int symbol__annotate_printf(struct symbol *sym, struct map *map, int evidx, int symbol__annotate_printf(struct symbol *sym, struct map *map,
bool full_paths, int min_pcnt, int max_lines, struct perf_evsel *evsel, bool full_paths,
int context) int min_pcnt, int max_lines, int context)
{ {
struct dso *dso = map->dso; struct dso *dso = map->dso;
char *filename; char *filename;
...@@ -1060,7 +1062,7 @@ int symbol__annotate_printf(struct symbol *sym, struct map *map, int evidx, ...@@ -1060,7 +1062,7 @@ int symbol__annotate_printf(struct symbol *sym, struct map *map, int evidx,
printf("------------------------------------------------\n"); printf("------------------------------------------------\n");
if (verbose) if (verbose)
symbol__annotate_hits(sym, evidx); symbol__annotate_hits(sym, evsel);
list_for_each_entry(pos, &notes->src->source, node) { list_for_each_entry(pos, &notes->src->source, node) {
if (context && queue == NULL) { if (context && queue == NULL) {
...@@ -1068,7 +1070,7 @@ int symbol__annotate_printf(struct symbol *sym, struct map *map, int evidx, ...@@ -1068,7 +1070,7 @@ int symbol__annotate_printf(struct symbol *sym, struct map *map, int evidx,
queue_len = 0; queue_len = 0;
} }
switch (disasm_line__print(pos, sym, start, evidx, len, switch (disasm_line__print(pos, sym, start, evsel, len,
min_pcnt, printed, max_lines, min_pcnt, printed, max_lines,
queue)) { queue)) {
case 0: case 0:
...@@ -1163,9 +1165,9 @@ size_t disasm__fprintf(struct list_head *head, FILE *fp) ...@@ -1163,9 +1165,9 @@ size_t disasm__fprintf(struct list_head *head, FILE *fp)
return printed; return printed;
} }
int symbol__tty_annotate(struct symbol *sym, struct map *map, int evidx, int symbol__tty_annotate(struct symbol *sym, struct map *map,
bool print_lines, bool full_paths, int min_pcnt, struct perf_evsel *evsel, bool print_lines,
int max_lines) bool full_paths, int min_pcnt, int max_lines)
{ {
struct dso *dso = map->dso; struct dso *dso = map->dso;
const char *filename = dso->long_name; const char *filename = dso->long_name;
...@@ -1178,12 +1180,12 @@ int symbol__tty_annotate(struct symbol *sym, struct map *map, int evidx, ...@@ -1178,12 +1180,12 @@ int symbol__tty_annotate(struct symbol *sym, struct map *map, int evidx,
len = symbol__size(sym); len = symbol__size(sym);
if (print_lines) { if (print_lines) {
symbol__get_source_line(sym, map, evidx, &source_line, symbol__get_source_line(sym, map, evsel, &source_line,
len, filename); len, filename);
print_summary(&source_line, filename); print_summary(&source_line, filename);
} }
symbol__annotate_printf(sym, map, evidx, full_paths, symbol__annotate_printf(sym, map, evsel, full_paths,
min_pcnt, max_lines, 0); min_pcnt, max_lines, 0);
if (print_lines) if (print_lines)
symbol__free_source_line(sym, len); symbol__free_source_line(sym, len);
......
...@@ -130,47 +130,49 @@ void symbol__annotate_zero_histograms(struct symbol *sym); ...@@ -130,47 +130,49 @@ void symbol__annotate_zero_histograms(struct symbol *sym);
int symbol__annotate(struct symbol *sym, struct map *map, size_t privsize); int symbol__annotate(struct symbol *sym, struct map *map, size_t privsize);
int symbol__annotate_init(struct map *map __maybe_unused, struct symbol *sym); int symbol__annotate_init(struct map *map __maybe_unused, struct symbol *sym);
int symbol__annotate_printf(struct symbol *sym, struct map *map, int evidx, int symbol__annotate_printf(struct symbol *sym, struct map *map,
bool full_paths, int min_pcnt, int max_lines, struct perf_evsel *evsel, bool full_paths,
int context); int min_pcnt, int max_lines, int context);
void symbol__annotate_zero_histogram(struct symbol *sym, int evidx); void symbol__annotate_zero_histogram(struct symbol *sym, int evidx);
void symbol__annotate_decay_histogram(struct symbol *sym, int evidx); void symbol__annotate_decay_histogram(struct symbol *sym, int evidx);
void disasm__purge(struct list_head *head); void disasm__purge(struct list_head *head);
int symbol__tty_annotate(struct symbol *sym, struct map *map, int evidx, int symbol__tty_annotate(struct symbol *sym, struct map *map,
bool print_lines, bool full_paths, int min_pcnt, struct perf_evsel *evsel, bool print_lines,
int max_lines); bool full_paths, int min_pcnt, int max_lines);
#ifdef NEWT_SUPPORT #ifdef NEWT_SUPPORT
int symbol__tui_annotate(struct symbol *sym, struct map *map, int evidx, int symbol__tui_annotate(struct symbol *sym, struct map *map,
struct perf_evsel *evsel,
struct hist_browser_timer *hbt); struct hist_browser_timer *hbt);
#else #else
static inline int symbol__tui_annotate(struct symbol *sym __maybe_unused, static inline int symbol__tui_annotate(struct symbol *sym __maybe_unused,
struct map *map __maybe_unused, struct map *map __maybe_unused,
int evidx __maybe_unused, struct perf_evsel *evsel __maybe_unused,
struct hist_browser_timer *hbt struct hist_browser_timer *hbt
__maybe_unused) __maybe_unused)
{ {
return 0; return 0;
} }
#endif #endif
#ifdef GTK2_SUPPORT #ifdef GTK2_SUPPORT
int symbol__gtk_annotate(struct symbol *sym, struct map *map, int evidx, int symbol__gtk_annotate(struct symbol *sym, struct map *map,
struct perf_evsel *evsel,
struct hist_browser_timer *hbt); struct hist_browser_timer *hbt);
static inline int hist_entry__gtk_annotate(struct hist_entry *he, int evidx, static inline int hist_entry__gtk_annotate(struct hist_entry *he,
struct perf_evsel *evsel,
struct hist_browser_timer *hbt) struct hist_browser_timer *hbt)
{ {
return symbol__gtk_annotate(he->ms.sym, he->ms.map, evidx, hbt); return symbol__gtk_annotate(he->ms.sym, he->ms.map, evsel, hbt);
} }
void perf_gtk__show_annotations(void); void perf_gtk__show_annotations(void);
#else #else
static inline int hist_entry__gtk_annotate(struct hist_entry *he __maybe_unused, static inline int hist_entry__gtk_annotate(struct hist_entry *he __maybe_unused,
int evidx __maybe_unused, struct perf_evsel *evsel __maybe_unused,
struct hist_browser_timer *hbt struct hist_browser_timer *hbt __maybe_unused)
__maybe_unused)
{ {
return 0; return 0;
} }
......
...@@ -177,7 +177,7 @@ struct hist_browser_timer { ...@@ -177,7 +177,7 @@ struct hist_browser_timer {
#ifdef NEWT_SUPPORT #ifdef NEWT_SUPPORT
#include "../ui/keysyms.h" #include "../ui/keysyms.h"
int hist_entry__tui_annotate(struct hist_entry *he, int evidx, int hist_entry__tui_annotate(struct hist_entry *he, struct perf_evsel *evsel,
struct hist_browser_timer *hbt); struct hist_browser_timer *hbt);
int perf_evlist__tui_browse_hists(struct perf_evlist *evlist, const char *help, int perf_evlist__tui_browse_hists(struct perf_evlist *evlist, const char *help,
...@@ -196,7 +196,8 @@ int perf_evlist__tui_browse_hists(struct perf_evlist *evlist __maybe_unused, ...@@ -196,7 +196,8 @@ int perf_evlist__tui_browse_hists(struct perf_evlist *evlist __maybe_unused,
static inline int hist_entry__tui_annotate(struct hist_entry *self static inline int hist_entry__tui_annotate(struct hist_entry *self
__maybe_unused, __maybe_unused,
int evidx __maybe_unused, struct perf_evsel *evsel
__maybe_unused,
struct hist_browser_timer *hbt struct hist_browser_timer *hbt
__maybe_unused) __maybe_unused)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment