From dcec3053ec14bf34e2d61d1c1b9e39f929fd31b3 Mon Sep 17 00:00:00 2001 From: Krzysztof Karas Date: Mon, 30 Nov 2020 13:20:37 +0100 Subject: [PATCH] spkd_top: add pollers details window. Adds empty pop-up window for selected poller. Windows will be populated with data in the future patches. Signed-off-by: Krzysztof Karas Change-Id: If5485211248290584a8560a0f248efc5713315c7 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5409 Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Tomasz Zawadzki Reviewed-by: Maciej Szwed --- app/spdk_top/spdk_top.c | 61 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/app/spdk_top/spdk_top.c b/app/spdk_top/spdk_top.c index cf1313930..930433bd8 100644 --- a/app/spdk_top/spdk_top.c +++ b/app/spdk_top/spdk_top.c @@ -91,6 +91,10 @@ #define THREAD_WIN_HEIGHT 9 #define THREAD_WIN_HOR_POS 75 #define THREAD_WIN_FIRST_COL 2 +#define POLLER_WIN_HEIGHT 7 +#define POLLER_WIN_WIDTH 60 +#define POLLER_WIN_FIRST_COL 2 +#define POLLER_WIN_HOR_POS 59 enum tabs { THREADS_TAB, @@ -262,6 +266,7 @@ struct rpc_cores_stats { struct rpc_threads_stats g_threads_stats; struct rpc_pollers_stats g_pollers_stats; struct rpc_cores_stats g_cores_stats; +struct rpc_poller_info g_pollers_history[RPC_MAX_POLLERS]; struct rpc_thread_info g_thread_history[RPC_MAX_THREADS]; static void @@ -1940,6 +1945,60 @@ show_thread(uint8_t current_page) free_data(); } +static void +show_poller(uint8_t current_page) +{ + PANEL *poller_panel; + WINDOW *poller_win; + uint64_t poller_counter = 0, count = 0; + uint64_t poller_number = current_page * g_max_data_rows + g_selected_row; + struct rpc_poller_info *pollers[RPC_MAX_POLLERS]; + bool stop_loop = false; + int c; + + get_data(); + + prepare_poller_data(current_page, pollers, &count, current_page); + + poller_win = newwin(POLLER_WIN_HEIGHT, POLLER_WIN_WIDTH, + (g_max_row - poller_counter) / 2, (g_max_col - POLLER_WIN_HOR_POS) / 2); + + keypad(poller_win, TRUE); + poller_panel = new_panel(poller_win); + + top_panel(poller_panel); + update_panels(); + doupdate(); + + box(poller_win, 0, 0); + + print_in_middle(poller_win, 1, 0, POLLER_WIN_WIDTH, pollers[poller_number]->name, COLOR_PAIR(3)); + mvwhline(poller_win, 2, 1, ACS_HLINE, POLLER_WIN_WIDTH - 2); + mvwaddch(poller_win, 2, POLLER_WIN_WIDTH, ACS_RTEE); + mvwprintw(poller_win, 3, 1, "Type Thread Run count Period"); + mvwhline(poller_win, 4, 1, ACS_HLINE, POLLER_WIN_WIDTH - 2); + + refresh(); + wrefresh(poller_win); + + while (!stop_loop) { + c = wgetch(poller_win); + switch (c) { + case 10: /* ENTER */ + case 27: /* ESC */ + stop_loop = true; + break; + default: + break; + } + } + + del_panel(poller_panel); + delwin(poller_win); + + free_data(); +} + static void show_stats(void) { @@ -2036,6 +2095,8 @@ show_stats(void) case 10: /* Enter */ if (active_tab == THREADS_TAB) { show_thread(current_page); + } else if (active_tab == POLLERS_TAB) { + show_poller(current_page); } break; default: