Commit 2af48ebf authored by Krzysztof Karas's avatar Krzysztof Karas Committed by Jim Harris
Browse files

spdk_top: move thread window content drawing to a function



Move drawing contents of thread pop-up to a separate function.
This will be used in the next patch, where drawing will be moved
inside a while loop to refresh changing values.

Change-Id: I1c18dbe09d828da60357d9ce195226bc09033597
Signed-off-by: default avatarKrzysztof Karas <krzysztof.karas@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/10760


Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 2e2102b0
Loading
Loading
Loading
Loading
+58 −49
Original line number Diff line number Diff line
@@ -2206,51 +2206,14 @@ print_bottom_error_message(char *msg)
}

static void
display_thread(uint64_t thread_id, uint8_t current_page)
draw_thread_win_content(WINDOW *thread_win, struct rpc_thread_info *thread_info)
{
	PANEL *thread_panel;
	WINDOW *thread_win;
	struct rpc_thread_info thread_info;
	uint64_t pollers_count, current_row, i, time;
	int c;
	bool stop_loop = false;
	uint64_t current_row, i, time;
	char idle_time[MAX_TIME_STR_LEN], busy_time[MAX_TIME_STR_LEN];

	memset(&thread_info, 0, sizeof(thread_info));
	pthread_mutex_lock(&g_thread_lock);

	/* Use local copy of thread_info */
	for (i = 0; i < g_last_threads_count; i++) {
		if (g_threads_info[i].id == thread_id) {
			memcpy(&thread_info, &g_threads_info[i], sizeof(struct rpc_thread_info));
			break;
		}
	}

	/* We did not find this thread, so we cannot show its information. */
	if (i == g_last_threads_count) {
		print_bottom_error_message("This thread does not exist.");
		pthread_mutex_unlock(&g_thread_lock);
		return;
	}

	pollers_count = thread_info.active_pollers_count +
			thread_info.timed_pollers_count +
			thread_info.paused_pollers_count;

	thread_win = newwin(pollers_count + THREAD_WIN_HEIGHT, THREAD_WIN_WIDTH,
			    get_position_for_window(THREAD_WIN_HEIGHT + pollers_count, g_max_row),
			    get_position_for_window(THREAD_WIN_WIDTH, g_max_col));
	keypad(thread_win, TRUE);
	thread_panel = new_panel(thread_win);

	top_panel(thread_panel);
	update_panels();
	doupdate();

	box(thread_win, 0, 0);

	print_in_middle(thread_win, 1, 0, THREAD_WIN_WIDTH, thread_info.name,
	print_in_middle(thread_win, 1, 0, THREAD_WIN_WIDTH, thread_info->name,
			COLOR_PAIR(3));
	mvwhline(thread_win, 2, 1, ACS_HLINE, THREAD_WIN_WIDTH - 2);
	mvwaddch(thread_win, 2, THREAD_WIN_WIDTH, ACS_RTEE);
@@ -2258,28 +2221,28 @@ display_thread(uint64_t thread_id, uint8_t current_page)
	print_left(thread_win, 3, THREAD_WIN_FIRST_COL, THREAD_WIN_WIDTH,
		   "Core:                Idle [us]:            Busy [us]:", COLOR_PAIR(5));
	mvwprintw(thread_win, 3, THREAD_WIN_FIRST_COL + 6, "%d",
		  thread_info.core_num);
		  thread_info->core_num);

	if (g_interval_data) {
		get_time_str(thread_info.idle - thread_info.last_idle, idle_time);
		get_time_str(thread_info->idle - thread_info->last_idle, idle_time);
		mvwprintw(thread_win, 3, THREAD_WIN_FIRST_COL + 32, "%s", idle_time);
		get_time_str(thread_info.busy - thread_info.last_busy, busy_time);
		get_time_str(thread_info->busy - thread_info->last_busy, busy_time);
		mvwprintw(thread_win, 3, THREAD_WIN_FIRST_COL + 54, "%s", busy_time);
	} else {
		get_time_str(thread_info.idle, idle_time);
		get_time_str(thread_info->idle, idle_time);
		mvwprintw(thread_win, 3, THREAD_WIN_FIRST_COL + 32, "%s", idle_time);
		get_time_str(thread_info.busy, busy_time);
		get_time_str(thread_info->busy, busy_time);
		mvwprintw(thread_win, 3, THREAD_WIN_FIRST_COL + 54, "%s", busy_time);
	}

	print_left(thread_win, 4, THREAD_WIN_FIRST_COL, THREAD_WIN_WIDTH,
		   "Active pollers:      Timed pollers:        Paused pollers:", COLOR_PAIR(5));
	mvwprintw(thread_win, 4, THREAD_WIN_FIRST_COL + 17, "%" PRIu64,
		  thread_info.active_pollers_count);
		  thread_info->active_pollers_count);
	mvwprintw(thread_win, 4, THREAD_WIN_FIRST_COL + 36, "%" PRIu64,
		  thread_info.timed_pollers_count);
		  thread_info->timed_pollers_count);
	mvwprintw(thread_win, 4, THREAD_WIN_FIRST_COL + 59, "%" PRIu64,
		  thread_info.paused_pollers_count);
		  thread_info->paused_pollers_count);

	mvwhline(thread_win, 5, 1, ACS_HLINE, THREAD_WIN_WIDTH - 2);

@@ -2291,7 +2254,7 @@ display_thread(uint64_t thread_id, uint8_t current_page)
	current_row = 8;

	for (i = 0; i < g_last_pollers_count; i++) {
		if (g_pollers_info[i].thread_id == thread_info.id) {
		if (g_pollers_info[i].thread_id == thread_info->id) {
			mvwprintw(thread_win, current_row, THREAD_WIN_FIRST_COL, "%s", g_pollers_info[i].name);
			if (g_pollers_info[i].type == SPDK_ACTIVE_POLLER) {
				mvwprintw(thread_win, current_row, THREAD_WIN_FIRST_COL + 33, "Active");
@@ -2312,8 +2275,54 @@ display_thread(uint64_t thread_id, uint8_t current_page)

	refresh();
	wrefresh(thread_win);
}

static void
display_thread(uint64_t thread_id, uint8_t current_page)
{
	PANEL *thread_panel;
	WINDOW *thread_win;
	struct rpc_thread_info thread_info;
	uint64_t pollers_count, i;
	int c;
	bool stop_loop = false;

	memset(&thread_info, 0, sizeof(thread_info));
	pthread_mutex_lock(&g_thread_lock);

	/* Use local copy of thread_info */
	for (i = 0; i < g_last_threads_count; i++) {
		if (g_threads_info[i].id == thread_id) {
			memcpy(&thread_info, &g_threads_info[i], sizeof(struct rpc_thread_info));
			break;
		}
	}

	/* We did not find this thread, so we cannot show its information. */
	if (i == g_last_threads_count) {
		print_bottom_error_message("This thread does not exist.");
		pthread_mutex_unlock(&g_thread_lock);
		return;
	}

	pollers_count = thread_info.active_pollers_count +
			thread_info.timed_pollers_count +
			thread_info.paused_pollers_count;

	thread_win = newwin(pollers_count + THREAD_WIN_HEIGHT, THREAD_WIN_WIDTH,
			    get_position_for_window(THREAD_WIN_HEIGHT + pollers_count, g_max_row),
			    get_position_for_window(THREAD_WIN_WIDTH, g_max_col));
	keypad(thread_win, TRUE);
	thread_panel = new_panel(thread_win);

	top_panel(thread_panel);
	update_panels();
	doupdate();

	draw_thread_win_content(thread_win, &thread_info);

	pthread_mutex_unlock(&g_thread_lock);

	while (!stop_loop) {
		c = wgetch(thread_win);