提交 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 @@
#include "util/string.h"
#include "perf.h"
#include "util/debug.h"
#include "util/parse-options.h"
#include "util/parse-events.h"
......
......@@ -16,6 +16,7 @@
#include "util/header.h"
#include "util/event.h"
#include "util/debug.h"
#include <unistd.h>
#include <sched.h>
......
......@@ -20,6 +20,7 @@
#include "util/values.h"
#include "perf.h"
#include "util/debug.h"
#include "util/header.h"
#include "util/parse-options.h"
......@@ -39,8 +40,6 @@ static char *field_sep;
static int input;
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 show_nr_samples;
......@@ -1285,42 +1284,6 @@ process_lost_event(event_t *event, unsigned long offset, unsigned long head)
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
process_read_event(event_t *event, unsigned long offset, unsigned long head)
{
......
......@@ -42,6 +42,8 @@
#include "util/util.h"
#include "util/parse-options.h"
#include "util/parse-events.h"
#include "util/event.h"
#include "util/debug.h"
#include <sys/prctl.h>
#include <math.h>
......
......@@ -27,6 +27,8 @@
#include "util/parse-options.h"
#include "util/parse-events.h"
#include "util/debug.h"
#include <assert.h>
#include <fcntl.h>
......
......@@ -48,7 +48,6 @@
#include "../../include/linux/perf_counter.h"
#include "util/types.h"
#include "util/debug.h"
/*
* 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)
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)
{
int r = 0;
......@@ -191,6 +191,10 @@ static int color_vfprintf(FILE *fp, const char *color, const char *fmt,
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, ...)
......@@ -199,7 +203,7 @@ int color_fprintf(FILE *fp, const char *color, const char *fmt, ...)
int r;
va_start(args, fmt);
r = color_vfprintf(fp, color, fmt, args, NULL);
r = color_vfprintf(fp, color, fmt, args);
va_end(args);
return r;
}
......@@ -209,7 +213,7 @@ int color_fprintf_ln(FILE *fp, const char *color, const char *fmt, ...)
va_list args;
int r;
va_start(args, fmt);
r = color_vfprintf(fp, color, fmt, args, "\n");
r = __color_vfprintf(fp, color, fmt, args, "\n");
va_end(args);
return r;
}
......
......@@ -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);
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);
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_ln(FILE *fp, const char *color, const char *fmt, ...);
int color_fwrite_lines(FILE *fp, const char *color, size_t count, const char *buf);
......
/* For general debugging purposes */
#include "../perf.h"
#include <string.h>
#include <stdarg.h>
#include <stdio.h>
#include "color.h"
#include "event.h"
#include "debug.h"
int verbose = 0;
int dump_trace = 0;
......@@ -35,3 +40,56 @@ int dump_printf(const char *fmt, ...)
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;
int eprintf(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 @@
#include "string.h"
#include "symbol.h"
#include "debug.h"
#include <libelf.h>
#include <gelf.h>
#include <elf.h>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册