perf annotate: Introduce annotation__scnprintf_samples_period() method
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: b213eac245aa2d29a3b9dd90f3b96ab182337ee8 Gitweb: https://git.kernel.org/tip/b213eac245aa2d29a3b9dd90f3b96ab182337ee8 Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Tue, 3 Apr 2018 15:19:47 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Tue, 3 Apr 2018 15:22:55 -0300
perf annotate: Introduce annotation__scnprintf_samples_period() method
To print a string using the total period (nr_events) and the number of samples for a given annotation, i.e. for a given symbol, the counterpart to hists__scnprintf_samples_period(), that is for all the samples in a session (be it a live session, think 'perf top' or a perf.data file, think 'perf report').
Cc: Adrian Hunter <[email protected]>
Cc: David Ahern <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Martin Liška <[email protected]>
Cc: Namhyung Kim <[email protected]>
Cc: Wang Nan <[email protected]>
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=196935
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/util/annotate.c | 38 ++++++++++++++++++++++++++++++++++++++ tools/perf/util/annotate.h | 12 ++++++++++++ 2 files changed, 50 insertions(+)
tools/perf/util/annotate.c +38 -0
@@ -17,6 +17,7 @@#include "config.h" #include "cache.h" #include "symbol.h" +#include "units.h" #include "debug.h" #include "annotate.h" #include "evsel.h"
@@ -2597,6 +2598,43 @@ out_free_offsets:return -1 ; } +int __annotation__scnprintf_samples_period (struct annotation *notes, +char *bf,size_t size, +struct perf_evsel *evsel, +bool show_freq) +{ +const char *ev_name =perf_evsel__name (evsel); +char ref[30 ] =" show reference callgraph, " ; +char sample_freq_str[64 ] ="" ; +unsigned long nr_samples =0 ; +int nr_members =1 ; +bool enable_ref = false; +u64 nr_events =0 ; +char unit; +int i; + +if (perf_evsel__is_group_event (evsel)) + nr_members = evsel->nr_members; + +for (i =0 ; i < nr_members; i++) { +struct sym_hist *ah =annotation__histogram (notes, evsel->idx + i); + + nr_samples += ah->nr_samples; + nr_events += ah->period; + } + +if (symbol_conf.show_ref_callgraph &&strstr (ev_name,"call-graph=no" )) + enable_ref = true; + +if (show_freq) +scnprintf (sample_freq_str,sizeof (sample_freq_str)," %d Hz," , evsel->attr.sample_freq); + + nr_samples =convert_unit (nr_samples, &unit); +return scnprintf (bf, size,"Samples: %lu%c of event%s '%s',%s%sEvent count (approx.): %" PRIu64, + nr_samples, unit, evsel->nr_members >1 ?"s" :"" , + ev_name, sample_freq_str, enable_ref ? ref :" " , nr_events); +} +#define ANNOTATION__CFG (n) \ { .name = #n, .value = &annotation__default_options.n, }
tools/perf/util/annotate.h +12 -0
@@ -151,6 +151,18 @@ double annotation_line__max_percent(struct annotation_line *al, struct annotatiovoid annotation_line__write (struct annotation_line *al,struct annotation *notes,struct annotation_write_ops *ops); +int __annotation__scnprintf_samples_period (struct annotation *notes, +char *bf,size_t size, +struct perf_evsel *evsel, +bool show_freq); + +static inline int annotation__scnprintf_samples_period (struct annotation *notes, +char *bf,size_t size, +struct perf_evsel *evsel) +{ +return __annotation__scnprintf_samples_period (notes, bf, size, evsel, true); +} +int disasm_line__scnprintf (struct disasm_line *dl,char *bf,size_t size,bool raw);size_t disasm__fprintf (struct list_head *head,FILE *fp);void symbol__calc_percent (struct symbol *sym,struct perf_evsel *evsel);