Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1476126 > unrolled thread
| Started by | Taeung Song <treeze.taeung@gmail.com> |
|---|---|
| First post | 2016-09-05 07:30 +0200 |
| Last post | 2016-09-05 07:30 +0200 |
| Articles | 4 — 1 participant |
Back to article view | Back to linux.kernel
[PATCH v8 0/7] perf config: Introduce default config key-value pairs arrays Taeung Song <treeze.taeung@gmail.com> - 2016-09-05 07:30 +0200
[PATCH v8 5/7] perf config: Initialize ui_browser__colorsets with default config items Taeung Song <treeze.taeung@gmail.com> - 2016-09-05 07:30 +0200
[PATCH v8 2/7] perf config: Add macros assigning key-value pairs to default_config_item Taeung Song <treeze.taeung@gmail.com> - 2016-09-05 07:30 +0200
[PATCH v8 4/7] perf config: Use combined {fore,back}ground colors value instead of each two color Taeung Song <treeze.taeung@gmail.com> - 2016-09-05 07:30 +0200
| From | Taeung Song <treeze.taeung@gmail.com> |
|---|---|
| Date | 2016-09-05 07:30 +0200 |
| Subject | [PATCH v8 0/7] perf config: Introduce default config key-value pairs arrays |
| Message-ID | <sdUDL-7OR-3@gated-at.bofh.it> |
Hello, :)
When initializing default perf config values,
we currently use values of actual type(int, bool, char *, etc.).
But I suggest using default config key-value pairs arrays.
For example,
If there isn't a user config value for 'annotate.use_offset'
config variable at ~/.perfconfig,
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,
};
But if we use new config arrays that have all default config key-value pairs,
we could initialize default config values with them.
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 existing default config values or
add default values for new config item.
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.b
instead of actual boolean type value 'true'.
IMHO, I think it would 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
v8:
- rebased on current acme/perf/core
v7:
- fix wrong handling a exception from strdup (Arnaldo)
- rebased on current acme/perf/core
v6:
- rename 'fore_back_colors' to simple 'colors' of ui_browser_colorset (Namhyung)
- remove unnecssary whitespace changes of PATCH 4/7, 5/7 (Namhyung)
- make more general macro instead of making accessor macro for each config section (Namhyung)
- rebased on current acme/perf/core
v5:
- rebased on current acme/perf/core
v4:
- rename 'fb_ground' to 'fore_back_colors' (Namhyung)
- add struct default_config_section
- split first patch[PATCH 1/7] as two
- remove perf_default_config_init() at perf.c
- rebased on current acme/perf/core
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_section and default_config_item
for default config key-value pairs
perf config: Add macros assigning key-value pairs to
default_config_item
perf config: Add default section and item arrays for 'colors' config
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: Add default section and item arrays for 'annotate' config
perf config: Initialize annotate_browser__opts with default config
items
tools/perf/ui/browser.c | 64 +++++++++++++++++--------------
tools/perf/ui/browsers/annotate.c | 16 ++++++--
tools/perf/util/config.c | 26 +++++++++++++
tools/perf/util/config.h | 80 +++++++++++++++++++++++++++++++++++++++
4 files changed, 154 insertions(+), 32 deletions(-)
--
2.7.4
[toc] | [next] | [standalone]
| From | Taeung Song <treeze.taeung@gmail.com> |
|---|---|
| Date | 2016-09-05 07:30 +0200 |
| Subject | [PATCH v8 5/7] perf config: Initialize ui_browser__colorsets with default config items |
| Message-ID | <sdUDM-7OR-25@gated-at.bofh.it> |
| In reply to | #1476126 |
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.s
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: Wang Nan <wangnan0@huawei.com>
Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
---
tools/perf/ui/browser.c | 25 ++++++++++++++++++-------
1 file changed, 18 insertions(+), 7 deletions(-)
diff --git a/tools/perf/ui/browser.c b/tools/perf/ui/browser.c
index 1c80f00..5caa7e4 100644
--- a/tools/perf/ui/browser.c
+++ b/tools/perf/ui/browser.c
@@ -509,37 +509,30 @@ static struct ui_browser_colorset {
{
.colorset = HE_COLORSET_TOP,
.name = "top",
- .colors = "red, default",
},
{
.colorset = HE_COLORSET_MEDIUM,
.name = "medium",
- .colors = "green, default",
},
{
.colorset = HE_COLORSET_NORMAL,
.name = "normal",
- .colors = "default, default",
},
{
.colorset = HE_COLORSET_SELECTED,
.name = "selected",
- .colors = "black, yellow",
},
{
.colorset = HE_COLORSET_JUMP_ARROWS,
.name = "jump_arrows",
- .colors = "blue, default",
},
{
.colorset = HE_COLORSET_ADDR,
.name = "addr",
- .colors = "magenta, default",
},
{
.colorset = HE_COLORSET_ROOT,
.name = "root",
- .colors = "white, blue",
},
{
.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);
}
+static 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].colors =
+ 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) {
--
2.7.4
[toc] | [prev] | [next] | [standalone]
| From | Taeung Song <treeze.taeung@gmail.com> |
|---|---|
| Date | 2016-09-05 07:30 +0200 |
| Subject | [PATCH v8 2/7] perf config: Add macros assigning key-value pairs to default_config_item |
| Message-ID | <sdUDM-7OR-23@gated-at.bofh.it> |
| In reply to | #1476126 |
In near future, default_config_item arrays will be added
(e.g. const struct default_config_item colors_config_items[])
To simply assign config key-value pairs to default_config_item,
add macros that are CONF_VAR() and CONF_*_VAR() for each type.
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Wang Nan <wangnan0@huawei.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
---
tools/perf/util/config.h | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/tools/perf/util/config.h b/tools/perf/util/config.h
index 1fd8e4c..613900f 100644
--- a/tools/perf/util/config.h
+++ b/tools/perf/util/config.h
@@ -92,4 +92,24 @@ struct default_config_section {
const struct default_config_item *items;
};
+#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 }
+
#endif /* __PERF_CONFIG_H */
--
2.7.4
[toc] | [prev] | [next] | [standalone]
| From | Taeung Song <treeze.taeung@gmail.com> |
|---|---|
| Date | 2016-09-05 07:30 +0200 |
| Subject | [PATCH v8 4/7] perf config: Use combined {fore,back}ground colors value instead of each two color |
| Message-ID | <sdUDM-7OR-31@gated-at.bofh.it> |
| In reply to | #1476126 |
To easily set default config values into actual variables for 'colors' config,
it would be better that actual variables for each 'colors' config
have only one value like 'default_config_item' type.
If we use combined {fore,back}ground colors values in ui_browser_colorset,
it smoothly work to initialize default config values for 'colors' config
by 'colors_config_items' array that contains default values for it 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: Wang Nan <wangnan0@huawei.com>
Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
---
tools/perf/ui/browser.c | 53 +++++++++++++++++++++++--------------------------
1 file changed, 25 insertions(+), 28 deletions(-)
diff --git a/tools/perf/ui/browser.c b/tools/perf/ui/browser.c
index 3eb3edb..1c80f00 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, *colors;
int colorset;
} ui_browser__colorsets[] = {
{
.colorset = HE_COLORSET_TOP,
.name = "top",
- .fg = "red",
- .bg = "default",
+ .colors = "red, default",
},
{
.colorset = HE_COLORSET_MEDIUM,
.name = "medium",
- .fg = "green",
- .bg = "default",
+ .colors = "green, default",
},
{
.colorset = HE_COLORSET_NORMAL,
.name = "normal",
- .fg = "default",
- .bg = "default",
+ .colors = "default, default",
},
{
.colorset = HE_COLORSET_SELECTED,
.name = "selected",
- .fg = "black",
- .bg = "yellow",
+ .colors = "black, yellow",
},
{
.colorset = HE_COLORSET_JUMP_ARROWS,
.name = "jump_arrows",
- .fg = "blue",
- .bg = "default",
+ .colors = "blue, default",
},
{
.colorset = HE_COLORSET_ADDR,
.name = "addr",
- .fg = "magenta",
- .bg = "default",
+ .colors = "magenta, default",
},
{
.colorset = HE_COLORSET_ROOT,
.name = "root",
- .fg = "white",
- .bg = "blue",
+ .colors = "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 *colors;
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)
+ colors = strdup(value);
+ if (colors == NULL)
break;
+ ui_browser__colorsets[i].colors = colors;
- *bg = '\0';
- while (isspace(*++bg));
- ui_browser__colorsets[i].bg = bg;
- ui_browser__colorsets[i].fg = fg;
return 0;
}
- free(fg);
+ free(colors);
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 *colors, *fg, *bg;
struct ui_browser_colorset *c = &ui_browser__colorsets[i++];
- sltt_set_color(c->colorset, c->name, c->fg, c->bg);
+
+ colors = strdup(c->colors);
+ if (colors == NULL)
+ break;
+ fg = strtok(colors, ",");
+ bg = strtok(NULL, ",");
+ bg = ltrim(bg);
+ sltt_set_color(c->colorset, c->name, fg, bg);
+ free(colors);
}
annotate_browser__init();
--
2.7.4
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web