X-Git-Url: https://git.lttng.org/?p=lttngtop.git;a=blobdiff_plain;f=src%2Fcursesdisplay.c;h=02764dd19976996f13fb1f11a580531aa3285b60;hp=2d79d65f99cc0ae53838f0be551641de842a1b99;hb=33572a17ebf19098e1f1d3f1088e000e276eec60;hpb=41ff0645d8cee0c0280edefeff7a161b96ecbf03 diff --git a/src/cursesdisplay.c b/src/cursesdisplay.c index 2d79d65..02764dd 100644 --- a/src/cursesdisplay.c +++ b/src/cursesdisplay.c @@ -74,11 +74,15 @@ void reset_ncurses() { curs_set(1); endwin(); - exit(0); + quit = 1; + sem_post(&pause_sem); + sem_post(&timer); + sem_post(&goodtodisplay); } static void handle_sigterm(int signal) { + pthread_cancel(keyboard_thread); reset_ncurses(); } @@ -119,6 +123,7 @@ void init_screen() define_key("\033[17;2~", KEY_F(18)); } signal(SIGTERM, handle_sigterm); + signal(SIGINT, handle_sigterm); mousemask(BUTTON1_CLICKED, NULL); refresh(); } @@ -302,23 +307,6 @@ void basic_header() wrefresh(header); } -struct tm format_timestamp(uint64_t timestamp) -{ - struct tm tm; - uint64_t ts_sec = 0, ts_nsec; - time_t time_s; - - ts_nsec = timestamp; - ts_sec += ts_nsec / NSEC_PER_SEC; - ts_nsec = ts_nsec % NSEC_PER_SEC; - - time_s = (time_t) ts_sec; - - localtime_r(&time_s, &tm); - - return tm; -} - static void scale_unit(uint64_t bytes, char *ret) { if (bytes >= 1000000000) @@ -779,8 +767,8 @@ void update_perf() while (g_hash_table_iter_next (&iter, &key, (gpointer) &perfn1)) { if (perfn1->visible) { if (perfn1->sort) { + /* pref_current_sort = i; */ wattron(center, A_UNDERLINE); - /* FIXME : sort in the opposite direction */ } /* + 5 to strip the "perf_" prefix */ mvwprintw(center, 1, perf_row, "%s", @@ -1443,19 +1431,24 @@ void *handle_keyboard(void *p) update_preference_panel(&pref_line_selected, 0, 1); break; case '>': - if (!pref_panel_visible) { + /* perf uses a hashtable, it is ordered backward */ + if (current_view == perf) { + pref_current_sort--; + } else if (!pref_panel_visible) { pref_current_sort++; - update_sort(&pref_current_sort); - update_current_view(); } + update_sort(&pref_current_sort); + update_current_view(); break; case '<': - if (!pref_panel_visible) { - if (pref_current_sort > 0) - pref_current_sort--; - update_sort(&pref_current_sort); - update_current_view(); + /* perf uses a hashtable, it is ordered backward */ + if (current_view == perf) { + pref_current_sort++; + } else if (!pref_panel_visible) { + pref_current_sort--; } + update_sort(&pref_current_sort); + update_current_view(); break; case 13: /* FIXME : KEY_ENTER ?? */ @@ -1468,6 +1461,7 @@ void *handle_keyboard(void *p) current_view = previous_view; previous_view = process_details; } + selected_line = 0; update_current_view(); break; @@ -1502,6 +1496,8 @@ void *handle_keyboard(void *p) case KEY_F(10): case 'q': reset_ncurses(); + /* exit keyboard thread */ + pthread_exit(0); break; case 't': toggle_threads *= -1;