|
@@ -2156,10 +2156,11 @@ static void FILE__write_graph(void *fp, int graph)
|
|
|
fputs(s, fp);
|
|
|
}
|
|
|
|
|
|
-static int symbol__annotate_fprintf2(struct symbol *sym, FILE *fp)
|
|
|
+static int symbol__annotate_fprintf2(struct symbol *sym, FILE *fp,
|
|
|
+ struct annotation_options *opts)
|
|
|
{
|
|
|
struct annotation *notes = symbol__annotation(sym);
|
|
|
- struct annotation_write_ops ops = {
|
|
|
+ struct annotation_write_ops wops = {
|
|
|
.first_line = true,
|
|
|
.obj = fp,
|
|
|
.set_color = FILE__set_color,
|
|
@@ -2173,15 +2174,16 @@ static int symbol__annotate_fprintf2(struct symbol *sym, FILE *fp)
|
|
|
list_for_each_entry(al, ¬es->src->source, node) {
|
|
|
if (annotation_line__filter(al, notes))
|
|
|
continue;
|
|
|
- annotation_line__write(al, notes, &ops);
|
|
|
+ annotation_line__write(al, notes, &wops, opts);
|
|
|
fputc('\n', fp);
|
|
|
- ops.first_line = false;
|
|
|
+ wops.first_line = false;
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-int map_symbol__annotation_dump(struct map_symbol *ms, struct perf_evsel *evsel)
|
|
|
+int map_symbol__annotation_dump(struct map_symbol *ms, struct perf_evsel *evsel,
|
|
|
+ struct annotation_options *opts)
|
|
|
{
|
|
|
const char *ev_name = perf_evsel__name(evsel);
|
|
|
char buf[1024];
|
|
@@ -2203,7 +2205,7 @@ int map_symbol__annotation_dump(struct map_symbol *ms, struct perf_evsel *evsel)
|
|
|
|
|
|
fprintf(fp, "%s() %s\nEvent: %s\n\n",
|
|
|
ms->sym->name, ms->map->dso->long_name, ev_name);
|
|
|
- symbol__annotate_fprintf2(ms->sym, fp);
|
|
|
+ symbol__annotate_fprintf2(ms->sym, fp, opts);
|
|
|
|
|
|
fclose(fp);
|
|
|
err = 0;
|
|
@@ -2433,7 +2435,7 @@ int symbol__tty_annotate2(struct symbol *sym, struct map *map,
|
|
|
|
|
|
hists__scnprintf_title(hists, buf, sizeof(buf));
|
|
|
fprintf(stdout, "%s\n%s() %s\n", buf, sym->name, dso->long_name);
|
|
|
- symbol__annotate_fprintf2(sym, stdout);
|
|
|
+ symbol__annotate_fprintf2(sym, stdout, opts);
|
|
|
|
|
|
annotated_source__purge(symbol__annotation(sym)->src);
|
|
|
|
|
@@ -2472,7 +2474,8 @@ bool ui__has_annotation(void)
|
|
|
|
|
|
|
|
|
static double annotation_line__max_percent(struct annotation_line *al,
|
|
|
- struct annotation *notes)
|
|
|
+ struct annotation *notes,
|
|
|
+ unsigned int percent_type)
|
|
|
{
|
|
|
double percent_max = 0.0;
|
|
|
int i;
|
|
@@ -2481,7 +2484,7 @@ static double annotation_line__max_percent(struct annotation_line *al,
|
|
|
double percent;
|
|
|
|
|
|
percent = annotation_data__percent(&al->data[i],
|
|
|
- PERCENT_HITS_LOCAL);
|
|
|
+ percent_type);
|
|
|
|
|
|
if (percent > percent_max)
|
|
|
percent_max = percent;
|
|
@@ -2523,7 +2526,7 @@ call_like:
|
|
|
|
|
|
static void __annotation_line__write(struct annotation_line *al, struct annotation *notes,
|
|
|
bool first_line, bool current_entry, bool change_color, int width,
|
|
|
- void *obj,
|
|
|
+ void *obj, unsigned int percent_type,
|
|
|
int (*obj__set_color)(void *obj, int color),
|
|
|
void (*obj__set_percent_color)(void *obj, double percent, bool current),
|
|
|
int (*obj__set_jumps_percent_color)(void *obj, int nr, bool current),
|
|
@@ -2531,7 +2534,7 @@ static void __annotation_line__write(struct annotation_line *al, struct annotati
|
|
|
void (*obj__write_graph)(void *obj, int graph))
|
|
|
|
|
|
{
|
|
|
- double percent_max = annotation_line__max_percent(al, notes);
|
|
|
+ double percent_max = annotation_line__max_percent(al, notes, percent_type);
|
|
|
int pcnt_width = annotation__pcnt_width(notes),
|
|
|
cycles_width = annotation__cycles_width(notes);
|
|
|
bool show_title = false;
|
|
@@ -2552,8 +2555,7 @@ static void __annotation_line__write(struct annotation_line *al, struct annotati
|
|
|
for (i = 0; i < notes->nr_events; i++) {
|
|
|
double percent;
|
|
|
|
|
|
- percent = annotation_data__percent(&al->data[i],
|
|
|
- PERCENT_HITS_LOCAL);
|
|
|
+ percent = annotation_data__percent(&al->data[i], percent_type);
|
|
|
|
|
|
obj__set_percent_color(obj, percent, current_entry);
|
|
|
if (notes->options->show_total_period) {
|
|
@@ -2680,13 +2682,15 @@ print_addr:
|
|
|
}
|
|
|
|
|
|
void annotation_line__write(struct annotation_line *al, struct annotation *notes,
|
|
|
- struct annotation_write_ops *ops)
|
|
|
+ struct annotation_write_ops *wops,
|
|
|
+ struct annotation_options *opts)
|
|
|
{
|
|
|
- __annotation_line__write(al, notes, ops->first_line, ops->current_entry,
|
|
|
- ops->change_color, ops->width, ops->obj,
|
|
|
- ops->set_color, ops->set_percent_color,
|
|
|
- ops->set_jumps_percent_color, ops->printf,
|
|
|
- ops->write_graph);
|
|
|
+ __annotation_line__write(al, notes, wops->first_line, wops->current_entry,
|
|
|
+ wops->change_color, wops->width, wops->obj,
|
|
|
+ opts->percent_type,
|
|
|
+ wops->set_color, wops->set_percent_color,
|
|
|
+ wops->set_jumps_percent_color, wops->printf,
|
|
|
+ wops->write_graph);
|
|
|
}
|
|
|
|
|
|
int symbol__annotate2(struct symbol *sym, struct map *map, struct perf_evsel *evsel,
|