perf ui browser: Allow initial use without navigation UI elements

The selection and scroll bar are really needed only when the user starts
navigating, before that it just provide distractions.

This also brings the initial screen to look more like the stdio UI,
which more people are used to.

The new code is flexible enough that menu like browsers can opt out and
start with those UI elements.

Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-jfgok30kkerpfw8wtcltgy6z@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 3f7247e0
...@@ -14,9 +14,10 @@ ...@@ -14,9 +14,10 @@
int newtGetKey(void); int newtGetKey(void);
static int ui_browser__percent_color(double percent, bool current) static int ui_browser__percent_color(struct ui_browser *browser,
double percent, bool current)
{ {
if (current) if (current && (!browser->use_navkeypressed || browser->navkeypressed))
return HE_COLORSET_SELECTED; return HE_COLORSET_SELECTED;
if (percent >= MIN_RED) if (percent >= MIN_RED)
return HE_COLORSET_TOP; return HE_COLORSET_TOP;
...@@ -33,7 +34,7 @@ void ui_browser__set_color(struct ui_browser *self __used, int color) ...@@ -33,7 +34,7 @@ void ui_browser__set_color(struct ui_browser *self __used, int color)
void ui_browser__set_percent_color(struct ui_browser *self, void ui_browser__set_percent_color(struct ui_browser *self,
double percent, bool current) double percent, bool current)
{ {
int color = ui_browser__percent_color(percent, current); int color = ui_browser__percent_color(self, percent, current);
ui_browser__set_color(self, color); ui_browser__set_color(self, color);
} }
...@@ -241,12 +242,18 @@ static void ui_browser__scrollbar_set(struct ui_browser *browser) ...@@ -241,12 +242,18 @@ static void ui_browser__scrollbar_set(struct ui_browser *browser)
static int __ui_browser__refresh(struct ui_browser *browser) static int __ui_browser__refresh(struct ui_browser *browser)
{ {
int row; int row;
int width = browser->width;
row = browser->refresh(browser); row = browser->refresh(browser);
ui_browser__set_color(browser, HE_COLORSET_NORMAL); ui_browser__set_color(browser, HE_COLORSET_NORMAL);
SLsmg_fill_region(browser->y + row, browser->x,
browser->height - row, browser->width, ' '); if (!browser->use_navkeypressed || browser->navkeypressed)
ui_browser__scrollbar_set(browser); ui_browser__scrollbar_set(browser);
else
width += 1;
SLsmg_fill_region(browser->y + row, browser->x,
browser->height - row, width, ' ');
return 0; return 0;
} }
...@@ -326,6 +333,17 @@ int ui_browser__run(struct ui_browser *self, int delay_secs) ...@@ -326,6 +333,17 @@ int ui_browser__run(struct ui_browser *self, int delay_secs)
continue; continue;
} }
if (self->use_navkeypressed && !self->navkeypressed) {
if (key == NEWT_KEY_DOWN || key == NEWT_KEY_UP ||
key == NEWT_KEY_PGDN || key == NEWT_KEY_PGUP ||
key == NEWT_KEY_HOME || key == NEWT_KEY_END ||
key == ' ') {
self->navkeypressed = true;
continue;
} else
return key;
}
switch (key) { switch (key) {
case NEWT_KEY_DOWN: case NEWT_KEY_DOWN:
if (self->index == self->nr_entries - 1) if (self->index == self->nr_entries - 1)
......
...@@ -23,6 +23,8 @@ struct ui_browser { ...@@ -23,6 +23,8 @@ struct ui_browser {
void (*seek)(struct ui_browser *self, off_t offset, int whence); void (*seek)(struct ui_browser *self, off_t offset, int whence);
bool (*filter)(struct ui_browser *self, void *entry); bool (*filter)(struct ui_browser *self, void *entry);
u32 nr_entries; u32 nr_entries;
bool navkeypressed;
bool use_navkeypressed;
}; };
void ui_browser__set_color(struct ui_browser *self, int color); void ui_browser__set_color(struct ui_browser *self, int color);
......
...@@ -69,6 +69,11 @@ static void annotate_browser__write(struct ui_browser *self, void *entry, int ro ...@@ -69,6 +69,11 @@ static void annotate_browser__write(struct ui_browser *self, void *entry, int ro
SLsmg_write_char(':'); SLsmg_write_char(':');
slsmg_write_nstring(" ", 8); slsmg_write_nstring(" ", 8);
/* The scroll bar isn't being used */
if (!self->navkeypressed)
width += 1;
if (!*ol->line) if (!*ol->line)
slsmg_write_nstring(" ", width - 18); slsmg_write_nstring(" ", width - 18);
else else
...@@ -386,6 +391,7 @@ int symbol__tui_annotate(struct symbol *sym, struct map *map, int evidx, ...@@ -386,6 +391,7 @@ int symbol__tui_annotate(struct symbol *sym, struct map *map, int evidx,
.write = annotate_browser__write, .write = annotate_browser__write,
.filter = objdump_line__filter, .filter = objdump_line__filter,
.priv = &ms, .priv = &ms,
.use_navkeypressed = true,
}, },
}; };
int ret; int ret;
......
...@@ -547,7 +547,7 @@ static int hist_browser__show_entry(struct hist_browser *self, ...@@ -547,7 +547,7 @@ static int hist_browser__show_entry(struct hist_browser *self,
char s[256]; char s[256];
double percent; double percent;
int printed = 0; int printed = 0;
int color, width = self->b.width; int width = self->b.width;
char folded_sign = ' '; char folded_sign = ' ';
bool current_entry = ui_browser__is_current_entry(&self->b, row); bool current_entry = ui_browser__is_current_entry(&self->b, row);
off_t row_offset = entry->row_offset; off_t row_offset = entry->row_offset;
...@@ -567,22 +567,17 @@ static int hist_browser__show_entry(struct hist_browser *self, ...@@ -567,22 +567,17 @@ static int hist_browser__show_entry(struct hist_browser *self,
0, false, self->hists->stats.total_period); 0, false, self->hists->stats.total_period);
percent = (entry->period * 100.0) / self->hists->stats.total_period; percent = (entry->period * 100.0) / self->hists->stats.total_period;
color = HE_COLORSET_SELECTED; ui_browser__set_percent_color(&self->b, percent, current_entry);
if (!current_entry) {
if (percent >= MIN_RED)
color = HE_COLORSET_TOP;
else if (percent >= MIN_GREEN)
color = HE_COLORSET_MEDIUM;
else
color = HE_COLORSET_NORMAL;
}
ui_browser__set_color(&self->b, color);
ui_browser__gotorc(&self->b, row, 0); ui_browser__gotorc(&self->b, row, 0);
if (symbol_conf.use_callchain) { if (symbol_conf.use_callchain) {
slsmg_printf("%c ", folded_sign); slsmg_printf("%c ", folded_sign);
width -= 2; width -= 2;
} }
/* The scroll bar isn't being used */
if (!self->b.navkeypressed)
width += 1;
slsmg_write_nstring(s, width); slsmg_write_nstring(s, width);
++row; ++row;
++printed; ++printed;
...@@ -787,6 +782,7 @@ static struct hist_browser *hist_browser__new(struct hists *hists) ...@@ -787,6 +782,7 @@ static struct hist_browser *hist_browser__new(struct hists *hists)
self->hists = hists; self->hists = hists;
self->b.refresh = hist_browser__refresh; self->b.refresh = hist_browser__refresh;
self->b.seek = ui_browser__hists_seek; self->b.seek = ui_browser__hists_seek;
self->b.use_navkeypressed = true,
self->has_symbols = sort_sym.list.next != NULL; self->has_symbols = sort_sym.list.next != NULL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment