~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/perf/ui/tui/progress.c

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 // SPDX-License-Identifier: GPL-2.0
  2 #include <linux/kernel.h>
  3 #include "../progress.h"
  4 #include "../libslang.h"
  5 #include "../ui.h"
  6 #include "tui.h"
  7 #include "units.h"
  8 #include "../browser.h"
  9 
 10 static void __tui_progress__init(struct ui_progress *p)
 11 {
 12         p->next = p->step = p->total / (SLtt_Screen_Cols - 2) ?: 1;
 13 }
 14 
 15 static int get_title(struct ui_progress *p, char *buf, size_t size)
 16 {
 17         char buf_cur[20];
 18         char buf_tot[20];
 19         int ret;
 20 
 21         ret  = unit_number__scnprintf(buf_cur, sizeof(buf_cur), p->curr);
 22         ret += unit_number__scnprintf(buf_tot, sizeof(buf_tot), p->total);
 23 
 24         return ret + scnprintf(buf, size, "%s [%s/%s]",
 25                                p->title, buf_cur, buf_tot);
 26 }
 27 
 28 static void tui_progress__update(struct ui_progress *p)
 29 {
 30         char buf[100], *title = (char *) p->title;
 31         int bar, y;
 32         /*
 33          * FIXME: We should have a per UI backend way of showing progress,
 34          * stdio will just show a percentage as NN%, etc.
 35          */
 36         if (use_browser <= 0)
 37                 return;
 38 
 39         if (p->total == 0)
 40                 return;
 41 
 42         if (p->size) {
 43                 get_title(p, buf, sizeof(buf));
 44                 title = buf;
 45         }
 46 
 47         ui__refresh_dimensions(false);
 48         mutex_lock(&ui__lock);
 49         y = SLtt_Screen_Rows / 2 - 2;
 50         SLsmg_set_color(0);
 51         SLsmg_draw_box(y, 0, 3, SLtt_Screen_Cols);
 52         SLsmg_gotorc(y++, 1);
 53         SLsmg_write_string(title);
 54         SLsmg_fill_region(y, 1, 1, SLtt_Screen_Cols - 2, ' ');
 55         SLsmg_set_color(HE_COLORSET_SELECTED);
 56         bar = ((SLtt_Screen_Cols - 2) * p->curr) / p->total;
 57         SLsmg_fill_region(y, 1, 1, bar, ' ');
 58         SLsmg_refresh();
 59         mutex_unlock(&ui__lock);
 60 }
 61 
 62 static void tui_progress__finish(void)
 63 {
 64         int y;
 65 
 66         if (use_browser <= 0)
 67                 return;
 68 
 69         ui__refresh_dimensions(false);
 70         mutex_lock(&ui__lock);
 71         y = SLtt_Screen_Rows / 2 - 2;
 72         SLsmg_set_color(0);
 73         SLsmg_fill_region(y, 0, 3, SLtt_Screen_Cols, ' ');
 74         SLsmg_refresh();
 75         mutex_unlock(&ui__lock);
 76 }
 77 
 78 static struct ui_progress_ops tui_progress__ops = {
 79         .init   = __tui_progress__init,
 80         .update = tui_progress__update,
 81         .finish = tui_progress__finish,
 82 };
 83 
 84 void tui_progress__init(void)
 85 {
 86         ui_progress__ops = &tui_progress__ops;
 87 }
 88 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php