aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/perf/util/debug.c11
-rw-r--r--tools/perf/util/debug.h2
-rw-r--r--tools/perf/util/session.c18
-rw-r--r--tools/perf/util/ui/util.c16
4 files changed, 46 insertions, 1 deletions
diff --git a/tools/perf/util/debug.c b/tools/perf/util/debug.c
index c8d81b00089d..e5161e8f9915 100644
--- a/tools/perf/util/debug.c
+++ b/tools/perf/util/debug.c
@@ -46,6 +46,17 @@ int dump_printf(const char *fmt, ...)
46 return ret; 46 return ret;
47} 47}
48 48
49#ifdef NO_NEWT_SUPPORT
50void ui__warning(const char *format, ...)
51{
52 va_list args;
53
54 va_start(args, format);
55 vfprintf(stderr, format, args);
56 va_end(args);
57}
58#endif
59
49static int dump_printf_color(const char *fmt, const char *color, ...) 60static int dump_printf_color(const char *fmt, const char *color, ...)
50{ 61{
51 va_list args; 62 va_list args;
diff --git a/tools/perf/util/debug.h b/tools/perf/util/debug.h
index 7b514082bbaf..ca35fd66b5df 100644
--- a/tools/perf/util/debug.h
+++ b/tools/perf/util/debug.h
@@ -35,4 +35,6 @@ int ui_helpline__show_help(const char *format, va_list ap);
35#include "ui/progress.h" 35#include "ui/progress.h"
36#endif 36#endif
37 37
38void ui__warning(const char *format, ...) __attribute__((format(printf, 1, 2)));
39
38#endif /* __PERF_DEBUG_H */ 40#endif /* __PERF_DEBUG_H */
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index 3d5604739493..3ae69550fa0b 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -852,6 +852,24 @@ done:
852 flush_sample_queue(self, ops); 852 flush_sample_queue(self, ops);
853out_err: 853out_err:
854 ui_progress__delete(progress); 854 ui_progress__delete(progress);
855
856 if (ops->lost == event__process_lost &&
857 self->hists.stats.total_lost != 0) {
858 ui__warning("Processed %Lu events and LOST %Lu!\n\n"
859 "Check IO/CPU overload!\n\n",
860 self->hists.stats.total_period,
861 self->hists.stats.total_lost);
862 }
863
864 if (self->hists.stats.nr_unknown_events != 0) {
865 ui__warning("Found %u unknown events!\n\n"
866 "Is this an older tool processing a perf.data "
867 "file generated by a more recent tool?\n\n"
868 "If that is not the case, consider "
869 "reporting to linux-kernel@vger.kernel.org.\n\n",
870 self->hists.stats.nr_unknown_events);
871 }
872
855 return err; 873 return err;
856} 874}
857 875
diff --git a/tools/perf/util/ui/util.c b/tools/perf/util/ui/util.c
index 056c69521a38..7b5a8926624e 100644
--- a/tools/perf/util/ui/util.c
+++ b/tools/perf/util/ui/util.c
@@ -104,10 +104,24 @@ out_destroy_form:
104 return rc; 104 return rc;
105} 105}
106 106
107static const char yes[] = "Yes", no[] = "No"; 107static const char yes[] = "Yes", no[] = "No",
108 warning_str[] = "Warning!", ok[] = "Ok";
108 109
109bool ui__dialog_yesno(const char *msg) 110bool ui__dialog_yesno(const char *msg)
110{ 111{
111 /* newtWinChoice should really be accepting const char pointers... */ 112 /* newtWinChoice should really be accepting const char pointers... */
112 return newtWinChoice(NULL, (char *)yes, (char *)no, (char *)msg) == 1; 113 return newtWinChoice(NULL, (char *)yes, (char *)no, (char *)msg) == 1;
113} 114}
115
116void ui__warning(const char *format, ...)
117{
118 va_list args;
119
120 va_start(args, format);
121 if (use_browser > 0)
122 newtWinMessagev((char *)warning_str, (char *)ok,
123 (char *)format, args);
124 else
125 vfprintf(stderr, format, args);
126 va_end(args);
127}