Cc: Namhyung Kim <namhy...@kernel.org>
Cc: Masami Hiramatsu <mhira...@kernel.org>
Cc: Jiri Olsa <jo...@kernel.org>
Signed-off-by: Taeung Song <treeze.tae...@gmail.com>
---
tools/perf/util/config.c | 150
++++++++++++++++++++++++++++++++++++++++++++++-
tools/perf/util/config.h | 46 ++++++++++++++-
2 files changed, 194 insertions(+), 2 deletions(-)
diff --git a/tools/perf/util/config.c b/tools/perf/util/config.c
index dad7d82..3a72ed7 100644
--- a/tools/perf/util/config.c
+++ b/tools/perf/util/config.c
@@ -29,6 +29,154 @@ static int config_file_eof;
const char *config_exclusive_filename;
+const struct perf_config_section default_sections[] = {
+ { .name = "colors" },
+ { .name = "tui" },
+ { .name = "buildid" },
+ { .name = "annotate" },
+ { .name = "gtk" },
+ { .name = "pager" },
+ { .name = "help" },
+ { .name = "hist" },
+ { .name = "ui" },
+ { .name = "call-graph" },
+ { .name = "report" },
+ { .name = "top" },
+ { .name = "man" },
+ { .name = "kmem" },
+ { .name = "intel-pt" },
+ { .name = "convert" },
+};
+
+const struct default_config_item colors_config_items[] = {
+ CONF_STR_VAR("top", "red, default"),
+ CONF_STR_VAR("medium", "green, default"),
+ CONF_STR_VAR("normal", "default, default"),
+ CONF_STR_VAR("selected", "black, yellow"),
+ CONF_STR_VAR("jump_arrows", "blue, default"),
+ CONF_STR_VAR("addr", "magenta, default"),
+ CONF_STR_VAR("root", "white, blue"),
+ CONF_END()
+};
+
+const struct default_config_item tui_config_items[] = {
+ CONF_BOOL_VAR("report", true),
+ CONF_BOOL_VAR("annotate", true),
+ CONF_BOOL_VAR("top", true),
+ CONF_END()
+};
+
+const struct default_config_item buildid_config_items[] = {
+ CONF_STR_VAR("dir", "~/.debug"),
+ CONF_END()
+};
+
+const struct default_config_item annotate_config_items[] = {
+ CONF_BOOL_VAR("hide_src_code", false),
+ CONF_BOOL_VAR("use_offset", true),
+ CONF_BOOL_VAR("jump_arrows", true),
+ CONF_BOOL_VAR("show_nr_jumps", false),
+ CONF_BOOL_VAR("show_linenr", false),
+ CONF_BOOL_VAR("show_total_period", false),
+ CONF_END()
+};
+
+const struct default_config_item gtk_config_items[] = {
+ CONF_BOOL_VAR("annotate", false),
+ CONF_BOOL_VAR("report", false),
+ CONF_BOOL_VAR("top", false),
+ CONF_END()
+};
+
+const struct default_config_item pager_config_items[] = {
+ CONF_BOOL_VAR("cmd", true),
+ CONF_BOOL_VAR("report", true),
+ CONF_BOOL_VAR("annotate", true),
+ CONF_BOOL_VAR("top", true),
+ CONF_BOOL_VAR("diff", true),
+ CONF_END()
+};
+
+const struct default_config_item help_config_items[] = {
+ CONF_STR_VAR("format", "man"),
+ CONF_INT_VAR("autocorrect", 0),
+ CONF_END()
+};
+
+const struct default_config_item hist_config_items[] = {
+ CONF_STR_VAR("percentage", "absolute"),
+ CONF_END()
+};
+
+const struct default_config_item ui_config_items[] = {
+ CONF_BOOL_VAR("show-headers", true),
+ CONF_END()
+};
+
+const struct default_config_item call_graph_config_items[] = {
+ CONF_STR_VAR("record-mode", "fp"),
+ CONF_LONG_VAR("dump-size", 8192),
+ CONF_STR_VAR("print-type", "graph"),
+ CONF_STR_VAR("order", "callee"),
+ CONF_STR_VAR("sort-key", "function"),
+ CONF_DOUBLE_VAR("threshold", 0.5),
+ CONF_LONG_VAR("print-limit", 0),
+ CONF_END()
+};
+
+const struct default_config_item report_config_items[] = {
+ CONF_BOOL_VAR("group", true),
+ CONF_BOOL_VAR("children", true),
+ CONF_FLOAT_VAR("percent-limit", 0),
+ CONF_U64_VAR("queue-size", 0),
+ CONF_END()
+};
+
+const struct default_config_item top_config_items[] = {
+ CONF_BOOL_VAR("children", true),
+ CONF_END()
+};
+
+const struct default_config_item man_config_items[] = {
+ CONF_STR_VAR("viewer", "man"),
+ CONF_END()
+};
+
+const struct default_config_item kmem_config_items[] = {
+ CONF_STR_VAR("default", "slab"),
+ CONF_END()
+};
+
+const struct default_config_item intel_pt_config_items[] = {
+ CONF_INT_VAR("cache-divisor", 64),
+ CONF_BOOL_VAR("mispred-all", false),
+ CONF_END()
+};
+
+const struct default_config_item convert_config_items[] = {
+ CONF_U64_VAR("queue-size", 0),
+ CONF_END()
+};
+
+const struct default_config_item *default_config_items[] = {
+ colors_config_items,
+ tui_config_items,
+ buildid_config_items,
+ annotate_config_items,
+ gtk_config_items,
+ pager_config_items,
+ help_config_items,
+ hist_config_items,
+ ui_config_items,
+ call_graph_config_items,
+ report_config_items,
+ top_config_items,
+ man_config_items,
+ kmem_config_items,
+ intel_pt_config_items,
+ convert_config_items,
+};
+
static int get_next_char(void)
{
int c;
@@ -677,7 +825,7 @@ static void perf_config_section__purge(struct
perf_config_section *section)
static void perf_config_section__delete(struct perf_config_section *section)
{
perf_config_section__purge(section);
- zfree(§ion->name);
+ zfree((char **)§ion->name);
free(section);
}
diff --git a/tools/perf/util/config.h b/tools/perf/util/config.h
index 22ec626..84414af 100644
--- a/tools/perf/util/config.h
+++ b/tools/perf/util/config.h
@@ -4,6 +4,30 @@
#include <stdbool.h>
#include <linux/list.h>
+enum perf_config_type {
+ CONFIG_TYPE_BOOL,
+ CONFIG_TYPE_INT,
+ CONFIG_TYPE_LONG,
+ CONFIG_TYPE_U64,
+ CONFIG_TYPE_FLOAT,
+ CONFIG_TYPE_DOUBLE,
+ CONFIG_TYPE_STRING
+};
+
+struct default_config_item {
+ const char *name;
+ union {
+ bool b;
+ int i;
+ u32 l;
+ u64 ll;
+ float f;
+ double d;
+ const char *s;
+ } value;
+ enum perf_config_type type;
+};
+
struct perf_config_item {
char *name;
char *value;
@@ -11,7 +35,7 @@ struct perf_config_item {
};
struct perf_config_section {
- char *name;
+ const char *name;
struct list_head items;
struct list_head node;
};
@@ -20,6 +44,26 @@ struct perf_config_set {
struct list_head sections;
};
+#define CONF_VAR(_name, _field, _val, _type) \
+ { .name = _name, .value._field = _val, .type = _type }
+
+#define CONF_BOOL_VAR(_name, _val) \
+ CONF_VAR(_name, b, _val, CONFIG_TYPE_BOOL)
+#define CONF_INT_VAR(_name, _val) \
+ CONF_VAR(_name, i, _val, CONFIG_TYPE_INT)
+#define CONF_LONG_VAR(_name, _val) \
+ CONF_VAR(_name, l, _val, CONFIG_TYPE_LONG)
+#define CONF_U64_VAR(_name, _val) \
+ CONF_VAR(_name, ll, _val, CONFIG_TYPE_U64)
+#define CONF_FLOAT_VAR(_name, _val) \
+ CONF_VAR(_name, f, _val, CONFIG_TYPE_FLOAT)
+#define CONF_DOUBLE_VAR(_name, _val) \
+ CONF_VAR(_name, d, _val, CONFIG_TYPE_DOUBLE)
+#define CONF_STR_VAR(_name, _val) \
+ CONF_VAR(_name, s, _val, CONFIG_TYPE_STRING)
+#define CONF_END() \
+ { .name = NULL }
+
struct perf_config_set *perf_config_set__new(void);
void perf_config_set__delete(struct perf_config_set *set);
--
2.5.0