Em Mon, May 09, 2016 at 08:41:48PM +0900, Taeung Song escreveu: > 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')
looks ok > Cc: Namhyung Kim <[email protected]> > Cc: Jiri Olsa <[email protected]> > Signed-off-by: Taeung Song <[email protected]> > --- > tools/perf/ui/browser.c | 46 ++++++++++++++++++++++++++++++++-------------- > tools/perf/ui/browser.h | 1 + > tools/perf/ui/tui/setup.c | 1 + > tools/perf/util/cache.h | 1 + > tools/perf/util/config.h | 12 ++++++++++++ > 5 files changed, 47 insertions(+), 14 deletions(-) > > diff --git a/tools/perf/ui/browser.c b/tools/perf/ui/browser.c > index a477867..385d0de 100644 > --- a/tools/perf/ui/browser.c > +++ b/tools/perf/ui/browser.c > @@ -509,44 +509,30 @@ static struct ui_browser_colorset { > { > .colorset = HE_COLORSET_TOP, > .name = "top", > - .fg = "red", > - .bg = "default", > }, > { > .colorset = HE_COLORSET_MEDIUM, > .name = "medium", > - .fg = "green", > - .bg = "default", > }, > { > .colorset = HE_COLORSET_NORMAL, > .name = "normal", > - .fg = "default", > - .bg = "default", > }, > { > .colorset = HE_COLORSET_SELECTED, > .name = "selected", > - .fg = "black", > - .bg = "yellow", > }, > { > .colorset = HE_COLORSET_JUMP_ARROWS, > .name = "jump_arrows", > - .fg = "blue", > - .bg = "default", > }, > { > .colorset = HE_COLORSET_ADDR, > .name = "addr", > - .fg = "magenta", > - .bg = "default", > }, > { > .colorset = HE_COLORSET_ROOT, > .name = "root", > - .fg = "white", > - .bg = "blue", > }, > { > .name = NULL, > @@ -591,6 +577,7 @@ static int ui_browser__color_config(const char *var, > const char *value, > if (strcmp(ui_browser__colorsets[i].name, name) != 0) > continue; > > + zfree((char **)&ui_browser__colorsets[i].fg); > ret = ui_browser__config_gcolors(&ui_browser__colorsets[i], > value); > break; > } > @@ -745,10 +732,41 @@ void __ui_browser__line_arrow(struct ui_browser > *browser, unsigned int column, > __ui_browser__line_arrow_down(browser, column, start, end); > } > > +static void ui_browser__free_color_configs(void) > +{ > + int i; > + > + for (i = 0; ui_browser__colorsets[i].name != NULL; ++i) > + zfree((char **)&ui_browser__colorsets[i].fg); > +} > + > +void ui_browser__free(void) > +{ > + ui_browser__free_color_configs(); > +} > + > +static void ui_browser__init_colorsets(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__config_gcolors(&ui_browser__colorsets[i], > + > colors_config_items[j].value.s); > + break; > + } > + } > + } > +} > + > void ui_browser__init(void) > { > int i = 0; > > + ui_browser__init_colorsets(); > 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..7a83a1a 100644 > --- a/tools/perf/ui/browser.h > +++ b/tools/perf/ui/browser.h > @@ -74,5 +74,6 @@ void ui_browser__list_head_seek(struct ui_browser *browser, > off_t offset, int wh > unsigned int ui_browser__list_head_refresh(struct ui_browser *browser); > > void ui_browser__init(void); > +void ui_browser__free(void); > void annotate_browser__init(void); > #endif /* _PERF_UI_BROWSER_H_ */ > diff --git a/tools/perf/ui/tui/setup.c b/tools/perf/ui/tui/setup.c > index 7dfeba0..7999a57 100644 > --- a/tools/perf/ui/tui/setup.c > +++ b/tools/perf/ui/tui/setup.c > @@ -171,4 +171,5 @@ void ui__exit(bool wait_for_ok) > SLang_reset_tty(); > > perf_error__unregister(&perf_tui_eops); > + ui_browser__free(); > } > diff --git a/tools/perf/util/cache.h b/tools/perf/util/cache.h > index 1f5a93c..8eab653 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.h b/tools/perf/util/config.h > index 84414af..e0c8392 100644 > --- a/tools/perf/util/config.h > +++ b/tools/perf/util/config.h > @@ -44,6 +44,16 @@ struct perf_config_set { > struct list_head sections; > }; > > +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 +74,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

