diff options
| author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2010-05-11 17:01:23 -0400 |
|---|---|---|
| committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2010-05-11 17:01:23 -0400 |
| commit | 3798ed7bc7ade26d3f59506cd06288615dfc7585 (patch) | |
| tree | a7df9d321398edf6994dbfc10134add08f2621b3 | |
| parent | d11c7addfe0fa501cb54c824c0fac3481d527433 (diff) | |
perf ui: Add ui_helpline methods
Initially this was just to be able to have a printf like method to
prepare the formatted string and then pass to newtPushHelpLine, but as
we already have for ui_progress, etc, its a step in identifying a
restricted, highlevel set of widgets we can then have implementations
for multiple widget sets (GTK, etc).
Cc: Frédéric Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Tom Zanussi <tzanussi@gmail.com>
LKML-Reference: <new-submission>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
| -rw-r--r-- | tools/perf/util/newt.c | 69 |
1 files changed, 50 insertions, 19 deletions
diff --git a/tools/perf/util/newt.c b/tools/perf/util/newt.c index 638b519e72b8..daa86efffce6 100644 --- a/tools/perf/util/newt.c +++ b/tools/perf/util/newt.c | |||
| @@ -57,6 +57,43 @@ void ui_progress__delete(struct ui_progress *self) | |||
| 57 | free(self); | 57 | free(self); |
| 58 | } | 58 | } |
| 59 | 59 | ||
| 60 | static void ui_helpline__pop(void) | ||
| 61 | { | ||
| 62 | newtPopHelpLine(); | ||
| 63 | } | ||
| 64 | |||
| 65 | static void ui_helpline__push(const char *msg) | ||
| 66 | { | ||
| 67 | newtPushHelpLine(msg); | ||
| 68 | } | ||
| 69 | |||
| 70 | static void ui_helpline__vpush(const char *fmt, va_list ap) | ||
| 71 | { | ||
| 72 | char *s; | ||
| 73 | |||
| 74 | if (vasprintf(&s, fmt, ap) < 0) | ||
| 75 | vfprintf(stderr, fmt, ap); | ||
| 76 | else { | ||
| 77 | ui_helpline__push(s); | ||
| 78 | free(s); | ||
| 79 | } | ||
| 80 | } | ||
| 81 | |||
| 82 | static void ui_helpline__fpush(const char *fmt, ...) | ||
| 83 | { | ||
| 84 | va_list ap; | ||
| 85 | |||
| 86 | va_start(ap, fmt); | ||
| 87 | ui_helpline__vpush(fmt, ap); | ||
| 88 | va_end(ap); | ||
| 89 | } | ||
| 90 | |||
| 91 | static void ui_helpline__puts(const char *msg) | ||
| 92 | { | ||
| 93 | ui_helpline__pop(); | ||
| 94 | ui_helpline__push(msg); | ||
| 95 | } | ||
| 96 | |||
| 60 | static char browser__last_msg[1024]; | 97 | static char browser__last_msg[1024]; |
| 61 | 98 | ||
| 62 | int browser__show_help(const char *format, va_list ap) | 99 | int browser__show_help(const char *format, va_list ap) |
| @@ -69,8 +106,7 @@ int browser__show_help(const char *format, va_list ap) | |||
| 69 | backlog += ret; | 106 | backlog += ret; |
| 70 | 107 | ||
| 71 | if (browser__last_msg[backlog - 1] == '\n') { | 108 | if (browser__last_msg[backlog - 1] == '\n') { |
| 72 | newtPopHelpLine(); | 109 | ui_helpline__puts(browser__last_msg); |
| 73 | newtPushHelpLine(browser__last_msg); | ||
| 74 | newtRefresh(); | 110 | newtRefresh(); |
| 75 | backlog = 0; | 111 | backlog = 0; |
| 76 | } | 112 | } |
| @@ -340,7 +376,7 @@ static void map_symbol__annotate_browser(const struct map_symbol *self, | |||
| 340 | if (fp == NULL) | 376 | if (fp == NULL) |
| 341 | goto out_free_str; | 377 | goto out_free_str; |
| 342 | 378 | ||
| 343 | newtPushHelpLine("Press ESC to exit"); | 379 | ui_helpline__push("Press ESC to exit"); |
| 344 | newtGetScreenSize(&cols, &rows); | 380 | newtGetScreenSize(&cols, &rows); |
| 345 | tree = newtListbox(0, 0, rows - 5, NEWT_FLAG_SCROLL); | 381 | tree = newtListbox(0, 0, rows - 5, NEWT_FLAG_SCROLL); |
| 346 | 382 | ||
| @@ -370,7 +406,7 @@ static void map_symbol__annotate_browser(const struct map_symbol *self, | |||
| 370 | newtFormRun(form, &es); | 406 | newtFormRun(form, &es); |
| 371 | newtFormDestroy(form); | 407 | newtFormDestroy(form); |
| 372 | newtPopWindow(); | 408 | newtPopWindow(); |
| 373 | newtPopHelpLine(); | 409 | ui_helpline__pop(); |
| 374 | out_free_str: | 410 | out_free_str: |
| 375 | free(str); | 411 | free(str); |
| 376 | } | 412 | } |
| @@ -539,7 +575,7 @@ int hists__browse(struct hists *self, const char *helpline, const char *input_na | |||
| 539 | if (browser == NULL) | 575 | if (browser == NULL) |
| 540 | return -1; | 576 | return -1; |
| 541 | 577 | ||
| 542 | newtPushHelpLine(helpline); | 578 | ui_helpline__push(helpline); |
| 543 | 579 | ||
| 544 | hist_browser__title(msg, sizeof(msg), input_name, | 580 | hist_browser__title(msg, sizeof(msg), input_name, |
| 545 | dso_filter, thread_filter); | 581 | dso_filter, thread_filter); |
| @@ -602,8 +638,7 @@ int hists__browse(struct hists *self, const char *helpline, const char *input_na | |||
| 602 | do_annotate: | 638 | do_annotate: |
| 603 | if (choice == annotate) { | 639 | if (choice == annotate) { |
| 604 | if (browser->selection->map->dso->origin == DSO__ORIG_KERNEL) { | 640 | if (browser->selection->map->dso->origin == DSO__ORIG_KERNEL) { |
| 605 | newtPopHelpLine(); | 641 | ui_helpline__puts("No vmlinux file found, can't " |
| 606 | newtPushHelpLine("No vmlinux file found, can't " | ||
| 607 | "annotate with just a " | 642 | "annotate with just a " |
| 608 | "kallsyms file"); | 643 | "kallsyms file"); |
| 609 | continue; | 644 | continue; |
| @@ -611,13 +646,11 @@ do_annotate: | |||
| 611 | map_symbol__annotate_browser(browser->selection, input_name); | 646 | map_symbol__annotate_browser(browser->selection, input_name); |
| 612 | } else if (choice == zoom_dso) { | 647 | } else if (choice == zoom_dso) { |
| 613 | if (dso_filter) { | 648 | if (dso_filter) { |
| 614 | newtPopHelpLine(); | 649 | ui_helpline__pop(); |
| 615 | dso_filter = NULL; | 650 | dso_filter = NULL; |
| 616 | } else { | 651 | } else { |
| 617 | snprintf(msg, sizeof(msg), | 652 | ui_helpline__fpush("To zoom out press -> + \"Zoom out of %s DSO\"", |
| 618 | "To zoom out press -> + \"Zoom out of %s DSO\"", | 653 | dso->kernel ? "the Kernel" : dso->short_name); |
| 619 | dso->kernel ? "the Kernel" : dso->short_name); | ||
| 620 | newtPushHelpLine(msg); | ||
| 621 | dso_filter = dso; | 654 | dso_filter = dso; |
| 622 | } | 655 | } |
| 623 | hists__filter_by_dso(self, dso_filter); | 656 | hists__filter_by_dso(self, dso_filter); |
| @@ -627,14 +660,12 @@ do_annotate: | |||
| 627 | goto out; | 660 | goto out; |
| 628 | } else if (choice == zoom_thread) { | 661 | } else if (choice == zoom_thread) { |
| 629 | if (thread_filter) { | 662 | if (thread_filter) { |
| 630 | newtPopHelpLine(); | 663 | ui_helpline__pop(); |
| 631 | thread_filter = NULL; | 664 | thread_filter = NULL; |
| 632 | } else { | 665 | } else { |
| 633 | snprintf(msg, sizeof(msg), | 666 | ui_helpline__fpush("To zoom out press -> + \"Zoom out of %s(%d) thread\"", |
| 634 | "To zoom out press -> + \"Zoom out of %s(%d) thread\"", | 667 | thread->comm_set ? thread->comm : "", |
| 635 | (thread->comm_set ? thread->comm : ""), | 668 | thread->pid); |
| 636 | thread->pid); | ||
| 637 | newtPushHelpLine(msg); | ||
| 638 | thread_filter = thread; | 669 | thread_filter = thread; |
| 639 | } | 670 | } |
| 640 | hists__filter_by_thread(self, thread_filter); | 671 | hists__filter_by_thread(self, thread_filter); |
| @@ -658,7 +689,7 @@ void setup_browser(void) | |||
| 658 | use_browser = true; | 689 | use_browser = true; |
| 659 | newtInit(); | 690 | newtInit(); |
| 660 | newtCls(); | 691 | newtCls(); |
| 661 | newtPushHelpLine(" "); | 692 | ui_helpline__puts(" "); |
| 662 | } | 693 | } |
| 663 | 694 | ||
| 664 | void exit_browser(bool wait_for_ok) | 695 | void exit_browser(bool wait_for_ok) |
