perf annotate: Add --percent-type option
Add --percent-type option to set annotation percent type from following choices: global-period, local-period, global-hits, local-hits Examples: $ perf annotate --percent-type period-local --stdio | head -1 Percent | Source code ... es, percent: local period) $ perf annotate --percent-type hits-local --stdio | head -1 Percent | Source code ... es, percent: local hits) $ perf annotate --percent-type hits-global --stdio | head -1 Percent | Source code ... es, percent: global hits) $ perf annotate --percent-type period-global --stdio | head -1 Percent | Source code ... es, percent: global period) The local/global keywords set if the percentage is computed in the scope of the function (local) or the whole data (global). The period/hits keywords set the base the percentage is computed on - the samples period or the number of samples (hits). Signed-off-by: Jiri Olsa <jolsa@kernel.org> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/r/20180804130521.11408-20-jolsa@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
4c04868fbe
commit
88c2119077
|
@ -118,6 +118,15 @@ OPTIONS
|
|||
--group::
|
||||
Show event group information together
|
||||
|
||||
--percent-type::
|
||||
Set annotation percent type from following choices:
|
||||
global-period, local-period, global-hits, local-hits
|
||||
|
||||
The local/global keywords set if the percentage is computed
|
||||
in the scope of the function (local) or the whole data (global).
|
||||
The period/hits keywords set the base the percentage is computed
|
||||
on - the samples period or the number of samples (hits).
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
linkperf:perf-record[1], linkperf:perf-report[1]
|
||||
|
|
|
@ -542,6 +542,10 @@ int cmd_annotate(int argc, const char **argv)
|
|||
OPT_CALLBACK_DEFAULT(0, "stdio-color", NULL, "mode",
|
||||
"'always' (default), 'never' or 'auto' only applicable to --stdio mode",
|
||||
stdio__config_color, "always"),
|
||||
OPT_CALLBACK(0, "percent-type", &annotate.opts, "local-period",
|
||||
"Set percent type local/global-period/hits",
|
||||
annotate_parse_percent_type),
|
||||
|
||||
OPT_END()
|
||||
};
|
||||
int ret;
|
||||
|
|
|
@ -2799,3 +2799,55 @@ void annotation_config__init(void)
|
|||
annotation__default_options.show_total_period = symbol_conf.show_total_period;
|
||||
annotation__default_options.show_nr_samples = symbol_conf.show_nr_samples;
|
||||
}
|
||||
|
||||
static unsigned int parse_percent_type(char *str1, char *str2)
|
||||
{
|
||||
unsigned int type = (unsigned int) -1;
|
||||
|
||||
if (!strcmp("period", str1)) {
|
||||
if (!strcmp("local", str2))
|
||||
type = PERCENT_PERIOD_LOCAL;
|
||||
else if (!strcmp("global", str2))
|
||||
type = PERCENT_PERIOD_GLOBAL;
|
||||
}
|
||||
|
||||
if (!strcmp("hits", str1)) {
|
||||
if (!strcmp("local", str2))
|
||||
type = PERCENT_HITS_LOCAL;
|
||||
else if (!strcmp("global", str2))
|
||||
type = PERCENT_HITS_GLOBAL;
|
||||
}
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
int annotate_parse_percent_type(const struct option *opt, const char *_str,
|
||||
int unset __maybe_unused)
|
||||
{
|
||||
struct annotation_options *opts = opt->value;
|
||||
unsigned int type;
|
||||
char *str1, *str2;
|
||||
int err = -1;
|
||||
|
||||
str1 = strdup(_str);
|
||||
if (!str1)
|
||||
return -ENOMEM;
|
||||
|
||||
str2 = strchr(str1, '-');
|
||||
if (!str2)
|
||||
goto out;
|
||||
|
||||
*str2++ = 0;
|
||||
|
||||
type = parse_percent_type(str1, str2);
|
||||
if (type == (unsigned int) -1)
|
||||
type = parse_percent_type(str2, str1);
|
||||
if (type != (unsigned int) -1) {
|
||||
opts->percent_type = type;
|
||||
err = 0;
|
||||
}
|
||||
|
||||
out:
|
||||
free(str1);
|
||||
return err;
|
||||
}
|
||||
|
|
|
@ -397,4 +397,6 @@ static inline int symbol__tui_annotate(struct symbol *sym __maybe_unused,
|
|||
|
||||
void annotation_config__init(void);
|
||||
|
||||
int annotate_parse_percent_type(const struct option *opt, const char *_str,
|
||||
int unset);
|
||||
#endif /* __PERF_ANNOTATE_H */
|
||||
|
|
Loading…
Reference in New Issue