aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/util')
-rw-r--r--tools/perf/util/newt.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/tools/perf/util/newt.c b/tools/perf/util/newt.c
index 59a63e4405fc..2001d26a5579 100644
--- a/tools/perf/util/newt.c
+++ b/tools/perf/util/newt.c
@@ -167,6 +167,48 @@ out_destroy_form:
167 return rc; 167 return rc;
168} 168}
169 169
170static int ui__help_window(const char *text)
171{
172 struct newtExitStruct es;
173 newtComponent tb, form = newt_form__new();
174 int rc = -1;
175 int max_len = 0, nr_lines = 0;
176 const char *t;
177
178 if (form == NULL)
179 return -1;
180
181 t = text;
182 while (1) {
183 const char *sep = strchr(t, '\n');
184 int len;
185
186 if (sep == NULL)
187 sep = strchr(t, '\0');
188 len = sep - t;
189 if (max_len < len)
190 max_len = len;
191 ++nr_lines;
192 if (*sep == '\0')
193 break;
194 t = sep + 1;
195 }
196
197 tb = newtTextbox(0, 0, max_len, nr_lines, 0);
198 if (tb == NULL)
199 goto out_destroy_form;
200
201 newtTextboxSetText(tb, text);
202 newtFormAddComponent(form, tb);
203 newtCenteredWindow(max_len, nr_lines, NULL);
204 newtFormRun(form, &es);
205 newtPopWindow();
206 rc = 0;
207out_destroy_form:
208 newtFormDestroy(form);
209 return rc;
210}
211
170static bool dialog_yesno(const char *msg) 212static bool dialog_yesno(const char *msg)
171{ 213{
172 /* newtWinChoice should really be accepting const char pointers... */ 214 /* newtWinChoice should really be accepting const char pointers... */
@@ -756,6 +798,10 @@ static int hist_browser__populate(struct hist_browser *self, struct hists *hists
756 newtFormAddHotKey(self->form, 'd'); 798 newtFormAddHotKey(self->form, 'd');
757 newtFormAddHotKey(self->form, 'T'); 799 newtFormAddHotKey(self->form, 'T');
758 newtFormAddHotKey(self->form, 't'); 800 newtFormAddHotKey(self->form, 't');
801 newtFormAddHotKey(self->form, '?');
802 newtFormAddHotKey(self->form, 'H');
803 newtFormAddHotKey(self->form, 'h');
804 newtFormAddHotKey(self->form, NEWT_KEY_F1);
759 newtFormAddHotKey(self->form, NEWT_KEY_RIGHT); 805 newtFormAddHotKey(self->form, NEWT_KEY_RIGHT);
760 newtFormAddComponents(self->form, self->tree, NULL); 806 newtFormAddComponents(self->form, self->tree, NULL);
761 self->selection = newt__symbol_tree_get_current(self->tree); 807 self->selection = newt__symbol_tree_get_current(self->tree);
@@ -842,6 +888,9 @@ int hists__browse(struct hists *self, const char *helpline, const char *input_na
842 dso = browser->selection->map ? browser->selection->map->dso : NULL; 888 dso = browser->selection->map ? browser->selection->map->dso : NULL;
843 889
844 if (es.reason == NEWT_EXIT_HOTKEY) { 890 if (es.reason == NEWT_EXIT_HOTKEY) {
891 if (es.u.key == NEWT_KEY_F1)
892 goto do_help;
893
845 switch (toupper(es.u.key)) { 894 switch (toupper(es.u.key)) {
846 case 'A': 895 case 'A':
847 goto do_annotate; 896 goto do_annotate;
@@ -849,6 +898,17 @@ int hists__browse(struct hists *self, const char *helpline, const char *input_na
849 goto zoom_dso; 898 goto zoom_dso;
850 case 'T': 899 case 'T':
851 goto zoom_thread; 900 goto zoom_thread;
901 case 'H':
902 case '?':
903do_help:
904 ui__help_window("-> Zoom into DSO/Threads & Annotate current symbol\n"
905 "<- Zoom out\n"
906 "a Annotate current symbol\n"
907 "h/?/F1 Show this window\n"
908 "d Zoom into current DSO\n"
909 "t Zoom into current Thread\n"
910 "q/CTRL+C Exit browser");
911 continue;
852 default:; 912 default:;
853 } 913 }
854 if (toupper(es.u.key) == 'Q' || 914 if (toupper(es.u.key) == 'Q' ||