diff options
Diffstat (limited to 'tools/perf/util/annotate.c')
| -rw-r--r-- | tools/perf/util/annotate.c | 60 | 
1 files changed, 52 insertions, 8 deletions
| diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c index 536ee148bff8..71897689dacf 100644 --- a/tools/perf/util/annotate.c +++ b/tools/perf/util/annotate.c @@ -760,6 +760,15 @@ static int __symbol__account_cycles(struct annotation *notes,  	ch[offset].num_aggr++;  	ch[offset].cycles_aggr += cycles; +	if (cycles > ch[offset].cycles_max) +		ch[offset].cycles_max = cycles; + +	if (ch[offset].cycles_min) { +		if (cycles && cycles < ch[offset].cycles_min) +			ch[offset].cycles_min = cycles; +	} else +		ch[offset].cycles_min = cycles; +  	if (!have_start && ch[offset].have_start)  		return 0;  	if (ch[offset].num) { @@ -953,8 +962,11 @@ void annotation__compute_ipc(struct annotation *notes, size_t size)  			if (ch->have_start)  				annotation__count_and_fill(notes, ch->start, offset, ch);  			al = notes->offsets[offset]; -			if (al && ch->num_aggr) +			if (al && ch->num_aggr) {  				al->cycles = ch->cycles_aggr / ch->num_aggr; +				al->cycles_max = ch->cycles_max; +				al->cycles_min = ch->cycles_min; +			}  			notes->have_cycles = true;  		}  	} @@ -1263,6 +1275,9 @@ annotation_line__print(struct annotation_line *al, struct symbol *sym, u64 start  				max_percent = sample->percent;  		} +		if (al->samples_nr > nr_percent) +			nr_percent = al->samples_nr; +  		if (max_percent < min_pcnt)  			return -1; @@ -1950,6 +1965,7 @@ int symbol__annotate_printf(struct symbol *sym, struct map *map,  	u64 len;  	int width = symbol_conf.show_total_period ? 12 : 8;  	int graph_dotted_len; +	char buf[512];  	filename = strdup(dso->long_name);  	if (!filename) @@ -1962,8 +1978,11 @@ int symbol__annotate_printf(struct symbol *sym, struct map *map,  	len = symbol__size(sym); -	if (perf_evsel__is_group_event(evsel)) +	if (perf_evsel__is_group_event(evsel)) {  		width *= evsel->nr_members; +		perf_evsel__group_desc(evsel, buf, sizeof(buf)); +		evsel_name = buf; +	}  	graph_dotted_len = printf(" %-*.*s|	Source code & Disassembly of %s for %s (%" PRIu64 " samples)\n",  				  width, width, symbol_conf.show_total_period ? "Period" : @@ -2483,13 +2502,38 @@ static void __annotation_line__write(struct annotation_line *al, struct annotati  		else  			obj__printf(obj, "%*s ", ANNOTATION__IPC_WIDTH - 1, "IPC"); -		if (al->cycles) -			obj__printf(obj, "%*" PRIu64 " ", +		if (!notes->options->show_minmax_cycle) { +			if (al->cycles) +				obj__printf(obj, "%*" PRIu64 " ",  					   ANNOTATION__CYCLES_WIDTH - 1, al->cycles); -		else if (!show_title) -			obj__printf(obj, "%*s", ANNOTATION__CYCLES_WIDTH, " "); -		else -			obj__printf(obj, "%*s ", ANNOTATION__CYCLES_WIDTH - 1, "Cycle"); +			else if (!show_title) +				obj__printf(obj, "%*s", +					    ANNOTATION__CYCLES_WIDTH, " "); +			else +				obj__printf(obj, "%*s ", +					    ANNOTATION__CYCLES_WIDTH - 1, +					    "Cycle"); +		} else { +			if (al->cycles) { +				char str[32]; + +				scnprintf(str, sizeof(str), +					"%" PRIu64 "(%" PRIu64 "/%" PRIu64 ")", +					al->cycles, al->cycles_min, +					al->cycles_max); + +				obj__printf(obj, "%*s ", +					    ANNOTATION__MINMAX_CYCLES_WIDTH - 1, +					    str); +			} else if (!show_title) +				obj__printf(obj, "%*s", +					    ANNOTATION__MINMAX_CYCLES_WIDTH, +					    " "); +			else +				obj__printf(obj, "%*s ", +					    ANNOTATION__MINMAX_CYCLES_WIDTH - 1, +					    "Cycle(min/max)"); +		}  	}  	obj__printf(obj, " "); | 
