linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/7] perf config: Introduce default config key-value pairs arrays
@ 2016-05-24  6:50 Taeung Song
  2016-05-24  6:50 ` [PATCH v3 1/7] perf config: Introduce default_config_item for default config key-value pairs Taeung Song
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: Taeung Song @ 2016-05-24  6:50 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Jiri Olsa, Namhyung Kim, Ingo Molnar,
	Peter Zijlstra, Alexander Shishkin, Masami Hiramatsu,
	Taeung Song

When initializing default perf config values,
we currently use values of actual type(int, bool, char *, etc.)

For example,
If there isn't user config value at ~/.perfconfig for 'annotate.use_offset' config variable,
default value for it is 'true' bool type value in perf like below.

At ui/browsers/annoate.c

static struct annotate_browser_opt {
       bool hide_src_code,
            use_offset,
	    jump_arrows,
	    show_linenr,
	    show_nr_jumps,
	    show_total_period;
} annotate_browser__opts = {
       .use_offset      = true,
       .jump_arrows     = true,
};

By the way, I suggest using new config arrays that have all default config key-value pairs
and then initializing default config values with them.
Because if we do, we can manage default perf config values at one spot (like util/config.c)
and It can be easy and simple to modify default config values or add new configs.

For example,
If we use new default config arrays and there isn't user config value for 'annoate.use_offset'
default value for it will be set as annotate_config_items[CONFIG_ANNOATE_USE_OFFSET].value
instead of actual boolean type value 'true'.

IMHO, I think it is needed to use new default config arrays
to manage default perf config values more effectively.
And this pathset contains patchs for only 'colors' and 'annoate' section
because waiting for other opinions.

If you review this patchset, I'd appreciate it :-)

Thanks,
Taeung

v3:
- remove default config arrays for the rest sections except 'colors' and 'annotate'
- use combined {fore, back}ground colors instead of each two color
- introduce perf_default_config_init() that call all default_*_config_init()
  for each config section

v2:
- rename 'ui_browser__config_gcolors' to 'ui_browser__config_colors' (Arnaldo)
- change 'ground colors' to '{back, fore}ground colors' (Arnaldo)
- use strtok + ltrim instead of strchr and while (isspace(*++bg)); (Arnaldo)

Taeung Song (7):
  perf config: Introduce default_config_item for default config
    key-value pairs
  perf config: Add 'colors' section default configs arrrays
  perf config: Use combined {fore,back}ground colors value instead of
    each two color
  perf config: Initialize ui_browser__colorsets with default config
    items
  perf config: Introduce perf_default_config_init()
  perf config: Add 'annotate' section default configs arrrays
  perf config: Initialize annotate_browser__opts with default config
    items

 tools/perf/perf.c                 |  7 ++++
 tools/perf/ui/browser.c           | 63 +++++++++++++++++--------------
 tools/perf/ui/browser.h           |  3 ++
 tools/perf/ui/browsers/annotate.c | 15 ++++++--
 tools/perf/util/cache.h           |  2 +
 tools/perf/util/config.c          | 28 +++++++++++++-
 tools/perf/util/config.h          | 79 ++++++++++++++++++++++++++++++++++++++-
 7 files changed, 163 insertions(+), 34 deletions(-)

-- 
2.5.0

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH v3 1/7] perf config: Introduce default_config_item for default config key-value pairs
  2016-05-24  6:50 [PATCH v3 0/7] perf config: Introduce default config key-value pairs arrays Taeung Song
@ 2016-05-24  6:50 ` Taeung Song
  2016-05-24  6:50 ` [PATCH v3 2/7] perf config: Add 'colors' section default configs arrrays Taeung Song
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Taeung Song @ 2016-05-24  6:50 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Jiri Olsa, Namhyung Kim, Ingo Molnar,
	Peter Zijlstra, Alexander Shishkin, Masami Hiramatsu,
	Taeung Song, Jiri Olsa, Wang Nan, Ingo Molnar, Masami Hiramatsu

When initializing default perf config values,
we currently use values of actual type(int, bool, char *, etc.).

For example,
If there isn't user config value at ~/.perfconfig
for 'annotate.use_offset' config variable,
default value for it is 'true' bool type value in perf like below.

At ui/browsers/annoate.c

static struct annotate_browser_opt {
       bool hide_src_code,
            use_offset,
	    jump_arrows,
	    show_linenr,
	    show_nr_jumps,
	    show_total_period;
} annotate_browser__opts = {
       .use_offset      = true,
       .jump_arrows     = true,
};

By the way, I suggest using 'struct default_config_item' that
have default config key-value pairs and then initializing
default config values with them, in near future.
Because if we do, we can manage default perf config values
at one spot (like util/config.c) with default config arrays
and It can be easy and simple to modify default config values or add new configs.

Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Wang Nan <wangnan0@huawei.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
---
 tools/perf/util/config.h | 44 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/tools/perf/util/config.h b/tools/perf/util/config.h
index 22ec626..5a11ca6 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;
@@ -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

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v3 2/7] perf config: Add 'colors' section default configs arrrays
  2016-05-24  6:50 [PATCH v3 0/7] perf config: Introduce default config key-value pairs arrays Taeung Song
  2016-05-24  6:50 ` [PATCH v3 1/7] perf config: Introduce default_config_item for default config key-value pairs Taeung Song
@ 2016-05-24  6:50 ` Taeung Song
  2016-05-24  6:50 ` [PATCH v3 3/7] perf config: Use combined {fore,back}ground colors value instead of each two color Taeung Song
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Taeung Song @ 2016-05-24  6:50 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Jiri Olsa, Namhyung Kim, Ingo Molnar,
	Peter Zijlstra, Alexander Shishkin, Masami Hiramatsu,
	Taeung Song, Jiri Olsa, Masami Hiramatsu

Actual variable for configs of 'colors' section is like below.

(at ui/browser.c)
static struct ui_browser_colorset {
	const char *name, *fg, *bg;
	int colorset;
} ui_browser__colorsets[] = {
	{
		.colorset = HE_COLORSET_TOP,
		.name	  = "top",
		.fg	  = "red",
		.bg	  = "default",
	},
...

But I suggest using 'colors' default config array that
have all default config key-value pairs for 'colors' section

In near future, this array will be used on ui/browser.c
because of setting default actual variable for 'colors' config.

Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
---
 tools/perf/util/cache.h  |  1 +
 tools/perf/util/config.c | 17 ++++++++++++++++-
 tools/perf/util/config.h | 18 +++++++++++++++++-
 3 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/tools/perf/util/cache.h b/tools/perf/util/cache.h
index 0d814bb..54bbd55 100644
--- a/tools/perf/util/cache.h
+++ b/tools/perf/util/cache.h
@@ -7,6 +7,7 @@
 #include <subcmd/pager.h>
 #include "../perf.h"
 #include "../ui/ui.h"
+#include "config.h"
 
 #include <linux/string.h>
 
diff --git a/tools/perf/util/config.c b/tools/perf/util/config.c
index dad7d82..e38d187 100644
--- a/tools/perf/util/config.c
+++ b/tools/perf/util/config.c
@@ -29,6 +29,21 @@ static int config_file_eof;
 
 const char *config_exclusive_filename;
 
+const struct perf_config_section default_sections[] = {
+	{ .name = "colors" },
+};
+
+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()
+};
+
 static int get_next_char(void)
 {
 	int c;
@@ -677,7 +692,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(&section->name);
+	zfree((char **)&section->name);
 	free(section);
 }
 
diff --git a/tools/perf/util/config.h b/tools/perf/util/config.h
index 5a11ca6..f2220a8 100644
--- a/tools/perf/util/config.h
+++ b/tools/perf/util/config.h
@@ -35,7 +35,7 @@ struct perf_config_item {
 };
 
 struct perf_config_section {
-	char *name;
+	const char *name;
 	struct list_head items;
 	struct list_head node;
 };
@@ -44,6 +44,20 @@ struct perf_config_set {
 	struct list_head sections;
 };
 
+enum config_section_idx {
+	CONFIG_COLORS,
+};
+
+enum colors_config_items_idx {
+	CONFIG_COLORS_TOP,
+	CONFIG_COLORS_MEDIUM,
+	CONFIG_COLORS_NORMAL,
+	CONFIG_COLORS_SELECTED,
+	CONFIG_COLORS_JUMP_ARROWS,
+	CONFIG_COLORS_ADDR,
+	CONFIG_COLORS_ROOT,
+};
+
 #define CONF_VAR(_name, _field, _val, _type)			\
 	{ .name = _name, .value._field = _val, .type = _type }
 
@@ -64,6 +78,8 @@ struct perf_config_set {
 #define CONF_END()					\
 	{ .name = NULL }
 
+extern const struct default_config_item colors_config_items[];
+
 struct perf_config_set *perf_config_set__new(void);
 void perf_config_set__delete(struct perf_config_set *set);
 
-- 
2.5.0

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v3 3/7] perf config: Use combined {fore,back}ground colors value instead of each two color
  2016-05-24  6:50 [PATCH v3 0/7] perf config: Introduce default config key-value pairs arrays Taeung Song
  2016-05-24  6:50 ` [PATCH v3 1/7] perf config: Introduce default_config_item for default config key-value pairs Taeung Song
  2016-05-24  6:50 ` [PATCH v3 2/7] perf config: Add 'colors' section default configs arrrays Taeung Song
@ 2016-05-24  6:50 ` Taeung Song
  2016-05-24  6:50 ` [PATCH v3 4/7] perf config: Initialize ui_browser__colorsets with default config items Taeung Song
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Taeung Song @ 2016-05-24  6:50 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Jiri Olsa, Namhyung Kim, Ingo Molnar,
	Peter Zijlstra, Alexander Shishkin, Masami Hiramatsu,
	Taeung Song, Masami Hiramatsu

To manage all default config values at one spot (at util/config.c),
it would be better that actual variables for each 'colors' config
also have only one value like 'default_config_item' type.

If we do, it smoothly work to initialize 'colors' default config values
by 'colors_config_items' array that have default values at util/config.c
because both actual variable and config item of 'colors_config_items'
are equal in the number of values (as just one).

Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
---
 tools/perf/ui/browser.c | 81 ++++++++++++++++++++++++-------------------------
 1 file changed, 39 insertions(+), 42 deletions(-)

diff --git a/tools/perf/ui/browser.c b/tools/perf/ui/browser.c
index af68a9d..8e06b2e 100644
--- a/tools/perf/ui/browser.c
+++ b/tools/perf/ui/browser.c
@@ -503,61 +503,53 @@ unsigned int ui_browser__list_head_refresh(struct ui_browser *browser)
 }
 
 static struct ui_browser_colorset {
-	const char *name, *fg, *bg;
+	const char *name, *fb_ground;
 	int colorset;
 } ui_browser__colorsets[] = {
 	{
-		.colorset = HE_COLORSET_TOP,
-		.name	  = "top",
-		.fg	  = "red",
-		.bg	  = "default",
+		.colorset  = HE_COLORSET_TOP,
+		.name      = "top",
+		.fb_ground = "red, default",
 	},
 	{
-		.colorset = HE_COLORSET_MEDIUM,
-		.name	  = "medium",
-		.fg	  = "green",
-		.bg	  = "default",
+		.colorset  = HE_COLORSET_MEDIUM,
+		.name      = "medium",
+		.fb_ground = "green, default",
 	},
 	{
-		.colorset = HE_COLORSET_NORMAL,
-		.name	  = "normal",
-		.fg	  = "default",
-		.bg	  = "default",
+		.colorset  = HE_COLORSET_NORMAL,
+		.name      = "normal",
+		.fb_ground = "default, default",
 	},
 	{
-		.colorset = HE_COLORSET_SELECTED,
-		.name	  = "selected",
-		.fg	  = "black",
-		.bg	  = "yellow",
+		.colorset  = HE_COLORSET_SELECTED,
+		.name      = "selected",
+		.fb_ground = "black, yellow",
 	},
 	{
-		.colorset = HE_COLORSET_JUMP_ARROWS,
-		.name	  = "jump_arrows",
-		.fg	  = "blue",
-		.bg	  = "default",
+		.colorset  = HE_COLORSET_JUMP_ARROWS,
+		.name      = "jump_arrows",
+		.fb_ground = "blue, default",
 	},
 	{
-		.colorset = HE_COLORSET_ADDR,
-		.name	  = "addr",
-		.fg	  = "magenta",
-		.bg	  = "default",
+		.colorset  = HE_COLORSET_ADDR,
+		.name      = "addr",
+		.fb_ground = "magenta, default",
 	},
 	{
-		.colorset = HE_COLORSET_ROOT,
-		.name	  = "root",
-		.fg	  = "white",
-		.bg	  = "blue",
+		.colorset  = HE_COLORSET_ROOT,
+		.name      = "root",
+		.fb_ground = "white, blue",
 	},
 	{
 		.name = NULL,
 	}
 };
 
-
 static int ui_browser__color_config(const char *var, const char *value,
 				    void *data __maybe_unused)
 {
-	char *fg = NULL, *bg;
+	char *fb_ground;
 	int i;
 
 	/* same dir for all commands */
@@ -570,22 +562,18 @@ static int ui_browser__color_config(const char *var, const char *value,
 		if (strcmp(ui_browser__colorsets[i].name, name) != 0)
 			continue;
 
-		fg = strdup(value);
-		if (fg == NULL)
-			break;
+		if (strstr(value, ",") == NULL)
+			return -1;
 
-		bg = strchr(fg, ',');
-		if (bg == NULL)
+		fb_ground = strdup(value);
+		if (fb_ground == NULL)
 			break;
+		ui_browser__colorsets[i].fb_ground = fb_ground;
 
-		*bg = '\0';
-		while (isspace(*++bg));
-		ui_browser__colorsets[i].bg = bg;
-		ui_browser__colorsets[i].fg = fg;
 		return 0;
 	}
 
-	free(fg);
+	free(fb_ground);
 	return -1;
 }
 
@@ -743,8 +731,17 @@ void ui_browser__init(void)
 	perf_config(ui_browser__color_config, NULL);
 
 	while (ui_browser__colorsets[i].name) {
+		char *fb_ground, *fg, *bg;
 		struct ui_browser_colorset *c = &ui_browser__colorsets[i++];
-		sltt_set_color(c->colorset, c->name, c->fg, c->bg);
+
+		fb_ground = strdup(c->fb_ground);
+		if (fg == NULL)
+			break;
+		fg = strtok(fb_ground, ",");
+		bg = strtok(NULL, ",");
+		bg = ltrim(bg);
+		sltt_set_color(c->colorset, c->name, fg, bg);
+		free(fb_ground);
 	}
 
 	annotate_browser__init();
-- 
2.5.0

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v3 4/7] perf config: Initialize ui_browser__colorsets with default config items
  2016-05-24  6:50 [PATCH v3 0/7] perf config: Introduce default config key-value pairs arrays Taeung Song
                   ` (2 preceding siblings ...)
  2016-05-24  6:50 ` [PATCH v3 3/7] perf config: Use combined {fore,back}ground colors value instead of each two color Taeung Song
@ 2016-05-24  6:50 ` Taeung Song
  2016-05-24  6:50 ` [PATCH v3 5/7] perf config: Introduce perf_default_config_init() Taeung Song
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Taeung Song @ 2016-05-24  6:50 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Jiri Olsa, Namhyung Kim, Ingo Molnar,
	Peter Zijlstra, Alexander Shishkin, Masami Hiramatsu,
	Taeung Song, Masami Hiramatsu

Set default config values for 'colors' section with 'colors_config_items[]'
instead of actual const char * type values.
(e.g. using colors_config_item[CONFIG_COLORS_TOP].value
instead of "red, default" string value for 'colors.top')

Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
---
 tools/perf/ui/browser.c | 53 +++++++++++++++++++++++++++++--------------------
 tools/perf/ui/browser.h |  2 ++
 2 files changed, 34 insertions(+), 21 deletions(-)

diff --git a/tools/perf/ui/browser.c b/tools/perf/ui/browser.c
index 8e06b2e..00a91e0 100644
--- a/tools/perf/ui/browser.c
+++ b/tools/perf/ui/browser.c
@@ -507,39 +507,32 @@ static struct ui_browser_colorset {
 	int colorset;
 } ui_browser__colorsets[] = {
 	{
-		.colorset  = HE_COLORSET_TOP,
-		.name      = "top",
-		.fb_ground = "red, default",
+		.colorset = HE_COLORSET_TOP,
+		.name	  = "top",
 	},
 	{
-		.colorset  = HE_COLORSET_MEDIUM,
-		.name      = "medium",
-		.fb_ground = "green, default",
+		.colorset = HE_COLORSET_MEDIUM,
+		.name	  = "medium",
 	},
 	{
-		.colorset  = HE_COLORSET_NORMAL,
-		.name      = "normal",
-		.fb_ground = "default, default",
+		.colorset = HE_COLORSET_NORMAL,
+		.name	  = "normal",
 	},
 	{
-		.colorset  = HE_COLORSET_SELECTED,
-		.name      = "selected",
-		.fb_ground = "black, yellow",
+		.colorset = HE_COLORSET_SELECTED,
+		.name	  = "selected",
 	},
 	{
-		.colorset  = HE_COLORSET_JUMP_ARROWS,
-		.name      = "jump_arrows",
-		.fb_ground = "blue, default",
+		.colorset = HE_COLORSET_JUMP_ARROWS,
+		.name	  = "jump_arrows",
 	},
 	{
-		.colorset  = HE_COLORSET_ADDR,
-		.name      = "addr",
-		.fb_ground = "magenta, default",
+		.colorset = HE_COLORSET_ADDR,
+		.name	  = "addr",
 	},
 	{
-		.colorset  = HE_COLORSET_ROOT,
-		.name      = "root",
-		.fb_ground = "white, blue",
+		.colorset = HE_COLORSET_ROOT,
+		.name	  = "root",
 	},
 	{
 		.name = NULL,
@@ -724,10 +717,28 @@ void __ui_browser__line_arrow(struct ui_browser *browser, unsigned int column,
 		__ui_browser__line_arrow_down(browser, column, start, end);
 }
 
+void default_colors_config_init(void)
+{
+	int i, j;
+
+	for (i = 0; ui_browser__colorsets[i].name != NULL; ++i) {
+		const char *name = ui_browser__colorsets[i].name;
+
+		for (j = 0; colors_config_items[j].name != NULL; j++) {
+			if (!strcmp(name, colors_config_items[j].name)) {
+				ui_browser__colorsets[i].fb_ground =
+					colors_config_items[j].value.s;
+				break;
+			}
+		}
+	}
+}
+
 void ui_browser__init(void)
 {
 	int i = 0;
 
+	default_colors_config_init();
 	perf_config(ui_browser__color_config, NULL);
 
 	while (ui_browser__colorsets[i].name) {
diff --git a/tools/perf/ui/browser.h b/tools/perf/ui/browser.h
index be3b70e..46921e5 100644
--- a/tools/perf/ui/browser.h
+++ b/tools/perf/ui/browser.h
@@ -75,4 +75,6 @@ unsigned int ui_browser__list_head_refresh(struct ui_browser *browser);
 
 void ui_browser__init(void);
 void annotate_browser__init(void);
+
+void default_colors_config_init(void);
 #endif /* _PERF_UI_BROWSER_H_ */
-- 
2.5.0

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v3 5/7] perf config: Introduce perf_default_config_init()
  2016-05-24  6:50 [PATCH v3 0/7] perf config: Introduce default config key-value pairs arrays Taeung Song
                   ` (3 preceding siblings ...)
  2016-05-24  6:50 ` [PATCH v3 4/7] perf config: Initialize ui_browser__colorsets with default config items Taeung Song
@ 2016-05-24  6:50 ` Taeung Song
  2016-05-24  6:50 ` [PATCH v3 6/7] perf config: Add 'annotate' section default configs arrrays Taeung Song
  2016-05-24  6:50 ` [PATCH v3 7/7] perf config: Initialize annotate_browser__opts with default config items Taeung Song
  6 siblings, 0 replies; 8+ messages in thread
From: Taeung Song @ 2016-05-24  6:50 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Jiri Olsa, Namhyung Kim, Ingo Molnar,
	Peter Zijlstra, Alexander Shishkin, Masami Hiramatsu,
	Taeung Song, Jiri Olsa, Wang Nan, Ingo Molnar, Masami Hiramatsu

default_*_config_init() initialize actual variables
with each default config value.
(e.g. default_colors_config_init() for 'colors' section)

But I suggest using perf_default_config_init() that call
all default_*_config_init() and this function would be called
at the very beginning of main() on perf.c.

In order to set all default config values before running
a particular sub-command. And if we do, we can manage
all default_*_config_init() functions in perf_default_config_init().

Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Wang Nan <wangnan0@huawei.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
---
 tools/perf/perf.c       | 6 ++++++
 tools/perf/ui/browser.c | 1 -
 tools/perf/util/cache.h | 1 +
 3 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/tools/perf/perf.c b/tools/perf/perf.c
index 15982ce..e140b551 100644
--- a/tools/perf/perf.c
+++ b/tools/perf/perf.c
@@ -77,6 +77,11 @@ struct pager_config {
 	int val;
 };
 
+static void perf_default_config_init(void)
+{
+	default_colors_config_init();
+}
+
 static int pager_command_config(const char *var, const char *value, void *data)
 {
 	struct pager_config *c = data;
@@ -558,6 +563,7 @@ int main(int argc, const char **argv)
 
 	srandom(time(NULL));
 
+	perf_default_config_init();
 	perf_config(perf_default_config, NULL);
 	set_buildid_dir(NULL);
 
diff --git a/tools/perf/ui/browser.c b/tools/perf/ui/browser.c
index 00a91e0..c07ca70 100644
--- a/tools/perf/ui/browser.c
+++ b/tools/perf/ui/browser.c
@@ -738,7 +738,6 @@ void ui_browser__init(void)
 {
 	int i = 0;
 
-	default_colors_config_init();
 	perf_config(ui_browser__color_config, NULL);
 
 	while (ui_browser__colorsets[i].name) {
diff --git a/tools/perf/util/cache.h b/tools/perf/util/cache.h
index 54bbd55..19e1e00 100644
--- a/tools/perf/util/cache.h
+++ b/tools/perf/util/cache.h
@@ -7,6 +7,7 @@
 #include <subcmd/pager.h>
 #include "../perf.h"
 #include "../ui/ui.h"
+#include "../ui/browser.h"
 #include "config.h"
 
 #include <linux/string.h>
-- 
2.5.0

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v3 6/7] perf config: Add 'annotate' section default configs arrrays
  2016-05-24  6:50 [PATCH v3 0/7] perf config: Introduce default config key-value pairs arrays Taeung Song
                   ` (4 preceding siblings ...)
  2016-05-24  6:50 ` [PATCH v3 5/7] perf config: Introduce perf_default_config_init() Taeung Song
@ 2016-05-24  6:50 ` Taeung Song
  2016-05-24  6:50 ` [PATCH v3 7/7] perf config: Initialize annotate_browser__opts with default config items Taeung Song
  6 siblings, 0 replies; 8+ messages in thread
From: Taeung Song @ 2016-05-24  6:50 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Jiri Olsa, Namhyung Kim, Ingo Molnar,
	Peter Zijlstra, Alexander Shishkin, Masami Hiramatsu,
	Taeung Song, Jiri Olsa, Masami Hiramatsu

Actual variable for configs of 'annotate' section is like below.

(at ui/browsers/annoate.c)
static struct annotate_browser_opt {
       bool hide_src_code,
            use_offset,
	    jump_arrows,
	    show_linenr,
	    show_nr_jumps,
	    show_total_period;
} annotate_browser__opts = {
       .use_offset      = true,
       .jump_arrows     = true,
};

But I suggest using 'annoate' default config array that
have all default config key-value pairs for 'annotate' section

In near future, this arrays will be used on ui/browsers/annoate.c
because of setting default actual variable for 'annotate' config.

Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
---
 tools/perf/util/config.c | 11 +++++++++++
 tools/perf/util/config.h | 11 +++++++++++
 2 files changed, 22 insertions(+)

diff --git a/tools/perf/util/config.c b/tools/perf/util/config.c
index e38d187..9a06cb0 100644
--- a/tools/perf/util/config.c
+++ b/tools/perf/util/config.c
@@ -31,6 +31,7 @@ const char *config_exclusive_filename;
 
 const struct perf_config_section default_sections[] = {
 	{ .name = "colors" },
+	{ .name = "annotate" },
 };
 
 const struct default_config_item colors_config_items[] = {
@@ -44,6 +45,16 @@ const struct default_config_item colors_config_items[] = {
 	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()
+};
+
 static int get_next_char(void)
 {
 	int c;
diff --git a/tools/perf/util/config.h b/tools/perf/util/config.h
index f2220a8..696e5bc 100644
--- a/tools/perf/util/config.h
+++ b/tools/perf/util/config.h
@@ -46,6 +46,7 @@ struct perf_config_set {
 
 enum config_section_idx {
 	CONFIG_COLORS,
+	CONFIG_ANNOTATE,
 };
 
 enum colors_config_items_idx {
@@ -58,6 +59,15 @@ enum colors_config_items_idx {
 	CONFIG_COLORS_ROOT,
 };
 
+enum annotate_config_items_idx {
+	CONFIG_ANNOTATE_HIDE_SRC_CODE,
+	CONFIG_ANNOTATE_USE_OFFSET,
+	CONFIG_ANNOTATE_JUMP_ARROWS,
+	CONFIG_ANNOTATE_SHOW_NR_JUMPS,
+	CONFIG_ANNOTATE_SHOW_LINENR,
+	CONFIG_ANNOTATE_SHOW_TOTAL_PERIOD,
+};
+
 #define CONF_VAR(_name, _field, _val, _type)			\
 	{ .name = _name, .value._field = _val, .type = _type }
 
@@ -79,6 +89,7 @@ enum colors_config_items_idx {
 	{ .name = NULL }
 
 extern const struct default_config_item colors_config_items[];
+extern const struct default_config_item annotate_config_items[];
 
 struct perf_config_set *perf_config_set__new(void);
 void perf_config_set__delete(struct perf_config_set *set);
-- 
2.5.0

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v3 7/7] perf config: Initialize annotate_browser__opts with default config items
  2016-05-24  6:50 [PATCH v3 0/7] perf config: Introduce default config key-value pairs arrays Taeung Song
                   ` (5 preceding siblings ...)
  2016-05-24  6:50 ` [PATCH v3 6/7] perf config: Add 'annotate' section default configs arrrays Taeung Song
@ 2016-05-24  6:50 ` Taeung Song
  6 siblings, 0 replies; 8+ messages in thread
From: Taeung Song @ 2016-05-24  6:50 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Jiri Olsa, Namhyung Kim, Ingo Molnar,
	Peter Zijlstra, Alexander Shishkin, Masami Hiramatsu,
	Taeung Song, Masami Hiramatsu

Set default config values for 'annotate' section with 'annotate_config_items[]'
instead of actual bool type values.
(e.g. using annotate_config_items[CONFIG_ANNOTATE_USE_OFFSET].value
instead of 'true' bool type value for 'annotate.use_offset'.)

Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
---
 tools/perf/perf.c                 |  1 +
 tools/perf/ui/browser.h           |  1 +
 tools/perf/ui/browsers/annotate.c | 15 +++++++++++----
 tools/perf/util/config.h          |  6 ++++++
 4 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/tools/perf/perf.c b/tools/perf/perf.c
index e140b551..d5541fa 100644
--- a/tools/perf/perf.c
+++ b/tools/perf/perf.c
@@ -80,6 +80,7 @@ struct pager_config {
 static void perf_default_config_init(void)
 {
 	default_colors_config_init();
+	default_annotate_config_init();
 }
 
 static int pager_command_config(const char *var, const char *value, void *data)
diff --git a/tools/perf/ui/browser.h b/tools/perf/ui/browser.h
index 46921e5..b7dc178 100644
--- a/tools/perf/ui/browser.h
+++ b/tools/perf/ui/browser.h
@@ -77,4 +77,5 @@ void ui_browser__init(void);
 void annotate_browser__init(void);
 
 void default_colors_config_init(void);
+void default_annotate_config_init(void);
 #endif /* _PERF_UI_BROWSER_H_ */
diff --git a/tools/perf/ui/browsers/annotate.c b/tools/perf/ui/browsers/annotate.c
index 4fc208e..35c2547 100644
--- a/tools/perf/ui/browsers/annotate.c
+++ b/tools/perf/ui/browsers/annotate.c
@@ -37,10 +37,7 @@ static struct annotate_browser_opt {
 	     show_linenr,
 	     show_nr_jumps,
 	     show_total_period;
-} annotate_browser__opts = {
-	.use_offset	= true,
-	.jump_arrows	= true,
-};
+} annotate_browser__opts;
 
 struct annotate_browser {
 	struct ui_browser b;
@@ -1158,6 +1155,16 @@ static int annotate__config(const char *var, const char *value,
 	return 0;
 }
 
+void default_annotate_config_init(void)
+{
+	annotate_browser__opts.hide_src_code = CONF_ANNOTATE_DEFAULT_VAL(HIDE_SRC_CODE, b);
+	annotate_browser__opts.use_offset = CONF_ANNOTATE_DEFAULT_VAL(USE_OFFSET, b);
+	annotate_browser__opts.jump_arrows = CONF_ANNOTATE_DEFAULT_VAL(JUMP_ARROWS, b);
+	annotate_browser__opts.show_linenr = CONF_ANNOTATE_DEFAULT_VAL(SHOW_LINENR, b);
+	annotate_browser__opts.show_nr_jumps = CONF_ANNOTATE_DEFAULT_VAL(SHOW_NR_JUMPS, b);
+	annotate_browser__opts.show_total_period = CONF_ANNOTATE_DEFAULT_VAL(SHOW_TOTAL_PERIOD, b);
+}
+
 void annotate_browser__init(void)
 {
 	perf_config(annotate__config, NULL);
diff --git a/tools/perf/util/config.h b/tools/perf/util/config.h
index 696e5bc..7b70971 100644
--- a/tools/perf/util/config.h
+++ b/tools/perf/util/config.h
@@ -88,6 +88,12 @@ enum annotate_config_items_idx {
 #define CONF_END()					\
 	{ .name = NULL }
 
+#define CONF_DEFAULT_VAL(section, name, field)			\
+	section##_config_items[CONFIG_##name].value.field
+
+#define CONF_ANNOTATE_DEFAULT_VAL(name, field)			\
+	CONF_DEFAULT_VAL(annotate, ANNOTATE_##name, field)
+
 extern const struct default_config_item colors_config_items[];
 extern const struct default_config_item annotate_config_items[];
 
-- 
2.5.0

^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2016-05-24  6:51 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-05-24  6:50 [PATCH v3 0/7] perf config: Introduce default config key-value pairs arrays Taeung Song
2016-05-24  6:50 ` [PATCH v3 1/7] perf config: Introduce default_config_item for default config key-value pairs Taeung Song
2016-05-24  6:50 ` [PATCH v3 2/7] perf config: Add 'colors' section default configs arrrays Taeung Song
2016-05-24  6:50 ` [PATCH v3 3/7] perf config: Use combined {fore,back}ground colors value instead of each two color Taeung Song
2016-05-24  6:50 ` [PATCH v3 4/7] perf config: Initialize ui_browser__colorsets with default config items Taeung Song
2016-05-24  6:50 ` [PATCH v3 5/7] perf config: Introduce perf_default_config_init() Taeung Song
2016-05-24  6:50 ` [PATCH v3 6/7] perf config: Add 'annotate' section default configs arrrays Taeung Song
2016-05-24  6:50 ` [PATCH v3 7/7] perf config: Initialize annotate_browser__opts with default config items Taeung Song

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).