Skip to contentSkip to conversation

perf ui browser: Optional horizontal scrolling key binding

tip:perf/core tip-bot for Arnaldo Carvalho de Melo 1 participant 1 message Oct 6, 2015 perf events

lore
Share & tools
lore
#0 lore raw
Commit-ID:  faae6f690eecb82b6d9d9f2112f5b51ac37d4acb
Gitweb:     http://git.kernel.org/tip/faae6f690eecb82b6d9d9f2112f5b51ac37d4acb
Author:     Arnaldo Carvalho de Melo <[email protected]>
AuthorDate: Tue, 11 Aug 2015 17:14:40 -0300
Committer:  Arnaldo Carvalho de Melo <[email protected]>
CommitDate: Mon, 5 Oct 2015 17:59:49 -0300

perf ui browser: Optional horizontal scrolling key binding

If the classes derived from ui_browser want to do some sort of horizontal scrolling, they have just to set ui_browser->columns to the number of columns available.

Those columns can be the number of characters on the screen, if what is desired is to scroll character by character, or the number of columns in a spreadsheet like table.

This is what the hist_browser will do, skipping ui_browser->horiz_scroll columns when rendering each of its lines.

Cc Adrian Hunter <[email protected]>
Cc Borislav Petkov <[email protected]>
Cc David Ahern <[email protected]>
Cc Frederic Weisbecker <[email protected]>
Cc Jiri Olsa <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Stephane Eranian <[email protected]>
---
 tools/perf/ui/browser.c | 14 ++++++++++++++
 tools/perf/ui/browser.h |  2 +-
 2 files changed, 15 insertions(+), 1 deletion(-)
tools/perf/ui/browser.c +14 -0
index c6c7e51..e9703c0 100644
@@ -393,6 +393,7 @@ int ui_browser__run(struct ui_browser *browser, int delay_secs)
 
 		if (browser->use_navkeypressed && !browser->navkeypressed) {
 			if (key == K_DOWN || key == K_UP ||
+			    (browser->columns && (key == K_LEFT || key == K_RIGHT)) ||
 			    key == K_PGDN || key == K_PGUP ||
 			    key == K_HOME || key == K_END ||
 			    key == ' ') {
@@ -421,6 +422,18 @@ int ui_browser__run(struct ui_browser *browser, int delay_secs)
 				browser->seek(browser, -1, SEEK_CUR);
 			}
 			break;
+		case K_RIGHT:
+			if (!browser->columns)
+				goto out;
+			if (browser->horiz_scroll < browser->columns - 1)
+				++browser->horiz_scroll;
+			break;
+		case K_LEFT:
+			if (!browser->columns)
+				goto out;
+			if (browser->horiz_scroll != 0)
+				--browser->horiz_scroll;
+			break;
 		case K_PGDN:
 		case ' ':
 			if (browser->top_idx + browser->rows > browser->nr_entries - 1)
@@ -459,6 +472,7 @@ int ui_browser__run(struct ui_browser *browser, int delay_secs)
 			browser->seek(browser, -offset, SEEK_END);
 			break;
 		default:
+		out:
 			return key;
 		}
 	}
tools/perf/ui/browser.h +1 -1
index f3cef56..01781de 100644
@@ -14,7 +14,7 @@
 struct ui_browser {
 	u64	      index, top_idx;
 	void	      *top, *entries;
-	u16	      y, x, width, height, rows;
+	u16	      y, x, width, height, rows, columns, horiz_scroll;
 	int	      current_color;
 	void	      *priv;
 	const char    *title;