diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2013-10-23 14:40:38 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2013-10-23 14:40:38 -0400 |
commit | 4d3001fdfdfacd2b35ee74ff0f037274eeebd3f6 (patch) | |
tree | 20634d8528fe514298163af38a66b37447503926 /tools/perf/util | |
parent | 4779a2e99af80e133ee1c70c7093dc6cc13429a1 (diff) |
perf ui progress: Per progress bar state
That will ease using a progress bar across multiple functions, like in
the upcoming patches that will present a progress bar when collapsing
histograms.
Based on a previous patch by Namhyung Kim.
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-cr7lq7ud9fj21bg7wvq27w1u@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util')
-rw-r--r-- | tools/perf/util/session.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index 854c5aa4db0d..4ba7b548e055 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c | |||
@@ -503,13 +503,16 @@ static int flush_sample_queue(struct perf_session *s, | |||
503 | struct perf_sample sample; | 503 | struct perf_sample sample; |
504 | u64 limit = os->next_flush; | 504 | u64 limit = os->next_flush; |
505 | u64 last_ts = os->last_sample ? os->last_sample->timestamp : 0ULL; | 505 | u64 last_ts = os->last_sample ? os->last_sample->timestamp : 0ULL; |
506 | unsigned idx = 0, progress_next = os->nr_samples / 16; | ||
507 | bool show_progress = limit == ULLONG_MAX; | 506 | bool show_progress = limit == ULLONG_MAX; |
507 | struct ui_progress prog; | ||
508 | int ret; | 508 | int ret; |
509 | 509 | ||
510 | if (!tool->ordered_samples || !limit) | 510 | if (!tool->ordered_samples || !limit) |
511 | return 0; | 511 | return 0; |
512 | 512 | ||
513 | if (show_progress) | ||
514 | ui_progress__init(&prog, os->nr_samples, "Processing time ordered events..."); | ||
515 | |||
513 | list_for_each_entry_safe(iter, tmp, head, list) { | 516 | list_for_each_entry_safe(iter, tmp, head, list) { |
514 | if (session_done()) | 517 | if (session_done()) |
515 | return 0; | 518 | return 0; |
@@ -530,11 +533,9 @@ static int flush_sample_queue(struct perf_session *s, | |||
530 | os->last_flush = iter->timestamp; | 533 | os->last_flush = iter->timestamp; |
531 | list_del(&iter->list); | 534 | list_del(&iter->list); |
532 | list_add(&iter->list, &os->sample_cache); | 535 | list_add(&iter->list, &os->sample_cache); |
533 | if (show_progress && (++idx >= progress_next)) { | 536 | |
534 | progress_next += os->nr_samples / 16; | 537 | if (show_progress) |
535 | ui_progress__update(idx, os->nr_samples, | 538 | ui_progress__update(&prog, 1); |
536 | "Processing time ordered events..."); | ||
537 | } | ||
538 | } | 539 | } |
539 | 540 | ||
540 | if (list_empty(head)) { | 541 | if (list_empty(head)) { |
@@ -1285,12 +1286,13 @@ int __perf_session__process_events(struct perf_session *session, | |||
1285 | u64 file_size, struct perf_tool *tool) | 1286 | u64 file_size, struct perf_tool *tool) |
1286 | { | 1287 | { |
1287 | int fd = perf_data_file__fd(session->file); | 1288 | int fd = perf_data_file__fd(session->file); |
1288 | u64 head, page_offset, file_offset, file_pos, progress_next; | 1289 | u64 head, page_offset, file_offset, file_pos; |
1289 | int err, mmap_prot, mmap_flags, map_idx = 0; | 1290 | int err, mmap_prot, mmap_flags, map_idx = 0; |
1290 | size_t mmap_size; | 1291 | size_t mmap_size; |
1291 | char *buf, *mmaps[NUM_MMAPS]; | 1292 | char *buf, *mmaps[NUM_MMAPS]; |
1292 | union perf_event *event; | 1293 | union perf_event *event; |
1293 | uint32_t size; | 1294 | uint32_t size; |
1295 | struct ui_progress prog; | ||
1294 | 1296 | ||
1295 | perf_tool__fill_defaults(tool); | 1297 | perf_tool__fill_defaults(tool); |
1296 | 1298 | ||
@@ -1301,7 +1303,7 @@ int __perf_session__process_events(struct perf_session *session, | |||
1301 | if (data_size && (data_offset + data_size < file_size)) | 1303 | if (data_size && (data_offset + data_size < file_size)) |
1302 | file_size = data_offset + data_size; | 1304 | file_size = data_offset + data_size; |
1303 | 1305 | ||
1304 | progress_next = file_size / 16; | 1306 | ui_progress__init(&prog, file_size, "Processing events..."); |
1305 | 1307 | ||
1306 | mmap_size = MMAP_SIZE; | 1308 | mmap_size = MMAP_SIZE; |
1307 | if (mmap_size > file_size) | 1309 | if (mmap_size > file_size) |
@@ -1356,11 +1358,7 @@ more: | |||
1356 | head += size; | 1358 | head += size; |
1357 | file_pos += size; | 1359 | file_pos += size; |
1358 | 1360 | ||
1359 | if (file_pos >= progress_next) { | 1361 | ui_progress__update(&prog, size); |
1360 | progress_next += file_size / 16; | ||
1361 | ui_progress__update(file_pos, file_size, | ||
1362 | "Processing events..."); | ||
1363 | } | ||
1364 | 1362 | ||
1365 | if (session_done()) | 1363 | if (session_done()) |
1366 | goto out; | 1364 | goto out; |