forked from Minki/linux
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: Frederic 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: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
0d3a5c8859
commit
8f28827a16
@ -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);
|
||||
|
@ -1,10 +1,15 @@
|
||||
/* 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>
|
||||
|
Loading…
Reference in New Issue
Block a user