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
4 changed files with 67 additions and 0 deletions
|
@ -118,6 +118,15 @@ OPTIONS
|
||||||
--group::
|
--group::
|
||||||
Show event group information together
|
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
|
SEE ALSO
|
||||||
--------
|
--------
|
||||||
linkperf:perf-record[1], linkperf:perf-report[1]
|
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",
|
OPT_CALLBACK_DEFAULT(0, "stdio-color", NULL, "mode",
|
||||||
"'always' (default), 'never' or 'auto' only applicable to --stdio mode",
|
"'always' (default), 'never' or 'auto' only applicable to --stdio mode",
|
||||||
stdio__config_color, "always"),
|
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()
|
OPT_END()
|
||||||
};
|
};
|
||||||
int ret;
|
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_total_period = symbol_conf.show_total_period;
|
||||||
annotation__default_options.show_nr_samples = symbol_conf.show_nr_samples;
|
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);
|
void annotation_config__init(void);
|
||||||
|
|
||||||
|
int annotate_parse_percent_type(const struct option *opt, const char *_str,
|
||||||
|
int unset);
|
||||||
#endif /* __PERF_ANNOTATE_H */
|
#endif /* __PERF_ANNOTATE_H */
|
||||||
|
|
Loading…
Reference in a new issue