perf tools: Add 'perf config' command
authorTaeung Song <treeze.taeung@gmail.com>
Tue, 17 Nov 2015 13:53:21 +0000 (22:53 +0900)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 23 Nov 2015 21:31:24 +0000 (18:31 -0300)
The perf configuration file contains many variables to change various
aspects of each of its tools, including output, disk usage, etc.

But looking at the state of configuration is difficult and there's no
documentation about config variables except for the variables in
perfconfig.example exist.

So this patch adds a 'perf-config' command with a '--list' option.

    perf config [options]

    display current perf config variables.
    # perf config -l | --list

Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1447768424-17327-1-git-send-email-treeze.taeung@gmail.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/Build
tools/perf/builtin-config.c [new file with mode: 0644]
tools/perf/builtin.h
tools/perf/command-list.txt
tools/perf/perf.c

index 72237455b4003aeb72fccf3afdf40f2f5588f1d2..2c7aaf2ba11972d3f7459e5cfb1d774a5d12099d 100644 (file)
@@ -1,5 +1,6 @@
 perf-y += builtin-bench.o
 perf-y += builtin-annotate.o
+perf-y += builtin-config.o
 perf-y += builtin-diff.o
 perf-y += builtin-evlist.o
 perf-y += builtin-help.o
diff --git a/tools/perf/builtin-config.c b/tools/perf/builtin-config.c
new file mode 100644 (file)
index 0000000..427ea7a
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * builtin-config.c
+ *
+ * Copyright (C) 2015, Taeung Song <treeze.taeung@gmail.com>
+ *
+ */
+#include "builtin.h"
+
+#include "perf.h"
+
+#include "util/cache.h"
+#include "util/parse-options.h"
+#include "util/util.h"
+#include "util/debug.h"
+
+static const char * const config_usage[] = {
+       "perf config [options]",
+       NULL
+};
+
+enum actions {
+       ACTION_LIST = 1
+} actions;
+
+static struct option config_options[] = {
+       OPT_SET_UINT('l', "list", &actions,
+                    "show current config variables", ACTION_LIST),
+       OPT_END()
+};
+
+static int show_config(const char *key, const char *value,
+                      void *cb __maybe_unused)
+{
+       if (value)
+               printf("%s=%s\n", key, value);
+       else
+               printf("%s\n", key);
+
+       return 0;
+}
+
+int cmd_config(int argc, const char **argv, const char *prefix __maybe_unused)
+{
+       int ret = 0;
+
+       argc = parse_options(argc, argv, config_options, config_usage,
+                            PARSE_OPT_STOP_AT_NON_OPTION);
+
+       switch (actions) {
+       case ACTION_LIST:
+               if (argc) {
+                       pr_err("Error: takes no arguments\n");
+                       parse_options_usage(config_usage, config_options, "l", 1);
+               } else {
+                       ret = perf_config(show_config, NULL);
+                       if (ret < 0)
+                               pr_err("Nothing configured, "
+                                      "please check your ~/.perfconfig file\n");
+               }
+               break;
+       default:
+               usage_with_options(config_usage, config_options);
+       }
+
+       return ret;
+}
index 3688ad29085fa55739cceabad42e34f1413e879f..3f871b54e2619b45c449b2887f15a5be388b81c9 100644 (file)
@@ -17,6 +17,7 @@ extern int cmd_annotate(int argc, const char **argv, const char *prefix);
 extern int cmd_bench(int argc, const char **argv, const char *prefix);
 extern int cmd_buildid_cache(int argc, const char **argv, const char *prefix);
 extern int cmd_buildid_list(int argc, const char **argv, const char *prefix);
+extern int cmd_config(int argc, const char **argv, const char *prefix);
 extern int cmd_diff(int argc, const char **argv, const char *prefix);
 extern int cmd_evlist(int argc, const char **argv, const char *prefix);
 extern int cmd_help(int argc, const char **argv, const char *prefix);
index 00fcaf8a5b8d60535d00981ff67a47094ece0604..acc3ea7d90b71dac94f7ca505c4b74d8f808b589 100644 (file)
@@ -9,6 +9,7 @@ perf-buildid-cache              mainporcelain common
 perf-buildid-list              mainporcelain common
 perf-data                      mainporcelain common
 perf-diff                      mainporcelain common
+perf-config                    mainporcelain common
 perf-evlist                    mainporcelain common
 perf-inject                    mainporcelain common
 perf-kmem                      mainporcelain common
index 3d4c7c09adeae9afeeccf69161882b2fc65f9e41..4bee53c3f79647c099d17a83b72de621e3c20b41 100644 (file)
@@ -39,6 +39,7 @@ struct cmd_struct {
 static struct cmd_struct commands[] = {
        { "buildid-cache", cmd_buildid_cache, 0 },
        { "buildid-list", cmd_buildid_list, 0 },
+       { "config",     cmd_config,     0 },
        { "diff",       cmd_diff,       0 },
        { "evlist",     cmd_evlist,     0 },
        { "help",       cmd_help,       0 },