diff options
Diffstat (limited to 'tools/perf/util')
-rw-r--r-- | tools/perf/util/top.h | 3 | ||||
-rw-r--r-- | tools/perf/util/ui/browsers/top.c | 24 |
2 files changed, 27 insertions, 0 deletions
diff --git a/tools/perf/util/top.h b/tools/perf/util/top.h index bfbf95bcc60..b07b0410463 100644 --- a/tools/perf/util/top.h +++ b/tools/perf/util/top.h @@ -10,6 +10,7 @@ struct perf_evlist; struct perf_evsel; +struct perf_session; struct sym_entry { struct rb_node rb_node; @@ -38,6 +39,7 @@ struct perf_top { u64 kernel_samples, us_samples; u64 exact_samples; u64 guest_us_samples, guest_kernel_samples; + u64 total_lost_warned; int print_entries, count_filter, delay_secs; int display_weighted, freq, rb_entries; pid_t target_pid, target_tid; @@ -45,6 +47,7 @@ struct perf_top { const char *cpu_list; struct sym_entry *sym_filter_entry; struct perf_evsel *sym_evsel; + struct perf_session *session; }; size_t perf_top__header_snprintf(struct perf_top *top, char *bf, size_t size); diff --git a/tools/perf/util/ui/browsers/top.c b/tools/perf/util/ui/browsers/top.c index 9d938106510..9b6b43b32ac 100644 --- a/tools/perf/util/ui/browsers/top.c +++ b/tools/perf/util/ui/browsers/top.c @@ -11,10 +11,12 @@ #include "../helpline.h" #include "../libslang.h" #include "../util.h" +#include "../ui.h" #include "../../evlist.h" #include "../../hist.h" #include "../../sort.h" #include "../../symbol.h" +#include "../../session.h" #include "../../top.h" struct perf_top_browser { @@ -143,6 +145,25 @@ do_annotation: symbol__tui_annotate(sym, syme->map, 0, top->delay_secs * 1000); } +static void perf_top_browser__warn_lost(struct perf_top_browser *browser) +{ + struct perf_top *top = browser->b.priv; + char msg[128]; + int len; + + top->total_lost_warned = top->session->hists.stats.total_lost; + pthread_mutex_lock(&ui__lock); + ui_browser__set_color(&browser->b, HE_COLORSET_TOP); + len = snprintf(msg, sizeof(msg), + " WARNING: LOST %" PRIu64 " events, Check IO/CPU overload", + top->total_lost_warned); + if (len > browser->b.width) + len = browser->b.width; + SLsmg_gotorc(0, browser->b.width - len); + slsmg_write_nstring(msg, len); + pthread_mutex_unlock(&ui__lock); +} + static int perf_top_browser__run(struct perf_top_browser *browser) { int key; @@ -174,6 +195,9 @@ static int perf_top_browser__run(struct perf_top_browser *browser) ui_browser__set_color(&browser->b, NEWT_COLORSET_ROOT); SLsmg_gotorc(0, 0); slsmg_write_nstring(title, browser->b.width); + + if (top->total_lost_warned != top->session->hists.stats.total_lost) + perf_top_browser__warn_lost(browser); break; case 'a': case NEWT_KEY_RIGHT: |