All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ingo Molnar <mingo@kernel.org>
Cc: linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
	Jiri Olsa <jolsa@kernel.org>, David Ahern <dsahern@gmail.com>,
	Namhyung Kim <namhyung@kernel.org>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: [PATCH 23/41] perf ui progress: Add size info into progress bar
Date: Tue, 12 Sep 2017 12:10:11 -0300	[thread overview]
Message-ID: <20170912151029.6612-24-acme@kernel.org> (raw)
In-Reply-To: <20170912151029.6612-1-acme@kernel.org>

From: Jiri Olsa <jolsa@kernel.org>

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: Jiri Olsa <jolsa@kernel.org>
Tested-by: Arnaldo 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.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/ui/progress.c     |  4 +++-
 tools/perf/ui/progress.h     | 11 ++++++++++-
 tools/perf/ui/tui/progress.c | 23 ++++++++++++++++++++++-
 tools/perf/util/session.c    |  2 +-
 4 files changed, 36 insertions(+), 4 deletions(-)

diff --git a/tools/perf/ui/progress.c b/tools/perf/ui/progress.c
index 3e2b5d64c55e..7ade387d511c 100644
--- a/tools/perf/ui/progress.c
+++ b/tools/perf/ui/progress.c
@@ -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->next = p->step = total / 16 ?: 1;
 	p->total = total;
 	p->title = title;
+	p->size  = size;
 
 	if (ui_progress__ops->init)
 		ui_progress__ops->init(p);
diff --git a/tools/perf/ui/progress.h b/tools/perf/ui/progress.h
index e5f434a2070b..fbaa1507ebfe 100644
--- a/tools/perf/ui/progress.h
+++ b/tools/perf/ui/progress.h
@@ -8,9 +8,18 @@ void ui_progress__finish(void);
 struct ui_progress {
 	const char *title;
 	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);
 
 struct ui_progress_ops {
diff --git a/tools/perf/ui/tui/progress.c b/tools/perf/ui/tui/progress.c
index f6b8f52aad7e..68f6144ea603 100644
--- a/tools/perf/ui/tui/progress.c
+++ b/tools/perf/ui/tui/progress.c
@@ -1,8 +1,10 @@
+#include <linux/kernel.h>
 #include "../cache.h"
 #include "../progress.h"
 #include "../libslang.h"
 #include "../ui.h"
 #include "tui.h"
+#include "units.h"
 #include "../browser.h"
 
 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;
 }
 
+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)
 {
+	char buf[100], *title = (char *) p->title;
 	int bar, y;
 	/*
 	 * 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)
 	if (p->total == 0)
 		return;
 
+	if (p->size) {
+		get_title(p, buf, sizeof(buf));
+		title = buf;
+	}
+
 	ui__refresh_dimensions(false);
 	pthread_mutex_lock(&ui__lock);
 	y = SLtt_Screen_Rows / 2 - 2;
 	SLsmg_set_color(0);
 	SLsmg_draw_box(y, 0, 3, SLtt_Screen_Cols);
 	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_set_color(HE_COLORSET_SELECTED);
 	bar = ((SLtt_Screen_Cols - 2) * p->curr) / p->total;
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index a7ebd9fe8e40..ceac0848469d 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -1847,7 +1847,7 @@ static int __perf_session__process_events(struct perf_session *session,
 	if (data_offset + data_size < file_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;
 	if (mmap_size > file_size) {
-- 
2.13.5

  parent reply	other threads:[~2017-09-12 15:10 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-12 15:09 [GIT PULL 00/41] perf/core improvements and fixes Arnaldo Carvalho de Melo
2017-09-12 15:09 ` [PATCH 01/41] perf sched timehist: Add pid and tid options Arnaldo Carvalho de Melo
2017-09-12 15:09 ` [PATCH 02/41] perf tools: Support weak groups in 'perf stat' Arnaldo Carvalho de Melo
2017-09-12 15:09 ` [PATCH 03/41] perf vendor events: Support metric_group and no event name in JSON parser Arnaldo Carvalho de Melo
2017-09-12 15:09 ` [PATCH 04/41] perf stat: Factor out generic metric printing Arnaldo Carvalho de Melo
2017-09-12 15:09 ` [PATCH 05/41] perf stat: Print generic metric header even for failed expressions Arnaldo Carvalho de Melo
2017-09-12 15:09 ` [PATCH 06/41] perf pmu: Extract function to get JSON alias map Arnaldo Carvalho de Melo
2017-09-12 15:09 ` [PATCH 07/41] perf stat: Support JSON metrics in perf stat Arnaldo Carvalho de Melo
2017-09-12 15:09 ` [PATCH 08/41] perf list: Add metric groups to perf list Arnaldo Carvalho de Melo
2017-09-12 15:09 ` [PATCH 09/41] perf stat: Don't use ctx for saved values lookup Arnaldo Carvalho de Melo
2017-09-12 15:09 ` [PATCH 10/41] perf stat: Support duration_time for metrics Arnaldo Carvalho de Melo
2017-09-12 15:09 ` [PATCH 11/41] perf stat: Hide internal duration_time counter Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 12/41] perf stat: Update walltime_nsecs_stats in interval mode Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 13/41] tools include linux: Guard against redefinition of some macros Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 14/41] perf record: Support direct --user-regs arguments Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 15/41] perf script: Support user regs Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 16/41] perf tests: Fix compile when libunwind's unwind.h is available Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 17/41] tools lib api: Fix make DEBUG=1 build Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 18/41] perf tools: Open perf.data with O_CLOEXEC flag Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 19/41] perf tools: Add python-clean target Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 20/41] perf ui progress: Make sure we always define step value Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 21/41] perf ui progress: Fix progress update Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 22/41] perf ui progress: Add ui specific init function Arnaldo Carvalho de Melo
2017-09-12 15:10 ` Arnaldo Carvalho de Melo [this message]
2017-09-12 15:10 ` [PATCH 24/41] perf tools: Use scandir() to replace readdir() Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 25/41] perf config: Check not only section->from_system_config but also item's Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 26/41] perf config: Write a config file just once Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 27/41] perf config: Allow creating empty config set for config file autogeneration Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 28/41] perf tools: Make copyfile_offset() static Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 29/41] perf tools: Support running perf binaries with a dash in their name Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 30/41] perf stat: Fall weak group back even for EBADF Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 31/41] perf vendor events: Add JSON metrics for Broadwell Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 32/41] perf vendor events: Add JSON metrics for Skylake Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 33/41] perf vendor events: Add JSON metrics for Sandy Bridge Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 34/41] perf vendor events: Add JSON metrics for Sandy Bridge EP Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 35/41] perf vendor events: Add JSON metrics for Ivy Bridge Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 36/41] perf vendor events: Add JSON metrics for Haswell Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 37/41] perf vendor events: Add JSON metrics for Ivy Town Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 38/41] perf vendor events: Add JSON metrics for Haswell EP Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 39/41] perf vendor events: Add JSON metrics for Broadwell Server Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 40/41] perf vendor events: Add JSON metrics for Broadwell DE Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 41/41] perf vendor events: Add JSON metrics for Skylake server Arnaldo Carvalho de Melo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170912151029.6612-24-acme@kernel.org \
    --to=acme@kernel.org \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@redhat.com \
    --cc=dsahern@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.