xref: /openbmc/linux/tools/perf/ui/tui/progress.c (revision 25cc4eb4)
17da5c85dSNamhyung Kim #include "../cache.h"
27da5c85dSNamhyung Kim #include "../progress.h"
37da5c85dSNamhyung Kim #include "../libslang.h"
47da5c85dSNamhyung Kim #include "../ui.h"
54779a2e9SArnaldo Carvalho de Melo #include "tui.h"
67da5c85dSNamhyung Kim #include "../browser.h"
77da5c85dSNamhyung Kim 
825cc4eb4SJiri Olsa static void __tui_progress__init(struct ui_progress *p)
925cc4eb4SJiri Olsa {
1025cc4eb4SJiri Olsa 	p->next = p->step = p->total / (SLtt_Screen_Cols - 2) ?: 1;
1125cc4eb4SJiri Olsa }
1225cc4eb4SJiri Olsa 
134d3001fdSArnaldo Carvalho de Melo static void tui_progress__update(struct ui_progress *p)
147da5c85dSNamhyung Kim {
157da5c85dSNamhyung Kim 	int bar, y;
167da5c85dSNamhyung Kim 	/*
177da5c85dSNamhyung Kim 	 * FIXME: We should have a per UI backend way of showing progress,
187da5c85dSNamhyung Kim 	 * stdio will just show a percentage as NN%, etc.
197da5c85dSNamhyung Kim 	 */
207da5c85dSNamhyung Kim 	if (use_browser <= 0)
217da5c85dSNamhyung Kim 		return;
227da5c85dSNamhyung Kim 
234d3001fdSArnaldo Carvalho de Melo 	if (p->total == 0)
247da5c85dSNamhyung Kim 		return;
257da5c85dSNamhyung Kim 
26d53e57d0SPatrick Palka 	ui__refresh_dimensions(false);
277da5c85dSNamhyung Kim 	pthread_mutex_lock(&ui__lock);
287da5c85dSNamhyung Kim 	y = SLtt_Screen_Rows / 2 - 2;
297da5c85dSNamhyung Kim 	SLsmg_set_color(0);
307da5c85dSNamhyung Kim 	SLsmg_draw_box(y, 0, 3, SLtt_Screen_Cols);
317da5c85dSNamhyung Kim 	SLsmg_gotorc(y++, 1);
324d3001fdSArnaldo Carvalho de Melo 	SLsmg_write_string((char *)p->title);
33d53e57d0SPatrick Palka 	SLsmg_fill_region(y, 1, 1, SLtt_Screen_Cols - 2, ' ');
347da5c85dSNamhyung Kim 	SLsmg_set_color(HE_COLORSET_SELECTED);
354d3001fdSArnaldo Carvalho de Melo 	bar = ((SLtt_Screen_Cols - 2) * p->curr) / p->total;
367da5c85dSNamhyung Kim 	SLsmg_fill_region(y, 1, 1, bar, ' ');
377da5c85dSNamhyung Kim 	SLsmg_refresh();
387da5c85dSNamhyung Kim 	pthread_mutex_unlock(&ui__lock);
397da5c85dSNamhyung Kim }
40688f2f5bSNamhyung Kim 
411e259ad4SArnaldo Carvalho de Melo static void tui_progress__finish(void)
421e259ad4SArnaldo Carvalho de Melo {
431e259ad4SArnaldo Carvalho de Melo 	int y;
441e259ad4SArnaldo Carvalho de Melo 
451e259ad4SArnaldo Carvalho de Melo 	if (use_browser <= 0)
461e259ad4SArnaldo Carvalho de Melo 		return;
471e259ad4SArnaldo Carvalho de Melo 
481e259ad4SArnaldo Carvalho de Melo 	ui__refresh_dimensions(false);
491e259ad4SArnaldo Carvalho de Melo 	pthread_mutex_lock(&ui__lock);
501e259ad4SArnaldo Carvalho de Melo 	y = SLtt_Screen_Rows / 2 - 2;
511e259ad4SArnaldo Carvalho de Melo 	SLsmg_set_color(0);
521e259ad4SArnaldo Carvalho de Melo 	SLsmg_fill_region(y, 0, 3, SLtt_Screen_Cols, ' ');
531e259ad4SArnaldo Carvalho de Melo 	SLsmg_refresh();
541e259ad4SArnaldo Carvalho de Melo 	pthread_mutex_unlock(&ui__lock);
551e259ad4SArnaldo Carvalho de Melo }
561e259ad4SArnaldo Carvalho de Melo 
5725cc4eb4SJiri Olsa static struct ui_progress_ops tui_progress__ops = {
5825cc4eb4SJiri Olsa 	.init   = __tui_progress__init,
59688f2f5bSNamhyung Kim 	.update = tui_progress__update,
601e259ad4SArnaldo Carvalho de Melo 	.finish = tui_progress__finish,
61688f2f5bSNamhyung Kim };
62688f2f5bSNamhyung Kim 
634779a2e9SArnaldo Carvalho de Melo void tui_progress__init(void)
64688f2f5bSNamhyung Kim {
654779a2e9SArnaldo Carvalho de Melo 	ui_progress__ops = &tui_progress__ops;
66688f2f5bSNamhyung Kim }
67