Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 350010
b: refs/heads/master
c: 11859e8
h: refs/heads/master
v: v3
  • Loading branch information
Arnaldo Carvalho de Melo committed Jan 31, 2013
1 parent e8b8794 commit 417d307
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 24 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 152fefa921535665f95840c08062844ab2f5593e
refs/heads/master: 11859e821761e9738c4d8a0e7d6ca1cc2e0d37e8
56 changes: 33 additions & 23 deletions trunk/tools/perf/builtin-top.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@
#include <linux/unistd.h>
#include <linux/types.h>

static volatile int done;

static void perf_top__update_print_entries(struct perf_top *top)
{
if (top->print_entries > 9)
Expand Down Expand Up @@ -431,8 +433,10 @@ static int perf_top__key_mapped(struct perf_top *top, int c)
return 0;
}

static void perf_top__handle_keypress(struct perf_top *top, int c)
static bool perf_top__handle_keypress(struct perf_top *top, int c)
{
bool ret = true;

if (!perf_top__key_mapped(top, c)) {
struct pollfd stdin_poll = { .fd = 0, .events = POLLIN };
struct termios tc, save;
Expand All @@ -453,7 +457,7 @@ static void perf_top__handle_keypress(struct perf_top *top, int c)

tcsetattr(0, TCSAFLUSH, &save);
if (!perf_top__key_mapped(top, c))
return;
return ret;
}

switch (c) {
Expand Down Expand Up @@ -515,7 +519,8 @@ static void perf_top__handle_keypress(struct perf_top *top, int c)
printf("exiting.\n");
if (top->dump_symtab)
perf_session__fprintf_dsos(top->session, stderr);
exit(0);
ret = false;
break;
case 's':
perf_top__prompt_symbol(top, "Enter details symbol");
break;
Expand All @@ -538,6 +543,8 @@ static void perf_top__handle_keypress(struct perf_top *top, int c)
default:
break;
}

return ret;
}

static void perf_top__sort_new_samples(void *arg)
Expand Down Expand Up @@ -579,8 +586,7 @@ static void *display_thread_tui(void *arg)
perf_evlist__tui_browse_hists(top->evlist, help, &hbt,
&top->session->header.env);

exit_browser(0);
exit(0);
done = 1;
return NULL;
}

Expand All @@ -604,7 +610,7 @@ static void *display_thread(void *arg)
/* trash return*/
getc(stdin);

while (1) {
while (!done) {
perf_top__print_sym_table(top);
/*
* Either timeout expired or we got an EINTR due to SIGWINCH,
Expand All @@ -618,15 +624,14 @@ static void *display_thread(void *arg)
continue;
/* Fall trhu */
default:
goto process_hotkey;
c = getc(stdin);
tcsetattr(0, TCSAFLUSH, &save);

if (perf_top__handle_keypress(top, c))
goto repeat;
done = 1;
}
}
process_hotkey:
c = getc(stdin);
tcsetattr(0, TCSAFLUSH, &save);

perf_top__handle_keypress(top, c);
goto repeat;

return NULL;
}
Expand Down Expand Up @@ -705,7 +710,7 @@ static void perf_event__process_sample(struct perf_tool *tool,
}

if (!machine) {
pr_err("%u unprocessable samples recorded.\n",
pr_err("%u unprocessable samples recorded.\r",
top->session->stats.nr_unprocessable_samples++);
return;
}
Expand Down Expand Up @@ -868,7 +873,7 @@ static void perf_top__mmap_read(struct perf_top *top)
perf_top__mmap_read_idx(top, i);
}

static void perf_top__start_counters(struct perf_top *top)
static int perf_top__start_counters(struct perf_top *top)
{
char msg[512];
struct perf_evsel *counter;
Expand Down Expand Up @@ -900,11 +905,10 @@ static void perf_top__start_counters(struct perf_top *top)
goto out_err;
}

return;
return 0;

out_err:
exit_browser(0);
exit(0);
return -1;
}

static int perf_top__setup_sample_type(struct perf_top *top)
Expand Down Expand Up @@ -948,7 +952,11 @@ static int __cmd_top(struct perf_top *top)
else
perf_event__synthesize_threads(&top->tool, perf_event__process,
&top->session->machines.host);
perf_top__start_counters(top);

ret = perf_top__start_counters(top);
if (ret)
goto out_delete;

top->session->evlist = top->evlist;
perf_session__set_id_hdr_size(top->session);

Expand All @@ -968,10 +976,11 @@ static int __cmd_top(struct perf_top *top)

perf_top__mmap_read(top);

ret = -1;
if (pthread_create(&thread, NULL, (use_browser > 0 ? display_thread_tui :
display_thread), top)) {
ui__error("Could not create display thread.\n");
exit(-1);
goto out_delete;
}

if (top->realtime_prio) {
Expand All @@ -980,11 +989,11 @@ static int __cmd_top(struct perf_top *top)
param.sched_priority = top->realtime_prio;
if (sched_setscheduler(0, SCHED_FIFO, &param)) {
ui__error("Could not set realtime priority.\n");
exit(-1);
goto out_delete;
}
}

while (1) {
while (!done) {
u64 hits = top->samples;

perf_top__mmap_read(top);
Expand All @@ -993,11 +1002,12 @@ static int __cmd_top(struct perf_top *top)
ret = poll(top->evlist->pollfd, top->evlist->nr_fds, 100);
}

ret = 0;
out_delete:
perf_session__delete(top->session);
top->session = NULL;

return 0;
return ret;
}

static int
Expand Down

0 comments on commit 417d307

Please sign in to comment.