[PATCH 34/49] perf ui progress: Fix index progress display

Jiri Olsa
2018-01-09T15:37:25Z

Display overall index files progress size instead of having
multiple (per index) progress bars.

Link: http://lkml.kernel.org/n/tip-b1alb4i6urd623bcbdqni8xp@git.kernel.org
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
tools/perf/util/session.c | 27 +++++++++++++++++++++++----
1 file changed, 23 insertions(+), 4 deletions(-)

diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index 3c4dba27006f..f9dab2e16ffa 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -1797,6 +1797,8 @@ fetch_mmaped_event(struct perf_session *session,
}

struct process_args {
+ struct ui_progress prog;
+
u64 data_offset;
u64 data_size;
u64 file_size;
@@ -1826,7 +1828,6 @@ static int __perf_session__process_events(struct perf_session *session,
size_t mmap_size;
char *buf, *mmaps[NUM_MMAPS];
union perf_event *event;
- struct ui_progress prog;
s64 skip;

perf_tool__fill_defaults(tool);
@@ -1841,8 +1842,6 @@ static int __perf_session__process_events(struct perf_session *session,
if (args->data_offset + args->data_size < file_size)
file_size = args->data_offset + args->data_size;

- ui_progress__init_size(&prog, file_size, "Processing events...");
-
mmap_size = MMAP_SIZE;
if (mmap_size > file_size) {
mmap_size = file_size;
@@ -1907,7 +1906,7 @@ static int __perf_session__process_events(struct perf_session *session,
head += size;
file_pos += size;

- ui_progress__update(&prog, size);
+ ui_progress__update(&args->prog, size);

if (session_done())
goto out;
@@ -1936,12 +1935,29 @@ static int __perf_session__process_events(struct perf_session *session,
return err;
}

+static u64 get_index_size(struct perf_session *session)
+{
+ u64 size = 0;
+ int i;
+
+ for (i = 0; i < (int)session->header.nr_index; i++) {
+ struct perf_file_section *idx = &session->header.index[i];
+
+ size += idx->size;
+ }
+
+ return size;
+}
+
static int __perf_session__process_indexed_events(struct perf_session *session)
{
struct process_args args;
struct perf_tool *tool = session->tool;
int err = 0, i;

+ ui_progress__init_size(&args.prog, get_index_size(session),
+ "Processing events");
+
for (i = 0; i < (int)session->header.nr_index; i++) {
struct perf_file_section *idx = &session->header.index[i];

@@ -1982,6 +1998,9 @@ int perf_session__process_events(struct perf_session *session)
args.data_size = session->header.data_size;
args.file_size = perf_data__size(data);

+ ui_progress__init_size(&args.prog, args.file_size,
+ "Processing events");
+
err = __perf_session__process_events(session, &args);

if (!tool->no_warn)
--
2.13.6