mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-23 18:07:03 +00:00
perf config: Add support for getting config key-value pairs
Add a functionality getting specific config key-value pairs. For the syntax examples, perf config [<file-option>] [section.name ...] e.g. To query config items 'report.queue-size' and 'report.children', do # perf config report.queue-size report.children Signed-off-by: Taeung Song <treeze.taeung@gmail.com> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Nambong Ha <over3025@gmail.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Wang Nan <wangnan0@huawei.com> Cc: Wookje Kwon <aweee0@gmail.com> Link: http://lkml.kernel.org/r/1478241862-31230-2-git-send-email-treeze.taeung@gmail.com [ Combined patch with docs update with this one ] Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
8c9c3d2f95
commit
909236083e
@ -8,6 +8,8 @@ perf-config - Get and set variables in a configuration file.
|
||||
SYNOPSIS
|
||||
--------
|
||||
[verse]
|
||||
'perf config' [<file-option>] [section.name ...]
|
||||
or
|
||||
'perf config' [<file-option>] -l | --list
|
||||
|
||||
DESCRIPTION
|
||||
@ -118,6 +120,22 @@ Given a $HOME/.perfconfig like this:
|
||||
children = true
|
||||
group = true
|
||||
|
||||
To query the record mode of call graph, do
|
||||
|
||||
% perf config call-graph.record-mode
|
||||
|
||||
If you want to know multiple config key/value pairs, you can do like
|
||||
|
||||
% perf config report.queue-size call-graph.order report.children
|
||||
|
||||
To query the config value of sort order of call graph in user config file (i.e. `~/.perfconfig`), do
|
||||
|
||||
% perf config --user call-graph.sort-order
|
||||
|
||||
To query the config value of buildid directory in system config file (i.e. `$(sysconf)/perfconfig`), do
|
||||
|
||||
% perf config --system buildid.dir
|
||||
|
||||
Variables
|
||||
~~~~~~~~~
|
||||
|
||||
|
@ -17,7 +17,7 @@
|
||||
static bool use_system_config, use_user_config;
|
||||
|
||||
static const char * const config_usage[] = {
|
||||
"perf config [<file-option>] [options]",
|
||||
"perf config [<file-option>] [options] [section.name ...]",
|
||||
NULL
|
||||
};
|
||||
|
||||
@ -33,6 +33,36 @@ static struct option config_options[] = {
|
||||
OPT_END()
|
||||
};
|
||||
|
||||
static int show_spec_config(struct perf_config_set *set, const char *var)
|
||||
{
|
||||
struct perf_config_section *section;
|
||||
struct perf_config_item *item;
|
||||
|
||||
if (set == NULL)
|
||||
return -1;
|
||||
|
||||
perf_config_items__for_each_entry(&set->sections, section) {
|
||||
if (prefixcmp(var, section->name) != 0)
|
||||
continue;
|
||||
|
||||
perf_config_items__for_each_entry(§ion->items, item) {
|
||||
const char *name = var + strlen(section->name) + 1;
|
||||
|
||||
if (strcmp(name, item->name) == 0) {
|
||||
char *value = item->value;
|
||||
|
||||
if (value) {
|
||||
printf("%s=%s\n", var, value);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int show_config(struct perf_config_set *set)
|
||||
{
|
||||
struct perf_config_section *section;
|
||||
@ -54,7 +84,7 @@ static int show_config(struct perf_config_set *set)
|
||||
|
||||
int cmd_config(int argc, const char **argv, const char *prefix __maybe_unused)
|
||||
{
|
||||
int ret = 0;
|
||||
int i, ret = 0;
|
||||
struct perf_config_set *set;
|
||||
char *user_config = mkpath("%s/.perfconfig", getenv("HOME"));
|
||||
|
||||
@ -100,7 +130,11 @@ int cmd_config(int argc, const char **argv, const char *prefix __maybe_unused)
|
||||
}
|
||||
break;
|
||||
default:
|
||||
usage_with_options(config_usage, config_options);
|
||||
if (argc)
|
||||
for (i = 0; argv[i]; i++)
|
||||
ret = show_spec_config(set, argv[i]);
|
||||
else
|
||||
usage_with_options(config_usage, config_options);
|
||||
}
|
||||
|
||||
perf_config_set__delete(set);
|
||||
|
Loading…
Reference in New Issue
Block a user