Commit 8233822f authored by Jiri Olsa's avatar Jiri Olsa Committed by Arnaldo Carvalho de Melo

perf ui progress: Add size info into progress bar

Adding the size values '[current/total]' into progress bar, to show more
detailed progress of data reading.

Adding new ui_progress__init_size function to specify we want to display
the size.
Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/20170908120510.22515-5-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 25cc4eb4
...@@ -27,12 +27,14 @@ void ui_progress__update(struct ui_progress *p, u64 adv) ...@@ -27,12 +27,14 @@ void ui_progress__update(struct ui_progress *p, u64 adv)
} }
} }
void ui_progress__init(struct ui_progress *p, u64 total, const char *title) void __ui_progress__init(struct ui_progress *p, u64 total,
const char *title, bool size)
{ {
p->curr = 0; p->curr = 0;
p->next = p->step = total / 16 ?: 1; p->next = p->step = total / 16 ?: 1;
p->total = total; p->total = total;
p->title = title; p->title = title;
p->size = size;
if (ui_progress__ops->init) if (ui_progress__ops->init)
ui_progress__ops->init(p); ui_progress__ops->init(p);
......
...@@ -8,9 +8,18 @@ void ui_progress__finish(void); ...@@ -8,9 +8,18 @@ void ui_progress__finish(void);
struct ui_progress { struct ui_progress {
const char *title; const char *title;
u64 curr, next, step, total; u64 curr, next, step, total;
bool size;
}; };
void ui_progress__init(struct ui_progress *p, u64 total, const char *title); void __ui_progress__init(struct ui_progress *p, u64 total,
const char *title, bool size);
#define ui_progress__init(p, total, title) \
__ui_progress__init(p, total, title, false)
#define ui_progress__init_size(p, total, title) \
__ui_progress__init(p, total, title, true)
void ui_progress__update(struct ui_progress *p, u64 adv); void ui_progress__update(struct ui_progress *p, u64 adv);
struct ui_progress_ops { struct ui_progress_ops {
......
#include <linux/kernel.h>
#include "../cache.h" #include "../cache.h"
#include "../progress.h" #include "../progress.h"
#include "../libslang.h" #include "../libslang.h"
#include "../ui.h" #include "../ui.h"
#include "tui.h" #include "tui.h"
#include "units.h"
#include "../browser.h" #include "../browser.h"
static void __tui_progress__init(struct ui_progress *p) static void __tui_progress__init(struct ui_progress *p)
...@@ -10,8 +12,22 @@ static void __tui_progress__init(struct ui_progress *p) ...@@ -10,8 +12,22 @@ static void __tui_progress__init(struct ui_progress *p)
p->next = p->step = p->total / (SLtt_Screen_Cols - 2) ?: 1; p->next = p->step = p->total / (SLtt_Screen_Cols - 2) ?: 1;
} }
static int get_title(struct ui_progress *p, char *buf, size_t size)
{
char buf_cur[20];
char buf_tot[20];
int ret;
ret = unit_number__scnprintf(buf_cur, sizeof(buf_cur), p->curr);
ret += unit_number__scnprintf(buf_tot, sizeof(buf_tot), p->total);
return ret + scnprintf(buf, size, "%s [%s/%s]",
p->title, buf_cur, buf_tot);
}
static void tui_progress__update(struct ui_progress *p) static void tui_progress__update(struct ui_progress *p)
{ {
char buf[100], *title = (char *) p->title;
int bar, y; int bar, y;
/* /*
* FIXME: We should have a per UI backend way of showing progress, * FIXME: We should have a per UI backend way of showing progress,
...@@ -23,13 +39,18 @@ static void tui_progress__update(struct ui_progress *p) ...@@ -23,13 +39,18 @@ static void tui_progress__update(struct ui_progress *p)
if (p->total == 0) if (p->total == 0)
return; return;
if (p->size) {
get_title(p, buf, sizeof(buf));
title = buf;
}
ui__refresh_dimensions(false); ui__refresh_dimensions(false);
pthread_mutex_lock(&ui__lock); pthread_mutex_lock(&ui__lock);
y = SLtt_Screen_Rows / 2 - 2; y = SLtt_Screen_Rows / 2 - 2;
SLsmg_set_color(0); SLsmg_set_color(0);
SLsmg_draw_box(y, 0, 3, SLtt_Screen_Cols); SLsmg_draw_box(y, 0, 3, SLtt_Screen_Cols);
SLsmg_gotorc(y++, 1); SLsmg_gotorc(y++, 1);
SLsmg_write_string((char *)p->title); SLsmg_write_string(title);
SLsmg_fill_region(y, 1, 1, SLtt_Screen_Cols - 2, ' '); SLsmg_fill_region(y, 1, 1, SLtt_Screen_Cols - 2, ' ');
SLsmg_set_color(HE_COLORSET_SELECTED); SLsmg_set_color(HE_COLORSET_SELECTED);
bar = ((SLtt_Screen_Cols - 2) * p->curr) / p->total; bar = ((SLtt_Screen_Cols - 2) * p->curr) / p->total;
......
...@@ -1847,7 +1847,7 @@ static int __perf_session__process_events(struct perf_session *session, ...@@ -1847,7 +1847,7 @@ static int __perf_session__process_events(struct perf_session *session,
if (data_offset + data_size < file_size) if (data_offset + data_size < file_size)
file_size = data_offset + data_size; file_size = data_offset + data_size;
ui_progress__init(&prog, file_size, "Processing events..."); ui_progress__init_size(&prog, file_size, "Processing events...");
mmap_size = MMAP_SIZE; mmap_size = MMAP_SIZE;
if (mmap_size > file_size) { if (mmap_size > file_size) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment