perf top tui: Wait till the first sample to refresh the screen.
Commit-ID: 5807806a92450fd57f8063868efae9d4af74db02 Gitweb: http://git.kernel.org/tip/5807806a92450fd57f8063868efae9d4af74db02 Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Tue, 1 Mar 2011 10:43:03 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Tue, 1 Mar 2011 10:43:03 -0300
perf top tui: Wait till the first sample to refresh the screen.
Cc: Frederic Weisbecker <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Mike Galbraith <[email protected]>
Cc: Paul Mackerras <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Stephane Eranian <[email protected]>
Cc: Tom Zanussi <[email protected]>
LKML-Reference: <new-submission>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/builtin-top.c | 21 +++++++++++++++++++-- tools/perf/util/top.h | 1 + 2 files changed, 20 insertions(+), 2 deletions(-)
tools/perf/builtin-top.c +19 -2
@@ -72,6 +72,7 @@ static struct perf_top top = { .target_tid = -1, .active_symbols = LIST_HEAD_INIT(top.active_symbols), .active_symbols_lock = PTHREAD_MUTEX_INITIALIZER, + .active_symbols_cond = PTHREAD_COND_INITIALIZER, .freq = 1000, /* 1 KHz */ };
@@ -577,7 +578,17 @@ static void handle_keypress(struct perf_session *session, int c)static void *display_thread_tui (void *arg__used ) { -perf_top__tui_browser (&top); +int err =0 ; +pthread_mutex_lock (&top.active_symbols_lock); +while (list_empty (&top.active_symbols)) { + err =pthread_cond_wait (&top.active_symbols_cond, + &top.active_symbols_lock); +if (err) +break ; + } +pthread_mutex_unlock (&top.active_symbols_lock); +if (!err) +perf_top__tui_browser (&top);exit_browser (0 );exit (0 );return NULL ;
@@ -776,8 +787,14 @@ static void perf_event__process_sample(const union perf_event *event, syme->count[evsel->idx]++;record_precise_ip (syme, evsel->idx, ip);pthread_mutex_lock (&top.active_symbols_lock); -if (list_empty (&syme->node) || !syme->node.next) +if (list_empty (&syme->node) || !syme->node.next) { +static bool first = true;__list_insert_active_sym (syme); +if (first) { +pthread_cond_broadcast (&top.active_symbols_cond); + first = false; + } + }pthread_mutex_unlock (&top.active_symbols_lock); } }
tools/perf/util/top.h +1 -0
@@ -35,6 +35,7 @@ struct perf_top {*/ struct list_head active_symbols;pthread_mutex_t active_symbols_lock; +pthread_cond_t active_symbols_cond;u64 samples;u64 kernel_samples, us_samples;u64 exact_samples;