![Arnaldo Carvalho de Melo](/assets/img/avatar_default.png)
In commit e2f4351 "perf ui/helpline: Introduce ui_helpline__vshow()" the test for the browser used made ui_helpline__vshow() to be called only for the GTK browser. The TUI one then was not used and vfprintf(stderr, ...) was used instead, making the TUI scroll the screen instead of just printing on the last line. Fix it by doing the proper check, that is to call ui_helpline__vshow to be called for both the TUI and GTK browsers. 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: Namhyung Kim <namhyung@gmail.com> 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-iad0nw09x4orhmn0uzz4ljx3@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
85 lines
1.5 KiB
C
85 lines
1.5 KiB
C
/* For general debugging purposes */
|
|
|
|
#include "../perf.h"
|
|
|
|
#include <string.h>
|
|
#include <stdarg.h>
|
|
#include <stdio.h>
|
|
|
|
#include "cache.h"
|
|
#include "color.h"
|
|
#include "event.h"
|
|
#include "debug.h"
|
|
#include "util.h"
|
|
#include "target.h"
|
|
|
|
int verbose;
|
|
bool dump_trace = false, quiet = false;
|
|
|
|
int eprintf(int level, const char *fmt, ...)
|
|
{
|
|
va_list args;
|
|
int ret = 0;
|
|
|
|
if (verbose >= level) {
|
|
va_start(args, fmt);
|
|
if (use_browser >= 1)
|
|
ui_helpline__vshow(fmt, args);
|
|
else
|
|
ret = vfprintf(stderr, fmt, args);
|
|
va_end(args);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
int dump_printf(const char *fmt, ...)
|
|
{
|
|
va_list args;
|
|
int ret = 0;
|
|
|
|
if (dump_trace) {
|
|
va_start(args, fmt);
|
|
ret = vprintf(fmt, args);
|
|
va_end(args);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
void trace_event(union perf_event *event)
|
|
{
|
|
unsigned char *raw_event = (void *)event;
|
|
const char *color = PERF_COLOR_BLUE;
|
|
int i, j;
|
|
|
|
if (!dump_trace)
|
|
return;
|
|
|
|
printf(".");
|
|
color_fprintf(stdout, color, "\n. ... raw event: size %d bytes\n",
|
|
event->header.size);
|
|
|
|
for (i = 0; i < event->header.size; i++) {
|
|
if ((i & 15) == 0) {
|
|
printf(".");
|
|
color_fprintf(stdout, color, " %04x: ", i);
|
|
}
|
|
|
|
color_fprintf(stdout, color, " %02x", raw_event[i]);
|
|
|
|
if (((i & 15) == 15) || i == event->header.size-1) {
|
|
color_fprintf(stdout, color, " ");
|
|
for (j = 0; j < 15-(i & 15); j++)
|
|
color_fprintf(stdout, color, " ");
|
|
for (j = i & ~15; j <= i; j++) {
|
|
color_fprintf(stdout, color, "%c",
|
|
isprint(raw_event[j]) ?
|
|
raw_event[j] : '.');
|
|
}
|
|
color_fprintf(stdout, color, "\n");
|
|
}
|
|
}
|
|
printf(".\n");
|
|
}
|