diff options
Diffstat (limited to 'tools/perf/builtin-annotate.c')
| -rw-r--r-- | tools/perf/builtin-annotate.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c index 1478dc64bf15..6d5604d8df95 100644 --- a/tools/perf/builtin-annotate.c +++ b/tools/perf/builtin-annotate.c | |||
| @@ -28,7 +28,7 @@ | |||
| 28 | 28 | ||
| 29 | static char const *input_name = "perf.data"; | 29 | static char const *input_name = "perf.data"; |
| 30 | 30 | ||
| 31 | static bool force; | 31 | static bool force, use_tui, use_stdio; |
| 32 | 32 | ||
| 33 | static bool full_paths; | 33 | static bool full_paths; |
| 34 | 34 | ||
| @@ -321,7 +321,7 @@ static int hist_entry__tty_annotate(struct hist_entry *he) | |||
| 321 | 321 | ||
| 322 | static void hists__find_annotations(struct hists *self) | 322 | static void hists__find_annotations(struct hists *self) |
| 323 | { | 323 | { |
| 324 | struct rb_node *first = rb_first(&self->entries), *nd = first; | 324 | struct rb_node *nd = rb_first(&self->entries), *next; |
| 325 | int key = KEY_RIGHT; | 325 | int key = KEY_RIGHT; |
| 326 | 326 | ||
| 327 | while (nd) { | 327 | while (nd) { |
| @@ -343,20 +343,19 @@ find_next: | |||
| 343 | 343 | ||
| 344 | if (use_browser > 0) { | 344 | if (use_browser > 0) { |
| 345 | key = hist_entry__tui_annotate(he); | 345 | key = hist_entry__tui_annotate(he); |
| 346 | if (is_exit_key(key)) | ||
| 347 | break; | ||
| 348 | switch (key) { | 346 | switch (key) { |
| 349 | case KEY_RIGHT: | 347 | case KEY_RIGHT: |
| 350 | case '\t': | 348 | next = rb_next(nd); |
| 351 | nd = rb_next(nd); | ||
| 352 | break; | 349 | break; |
| 353 | case KEY_LEFT: | 350 | case KEY_LEFT: |
| 354 | if (nd == first) | 351 | next = rb_prev(nd); |
| 355 | continue; | ||
| 356 | nd = rb_prev(nd); | ||
| 357 | default: | ||
| 358 | break; | 352 | break; |
| 353 | default: | ||
| 354 | return; | ||
| 359 | } | 355 | } |
| 356 | |||
| 357 | if (next != NULL) | ||
| 358 | nd = next; | ||
| 360 | } else { | 359 | } else { |
| 361 | hist_entry__tty_annotate(he); | 360 | hist_entry__tty_annotate(he); |
| 362 | nd = rb_next(nd); | 361 | nd = rb_next(nd); |
| @@ -428,6 +427,8 @@ static const struct option options[] = { | |||
| 428 | "be more verbose (show symbol address, etc)"), | 427 | "be more verbose (show symbol address, etc)"), |
| 429 | OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace, | 428 | OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace, |
| 430 | "dump raw trace in ASCII"), | 429 | "dump raw trace in ASCII"), |
| 430 | OPT_BOOLEAN(0, "tui", &use_tui, "Use the TUI interface"), | ||
| 431 | OPT_BOOLEAN(0, "stdio", &use_stdio, "Use the stdio interface"), | ||
| 431 | OPT_STRING('k', "vmlinux", &symbol_conf.vmlinux_name, | 432 | OPT_STRING('k', "vmlinux", &symbol_conf.vmlinux_name, |
| 432 | "file", "vmlinux pathname"), | 433 | "file", "vmlinux pathname"), |
| 433 | OPT_BOOLEAN('m', "modules", &symbol_conf.use_modules, | 434 | OPT_BOOLEAN('m', "modules", &symbol_conf.use_modules, |
| @@ -443,6 +444,11 @@ int cmd_annotate(int argc, const char **argv, const char *prefix __used) | |||
| 443 | { | 444 | { |
| 444 | argc = parse_options(argc, argv, options, annotate_usage, 0); | 445 | argc = parse_options(argc, argv, options, annotate_usage, 0); |
| 445 | 446 | ||
| 447 | if (use_stdio) | ||
| 448 | use_browser = 0; | ||
| 449 | else if (use_tui) | ||
| 450 | use_browser = 1; | ||
| 451 | |||
| 446 | setup_browser(); | 452 | setup_browser(); |
| 447 | 453 | ||
| 448 | symbol_conf.priv_size = sizeof(struct sym_priv); | 454 | symbol_conf.priv_size = sizeof(struct sym_priv); |
