]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
perf report: Add progress bar when processing time ordered events
authorArnaldo Carvalho de Melo <acme@redhat.com>
Sat, 29 Oct 2011 14:41:45 +0000 (12:41 -0200)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 2 Nov 2011 14:28:35 +0000 (12:28 -0200)
So that for large perf.data files the user can have visual feedback that
activity is being performed.

Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.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-3ysn01mpspfrbsy56gznzqqz@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/session.c
tools/perf/util/session.h

index da354fe5e085e27f830d7e37ebda9cb1119bcfd5..85c1e6b76f0a4bbdd3d2c5b9e0d7359733dbfda7 100644 (file)
@@ -502,6 +502,7 @@ static void flush_sample_queue(struct perf_session *s,
        struct perf_sample sample;
        u64 limit = os->next_flush;
        u64 last_ts = os->last_sample ? os->last_sample->timestamp : 0ULL;
+       unsigned idx = 0, progress_next = os->nr_samples / 16;
        int ret;
 
        if (!ops->ordered_samples || !limit)
@@ -521,6 +522,11 @@ static void flush_sample_queue(struct perf_session *s,
                os->last_flush = iter->timestamp;
                list_del(&iter->list);
                list_add(&iter->list, &os->sample_cache);
+               if (++idx >= progress_next) {
+                       progress_next += os->nr_samples / 16;
+                       ui_progress__update(idx, os->nr_samples,
+                                           "Processing time ordered events...");
+               }
        }
 
        if (list_empty(head)) {
@@ -529,6 +535,8 @@ static void flush_sample_queue(struct perf_session *s,
                os->last_sample =
                        list_entry(head->prev, struct sample_queue, list);
        }
+
+       os->nr_samples = 0;
 }
 
 /*
@@ -588,6 +596,7 @@ static void __queue_event(struct sample_queue *new, struct perf_session *s)
        u64 timestamp = new->timestamp;
        struct list_head *p;
 
+       ++os->nr_samples;
        os->last_sample = new;
 
        if (!sample) {
index 514b06d41f05ef21ef1b1fefeeda9a14c1e06a76..6e393c98eb344f60dead2883e71fd4f2d13cbde3 100644 (file)
@@ -23,6 +23,7 @@ struct ordered_samples {
        struct sample_queue     *sample_buffer;
        struct sample_queue     *last_sample;
        int                     sample_buffer_idx;
+       unsigned int            nr_samples;
 };
 
 struct perf_session {