提交 8f28827a 编写于 作者: F Frederic Weisbecker 提交者: Ingo Molnar

perf tools: Librarize trace_event() helper

Librarize trace_event() helper so that perf trace can use it
too. Also clean up the debug.h includes a bit.

It's not good to have it included in perf.h because it doesn't
make it flexible against other headers it may need (headers
that can also depend on perf.h and then create a recursive
header dependency).
Signed-off-by: NFrederic Weisbecker <fweisbec@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
LKML-Reference: <1250453149-664-1-git-send-email-fweisbec@gmail.com>
Signed-off-by: NIngo Molnar <mingo@elte.hu>
上级 0d3a5c88
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include "util/string.h" #include "util/string.h"
#include "perf.h" #include "perf.h"
#include "util/debug.h"
#include "util/parse-options.h" #include "util/parse-options.h"
#include "util/parse-events.h" #include "util/parse-events.h"
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include "util/header.h" #include "util/header.h"
#include "util/event.h" #include "util/event.h"
#include "util/debug.h"
#include <unistd.h> #include <unistd.h>
#include <sched.h> #include <sched.h>
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include "util/values.h" #include "util/values.h"
#include "perf.h" #include "perf.h"
#include "util/debug.h"
#include "util/header.h" #include "util/header.h"
#include "util/parse-options.h" #include "util/parse-options.h"
...@@ -39,8 +40,6 @@ static char *field_sep; ...@@ -39,8 +40,6 @@ static char *field_sep;
static int input; static int input;
static int show_mask = SHOW_KERNEL | SHOW_USER | SHOW_HV; static int show_mask = SHOW_KERNEL | SHOW_USER | SHOW_HV;
#define cdprintf(x...) do { if (dump_trace) color_fprintf(stdout, color, x); } while (0)
static int full_paths; static int full_paths;
static int show_nr_samples; static int show_nr_samples;
...@@ -1285,42 +1284,6 @@ process_lost_event(event_t *event, unsigned long offset, unsigned long head) ...@@ -1285,42 +1284,6 @@ process_lost_event(event_t *event, unsigned long offset, unsigned long head)
return 0; return 0;
} }
static void trace_event(event_t *event)
{
unsigned char *raw_event = (void *)event;
const char *color = PERF_COLOR_BLUE;
int i, j;
if (!dump_trace)
return;
dump_printf(".");
cdprintf("\n. ... raw event: size %d bytes\n", event->header.size);
for (i = 0; i < event->header.size; i++) {
if ((i & 15) == 0) {
dump_printf(".");
cdprintf(" %04x: ", i);
}
cdprintf(" %02x", raw_event[i]);
if (((i & 15) == 15) || i == event->header.size-1) {
cdprintf(" ");
for (j = 0; j < 15-(i & 15); j++)
cdprintf(" ");
for (j = 0; j < (i & 15); j++) {
if (isprint(raw_event[i-15+j]))
cdprintf("%c", raw_event[i-15+j]);
else
cdprintf(".");
}
cdprintf("\n");
}
}
dump_printf(".\n");
}
static int static int
process_read_event(event_t *event, unsigned long offset, unsigned long head) process_read_event(event_t *event, unsigned long offset, unsigned long head)
{ {
......
...@@ -42,6 +42,8 @@ ...@@ -42,6 +42,8 @@
#include "util/util.h" #include "util/util.h"
#include "util/parse-options.h" #include "util/parse-options.h"
#include "util/parse-events.h" #include "util/parse-events.h"
#include "util/event.h"
#include "util/debug.h"
#include <sys/prctl.h> #include <sys/prctl.h>
#include <math.h> #include <math.h>
......
...@@ -27,6 +27,8 @@ ...@@ -27,6 +27,8 @@
#include "util/parse-options.h" #include "util/parse-options.h"
#include "util/parse-events.h" #include "util/parse-events.h"
#include "util/debug.h"
#include <assert.h> #include <assert.h>
#include <fcntl.h> #include <fcntl.h>
......
...@@ -48,7 +48,6 @@ ...@@ -48,7 +48,6 @@
#include "../../include/linux/perf_counter.h" #include "../../include/linux/perf_counter.h"
#include "util/types.h" #include "util/types.h"
#include "util/debug.h"
/* /*
* prctl(PR_TASK_PERF_COUNTERS_DISABLE) will (cheaply) disable all * prctl(PR_TASK_PERF_COUNTERS_DISABLE) will (cheaply) disable all
......
...@@ -166,7 +166,7 @@ int perf_color_default_config(const char *var, const char *value, void *cb) ...@@ -166,7 +166,7 @@ int perf_color_default_config(const char *var, const char *value, void *cb)
return perf_default_config(var, value, cb); return perf_default_config(var, value, cb);
} }
static int color_vfprintf(FILE *fp, const char *color, const char *fmt, static int __color_vfprintf(FILE *fp, const char *color, const char *fmt,
va_list args, const char *trail) va_list args, const char *trail)
{ {
int r = 0; int r = 0;
...@@ -191,6 +191,10 @@ static int color_vfprintf(FILE *fp, const char *color, const char *fmt, ...@@ -191,6 +191,10 @@ static int color_vfprintf(FILE *fp, const char *color, const char *fmt,
return r; return r;
} }
int color_vfprintf(FILE *fp, const char *color, const char *fmt, va_list args)
{
return __color_vfprintf(fp, color, fmt, args, NULL);
}
int color_fprintf(FILE *fp, const char *color, const char *fmt, ...) int color_fprintf(FILE *fp, const char *color, const char *fmt, ...)
...@@ -199,7 +203,7 @@ int color_fprintf(FILE *fp, const char *color, const char *fmt, ...) ...@@ -199,7 +203,7 @@ int color_fprintf(FILE *fp, const char *color, const char *fmt, ...)
int r; int r;
va_start(args, fmt); va_start(args, fmt);
r = color_vfprintf(fp, color, fmt, args, NULL); r = color_vfprintf(fp, color, fmt, args);
va_end(args); va_end(args);
return r; return r;
} }
...@@ -209,7 +213,7 @@ int color_fprintf_ln(FILE *fp, const char *color, const char *fmt, ...) ...@@ -209,7 +213,7 @@ int color_fprintf_ln(FILE *fp, const char *color, const char *fmt, ...)
va_list args; va_list args;
int r; int r;
va_start(args, fmt); va_start(args, fmt);
r = color_vfprintf(fp, color, fmt, args, "\n"); r = __color_vfprintf(fp, color, fmt, args, "\n");
va_end(args); va_end(args);
return r; return r;
} }
......
...@@ -32,6 +32,7 @@ int perf_color_default_config(const char *var, const char *value, void *cb); ...@@ -32,6 +32,7 @@ int perf_color_default_config(const char *var, const char *value, void *cb);
int perf_config_colorbool(const char *var, const char *value, int stdout_is_tty); int perf_config_colorbool(const char *var, const char *value, int stdout_is_tty);
void color_parse(const char *value, const char *var, char *dst); void color_parse(const char *value, const char *var, char *dst);
void color_parse_mem(const char *value, int len, const char *var, char *dst); void color_parse_mem(const char *value, int len, const char *var, char *dst);
int color_vfprintf(FILE *fp, const char *color, const char *fmt, va_list args);
int color_fprintf(FILE *fp, const char *color, const char *fmt, ...); int color_fprintf(FILE *fp, const char *color, const char *fmt, ...);
int color_fprintf_ln(FILE *fp, const char *color, const char *fmt, ...); int color_fprintf_ln(FILE *fp, const char *color, const char *fmt, ...);
int color_fwrite_lines(FILE *fp, const char *color, size_t count, const char *buf); int color_fwrite_lines(FILE *fp, const char *color, size_t count, const char *buf);
......
/* For general debugging purposes */ /* For general debugging purposes */
#include "../perf.h" #include "../perf.h"
#include <string.h> #include <string.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h> #include <stdio.h>
#include "color.h"
#include "event.h"
#include "debug.h"
int verbose = 0; int verbose = 0;
int dump_trace = 0; int dump_trace = 0;
...@@ -35,3 +40,56 @@ int dump_printf(const char *fmt, ...) ...@@ -35,3 +40,56 @@ int dump_printf(const char *fmt, ...)
return ret; return ret;
} }
static int dump_printf_color(const char *fmt, const char *color, ...)
{
va_list args;
int ret = 0;
if (dump_trace) {
va_start(args, color);
ret = color_vfprintf(stdout, color, fmt, args);
va_end(args);
}
return ret;
}
void trace_event(event_t *event)
{
unsigned char *raw_event = (void *)event;
const char *color = PERF_COLOR_BLUE;
int i, j;
if (!dump_trace)
return;
dump_printf(".");
dump_printf_color("\n. ... raw event: size %d bytes\n", color,
event->header.size);
for (i = 0; i < event->header.size; i++) {
if ((i & 15) == 0) {
dump_printf(".");
dump_printf_color(" %04x: ", color, i);
}
dump_printf_color(" %02x", color, raw_event[i]);
if (((i & 15) == 15) || i == event->header.size-1) {
dump_printf_color(" ", color);
for (j = 0; j < 15-(i & 15); j++)
dump_printf_color(" ", color);
for (j = 0; j < (i & 15); j++) {
if (isprint(raw_event[i-15+j]))
dump_printf_color("%c", color,
raw_event[i-15+j]);
else
dump_printf_color(".", color);
}
dump_printf_color("\n", color);
}
}
dump_printf(".\n");
}
...@@ -5,3 +5,4 @@ extern int dump_trace; ...@@ -5,3 +5,4 @@ extern int dump_trace;
int eprintf(const char *fmt, ...) __attribute__((format(printf, 1, 2))); int eprintf(const char *fmt, ...) __attribute__((format(printf, 1, 2)));
int dump_printf(const char *fmt, ...) __attribute__((format(printf, 1, 2))); int dump_printf(const char *fmt, ...) __attribute__((format(printf, 1, 2)));
void trace_event(event_t *event);
...@@ -3,6 +3,8 @@ ...@@ -3,6 +3,8 @@
#include "string.h" #include "string.h"
#include "symbol.h" #include "symbol.h"
#include "debug.h"
#include <libelf.h> #include <libelf.h>
#include <gelf.h> #include <gelf.h>
#include <elf.h> #include <elf.h>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册