LIB_H += util/hist.h
LIB_H += util/thread.h
LIB_H += util/data_map.h
-LIB_H += util/process_events.h
LIB_OBJS += util/abspath.o
LIB_OBJS += util/alias.o
LIB_OBJS += util/sort.o
LIB_OBJS += util/hist.o
LIB_OBJS += util/data_map.o
-LIB_OBJS += util/process_events.o
BUILTIN_OBJS += builtin-annotate.o
#include "perf.h"
#include "util/debug.h"
+#include "util/event.h"
#include "util/parse-options.h"
#include "util/parse-events.h"
#include "util/thread.h"
#include "util/sort.h"
#include "util/hist.h"
-#include "util/process_events.h"
static char const *input_name = "perf.data";
return 0;
}
-static int
-process_sample_event(event_t *event, unsigned long offset, unsigned long head)
+static int process_sample_event(event_t *event)
{
char level;
u64 ip = event->ip.ip;
struct symbol *sym = NULL;
struct thread *thread = threads__findnew(event->ip.pid);
- dump_printf("%p [%p]: PERF_EVENT (IP, %d): %d: %p\n",
- (void *)(offset + head),
- (void *)(long)(event->header.size),
- event->header.misc,
- event->ip.pid,
- (void *)(long)ip);
+ dump_printf("(IP, %d): %d: %p\n", event->header.misc,
+ event->ip.pid, (void *)(long)ip);
if (thread == NULL) {
fprintf(stderr, "problem processing %d event, skipping it.\n",
"skipping event\n");
return -1;
}
- total++;
return 0;
}
-static int
-process_comm_event(event_t *event, unsigned long offset, unsigned long head)
+static int event__process(event_t *self)
{
- struct thread *thread = threads__findnew(event->comm.pid);
-
- dump_printf("%p [%p]: PERF_RECORD_COMM: %s:%d\n",
- (void *)(offset + head),
- (void *)(long)(event->header.size),
- event->comm.comm, event->comm.pid);
-
- if (thread == NULL ||
- thread__set_comm(thread, event->comm.comm)) {
- dump_printf("problem processing PERF_RECORD_COMM, skipping event.\n");
- return -1;
- }
- total_comm++;
-
- return 0;
-}
-
-static int
-process_event(event_t *event, unsigned long offset, unsigned long head)
-{
- switch (event->header.type) {
+ switch (self->header.type) {
case PERF_RECORD_SAMPLE:
- return process_sample_event(event, offset, head);
+ return process_sample_event(self);
case PERF_RECORD_MMAP:
- return process_mmap_event(event, offset, head);
+ return event__process_mmap(self);
case PERF_RECORD_COMM:
- return process_comm_event(event, offset, head);
+ return event__process_comm(self);
case PERF_RECORD_FORK:
- return process_task_event(event, offset, head);
+ return event__process_task(self);
/*
* We dont process them right now but they are fine:
*/
(void *)(long)event->header.size,
event->header.type);
- if (!size || process_event(event, offset, head) < 0) {
+ if (!size || event__process(event) < 0) {
dump_printf("%p [%p]: skipping unknown header type: %d\n",
(void *)(offset + head),
(void *)(long)(event->header.size),
event->header.type);
-
- total_unknown++;
-
/*
* assume we lost track of the stream, check alignment, and
* increment a single u64 in the hope to catch on again 'soon'.
rc = EXIT_SUCCESS;
close(input);
- dump_printf(" IP events: %10ld\n", total);
- dump_printf(" mmap events: %10ld\n", total_mmap);
- dump_printf(" comm events: %10ld\n", total_comm);
- dump_printf(" fork events: %10ld\n", total_fork);
- dump_printf(" unknown events: %10ld\n", total_unknown);
- if (dump_trace)
+ if (dump_trace) {
+ event__print_totals();
return 0;
+ }
if (verbose > 3)
threads__fprintf(stdout);
dsos__fprintf(stdout);
collapse__resort();
- output__resort(total);
+ output__resort(event__total[0]);
find_annotations();
static char default_sort_order[] = "frag,hit,bytes";
-static char *cwd;
-static int cwdlen;
-
static int *cpunode_map;
static int max_cpu_num;
}
}
-static int
-process_comm_event(event_t *event, unsigned long offset, unsigned long head)
-{
- struct thread *thread = threads__findnew(event->comm.pid);
-
- dump_printf("%p [%p]: PERF_RECORD_COMM: %s:%d\n",
- (void *)(offset + head),
- (void *)(long)(event->header.size),
- event->comm.comm, event->comm.pid);
-
- if (thread == NULL ||
- thread__set_comm(thread, event->comm.comm)) {
- dump_printf("problem processing PERF_RECORD_COMM, skipping event.\n");
- return -1;
- }
-
- return 0;
-}
-
static void insert_alloc_stat(unsigned long call_site, unsigned long ptr,
int bytes_req, int bytes_alloc, int cpu)
{
}
}
-static int
-process_sample_event(event_t *event, unsigned long offset, unsigned long head)
+static int process_sample_event(event_t *event)
{
u64 ip = event->ip.ip;
u64 timestamp = -1;
more_data += sizeof(u64);
}
- dump_printf("%p [%p]: PERF_RECORD_SAMPLE (IP, %d): %d/%d: %p period: %Ld\n",
- (void *)(offset + head),
- (void *)(long)(event->header.size),
+ dump_printf("(IP, %d): %d/%d: %p period: %Ld\n",
event->header.misc,
event->ip.pid, event->ip.tid,
(void *)(long)ip,
static struct perf_file_handler file_handler = {
.process_sample_event = process_sample_event,
- .process_comm_event = process_comm_event,
+ .process_comm_event = event__process_comm,
.sample_type_check = sample_type_check,
};
register_perf_file_handler(&file_handler);
return mmap_dispatch_perf_file(&header, input_name, 0, 0,
- &cwdlen, &cwd);
+ &event__cwdlen, &event__cwd);
}
static double fragmentation(unsigned long n_req, unsigned long n_alloc)
#include "util/thread.h"
#include "util/sort.h"
#include "util/hist.h"
-#include "util/process_events.h"
static char const *input_name = "perf.data";
return 0;
}
-static int
-process_sample_event(event_t *event, unsigned long offset, unsigned long head)
+static int process_sample_event(event_t *event)
{
char level;
struct symbol *sym = NULL;
more_data += sizeof(u64);
}
- dump_printf("%p [%p]: PERF_RECORD_SAMPLE (IP, %d): %d/%d: %p period: %Ld\n",
- (void *)(offset + head),
- (void *)(long)(event->header.size),
+ dump_printf("(IP, %d): %d/%d: %p period: %Ld\n",
event->header.misc,
event->ip.pid, event->ip.tid,
(void *)(long)ip,
return -1;
}
- total += period;
+ event__stats.total += period;
return 0;
}
-static int
-process_comm_event(event_t *event, unsigned long offset, unsigned long head)
+static int process_comm_event(event_t *event)
{
struct thread *thread = threads__findnew(event->comm.pid);
- dump_printf("%p [%p]: PERF_RECORD_COMM: %s:%d\n",
- (void *)(offset + head),
- (void *)(long)(event->header.size),
- event->comm.comm, event->comm.pid);
+ dump_printf(": %s:%d\n", event->comm.comm, event->comm.pid);
if (thread == NULL ||
thread__set_comm_adjust(thread, event->comm.comm)) {
dump_printf("problem processing PERF_RECORD_COMM, skipping event.\n");
return -1;
}
- total_comm++;
-
- return 0;
-}
-
-static int
-process_lost_event(event_t *event, unsigned long offset, unsigned long head)
-{
- dump_printf("%p [%p]: PERF_RECORD_LOST: id:%Ld: lost:%Ld\n",
- (void *)(offset + head),
- (void *)(long)(event->header.size),
- event->lost.id,
- event->lost.lost);
-
- total_lost += event->lost.lost;
return 0;
}
-static int
-process_read_event(event_t *event, unsigned long offset, unsigned long head)
+static int process_read_event(event_t *event)
{
struct perf_event_attr *attr;
event->read.value);
}
- dump_printf("%p [%p]: PERF_RECORD_READ: %d %d %s %Lu\n",
- (void *)(offset + head),
- (void *)(long)(event->header.size),
- event->read.pid,
- event->read.tid,
- attr ? __event_name(attr->type, attr->config)
- : "FAIL",
- event->read.value);
+ dump_printf(": %d %d %s %Lu\n", event->read.pid, event->read.tid,
+ attr ? __event_name(attr->type, attr->config) : "FAIL",
+ event->read.value);
return 0;
}
static struct perf_file_handler file_handler = {
.process_sample_event = process_sample_event,
- .process_mmap_event = process_mmap_event,
+ .process_mmap_event = event__process_mmap,
.process_comm_event = process_comm_event,
- .process_exit_event = process_task_event,
- .process_fork_event = process_task_event,
- .process_lost_event = process_lost_event,
+ .process_exit_event = event__process_task,
+ .process_fork_event = event__process_task,
+ .process_lost_event = event__process_lost,
.process_read_event = process_read_event,
.sample_type_check = sample_type_check,
};
register_perf_file_handler(&file_handler);
ret = mmap_dispatch_perf_file(&header, input_name, force,
- full_paths, &cwdlen, &cwd);
+ full_paths, &event__cwdlen, &event__cwd);
if (ret)
return ret;
- dump_printf(" IP events: %10ld\n", total);
- dump_printf(" mmap events: %10ld\n", total_mmap);
- dump_printf(" comm events: %10ld\n", total_comm);
- dump_printf(" fork events: %10ld\n", total_fork);
- dump_printf(" lost events: %10ld\n", total_lost);
- dump_printf(" unknown events: %10ld\n", file_handler.total_unknown);
-
- if (dump_trace)
+ if (dump_trace) {
+ event__print_totals();
return 0;
+ }
if (verbose > 3)
threads__fprintf(stdout);
dsos__fprintf(stdout);
collapse__resort();
- output__resort(total);
- output__fprintf(stdout, total);
+ output__resort(event__stats.total);
+ output__fprintf(stdout, event__stats.total);
if (show_threads)
perf_read_values_destroy(&show_threads_values);
static char const *input_name = "perf.data";
-static unsigned long total_comm = 0;
-
static struct perf_header *header;
static u64 sample_type;
static int profile_cpu = -1;
-static char *cwd;
-static int cwdlen;
-
#define PR_SET_NAME 15 /* Set process name */
#define MAX_CPUS 4096
printf("the sleep test took %Ld nsecs\n", T1-T0);
}
-static int
-process_comm_event(event_t *event, unsigned long offset, unsigned long head)
-{
- struct thread *thread = threads__findnew(event->comm.tid);
-
- dump_printf("%p [%p]: perf_event_comm: %s:%d\n",
- (void *)(offset + head),
- (void *)(long)(event->header.size),
- event->comm.comm, event->comm.pid);
-
- if (thread == NULL ||
- thread__set_comm(thread, event->comm.comm)) {
- dump_printf("problem processing perf_event_comm, skipping event.\n");
- return -1;
- }
- total_comm++;
-
- return 0;
-}
-
-
struct raw_event_sample {
u32 size;
char data[0];
process_sched_migrate_task_event(raw, event, cpu, timestamp, thread);
}
-static int
-process_sample_event(event_t *event, unsigned long offset, unsigned long head)
+static int process_sample_event(event_t *event)
{
struct thread *thread;
u64 ip = event->ip.ip;
more_data += sizeof(u64);
}
- dump_printf("%p [%p]: PERF_RECORD_SAMPLE (IP, %d): %d/%d: %p period: %Ld\n",
- (void *)(offset + head),
- (void *)(long)(event->header.size),
+ dump_printf("(IP, %d): %d/%d: %p period: %Ld\n",
event->header.misc,
event->ip.pid, event->ip.tid,
(void *)(long)ip,
return 0;
}
-static int
-process_lost_event(event_t *event __used,
- unsigned long offset __used,
- unsigned long head __used)
+static int process_lost_event(event_t *event __used)
{
nr_lost_chunks++;
nr_lost_events += event->lost.lost;
static struct perf_file_handler file_handler = {
.process_sample_event = process_sample_event,
- .process_comm_event = process_comm_event,
+ .process_comm_event = event__process_comm,
.process_lost_event = process_lost_event,
.sample_type_check = sample_type_check,
};
register_perf_file_handler(&file_handler);
return mmap_dispatch_perf_file(&header, input_name, 0, 0,
- &cwdlen, &cwd);
+ &event__cwdlen, &event__cwd);
}
static void print_bad_events(void)
}
}
-static void event__process_mmap(event_t *self)
-{
- struct thread *thread = threads__findnew(self->mmap.pid);
-
- if (thread != NULL) {
- struct map *map = map__new(&self->mmap, MAP__FUNCTION, NULL, 0);
- if (map != NULL)
- thread__insert_map(thread, map);
- }
-}
-
-static void event__process_comm(event_t *self)
-{
- struct thread *thread = threads__findnew(self->comm.pid);
-
- if (thread != NULL)
- thread__set_comm(thread, self->comm.comm);
-}
-
static int event__process(event_t *event)
{
switch (event->header.type) {
static char const *input_name = "perf.data";
-static unsigned long total = 0;
-static unsigned long total_comm = 0;
-
static struct perf_header *header;
static u64 sample_type;
-static char *cwd;
-static int cwdlen;
-
-
-static int
-process_comm_event(event_t *event, unsigned long offset, unsigned long head)
-{
- struct thread *thread = threads__findnew(event->comm.pid);
-
- dump_printf("%p [%p]: PERF_RECORD_COMM: %s:%d\n",
- (void *)(offset + head),
- (void *)(long)(event->header.size),
- event->comm.comm, event->comm.pid);
-
- if (thread == NULL ||
- thread__set_comm(thread, event->comm.comm)) {
- dump_printf("problem processing PERF_RECORD_COMM, skipping event.\n");
- return -1;
- }
- total_comm++;
-
- return 0;
-}
-
-static int
-process_sample_event(event_t *event, unsigned long offset, unsigned long head)
+static int process_sample_event(event_t *event)
{
u64 ip = event->ip.ip;
u64 timestamp = -1;
more_data += sizeof(u64);
}
- dump_printf("%p [%p]: PERF_RECORD_SAMPLE (IP, %d): %d/%d: %p period: %Ld\n",
- (void *)(offset + head),
- (void *)(long)(event->header.size),
+ dump_printf("(IP, %d): %d/%d: %p period: %Ld\n",
event->header.misc,
event->ip.pid, event->ip.tid,
(void *)(long)ip,
*/
print_event(cpu, raw->data, raw->size, timestamp, thread->comm);
}
- total += period;
+ event__stats.total += period;
return 0;
}
static struct perf_file_handler file_handler = {
.process_sample_event = process_sample_event,
- .process_comm_event = process_comm_event,
+ .process_comm_event = event__process_comm,
.sample_type_check = sample_type_check,
};
register_perf_file_handler(&file_handler);
return mmap_dispatch_perf_file(&header, input_name,
- 0, 0, &cwdlen, &cwd);
+ 0, 0, &event__cwdlen, &event__cwd);
}
static const char * const annotate_usage[] = {
static unsigned long mmap_window = 32;
static char __cwd[PATH_MAX];
-static int
-process_event_stub(event_t *event __used,
- unsigned long offset __used,
- unsigned long head __used)
+static int process_event_stub(event_t *event __used)
{
+ dump_printf(": unhandled!\n");
return 0;
}
curr_handler = handler;
}
+static const char *event__name[] = {
+ [0] = "TOTAL",
+ [PERF_RECORD_MMAP] = "MMAP",
+ [PERF_RECORD_LOST] = "LOST",
+ [PERF_RECORD_COMM] = "COMM",
+ [PERF_RECORD_EXIT] = "EXIT",
+ [PERF_RECORD_THROTTLE] = "THROTTLE",
+ [PERF_RECORD_UNTHROTTLE] = "UNTHROTTLE",
+ [PERF_RECORD_FORK] = "FORK",
+ [PERF_RECORD_READ] = "READ",
+ [PERF_RECORD_SAMPLE] = "SAMPLE",
+};
+
+unsigned long event__total[PERF_RECORD_MAX];
+
+void event__print_totals(void)
+{
+ int i;
+ for (i = 0; i < PERF_RECORD_MAX; ++i)
+ pr_info("%10s events: %10ld\n",
+ event__name[i], event__total[i]);
+}
+
static int
process_event(event_t *event, unsigned long offset, unsigned long head)
{
trace_event(event);
+ if (event->header.type < PERF_RECORD_MAX) {
+ dump_printf("%p [%p]: PERF_RECORD_%s",
+ (void *)(offset + head),
+ (void *)(long)(event->header.size),
+ event__name[event->header.type]);
+ ++event__total[0];
+ ++event__total[event->header.type];
+ }
+
switch (event->header.type) {
case PERF_RECORD_SAMPLE:
- return curr_handler->process_sample_event(event, offset, head);
+ return curr_handler->process_sample_event(event);
case PERF_RECORD_MMAP:
- return curr_handler->process_mmap_event(event, offset, head);
+ return curr_handler->process_mmap_event(event);
case PERF_RECORD_COMM:
- return curr_handler->process_comm_event(event, offset, head);
+ return curr_handler->process_comm_event(event);
case PERF_RECORD_FORK:
- return curr_handler->process_fork_event(event, offset, head);
+ return curr_handler->process_fork_event(event);
case PERF_RECORD_EXIT:
- return curr_handler->process_exit_event(event, offset, head);
+ return curr_handler->process_exit_event(event);
case PERF_RECORD_LOST:
- return curr_handler->process_lost_event(event, offset, head);
+ return curr_handler->process_lost_event(event);
case PERF_RECORD_READ:
- return curr_handler->process_read_event(event, offset, head);
+ return curr_handler->process_read_event(event);
case PERF_RECORD_THROTTLE:
- return curr_handler->process_throttle_event(event, offset, head);
+ return curr_handler->process_throttle_event(event);
case PERF_RECORD_UNTHROTTLE:
- return curr_handler->process_unthrottle_event(event, offset, head);
+ return curr_handler->process_unthrottle_event(event);
default:
curr_handler->total_unknown++;
return -1;
#include "event.h"
#include "header.h"
-typedef int (*event_type_handler_t)(event_t *, unsigned long, unsigned long);
+typedef int (*event_type_handler_t)(event_t *);
struct perf_file_handler {
event_type_handler_t process_sample_event;
#include "event.h"
#include "debug.h"
#include "string.h"
+#include "thread.h"
static pid_t event__synthesize_comm(pid_t pid, int full,
int (*process)(event_t *event))
closedir(proc);
}
+
+char *event__cwd;
+int event__cwdlen;
+
+struct events_stats event__stats;
+
+int event__process_comm(event_t *self)
+{
+ struct thread *thread = threads__findnew(self->comm.pid);
+
+ dump_printf("PERF_RECORD_COMM: %s:%d\n",
+ self->comm.comm, self->comm.pid);
+
+ if (thread == NULL || thread__set_comm(thread, self->comm.comm)) {
+ dump_printf("problem processing PERF_RECORD_COMM, skipping event.\n");
+ return -1;
+ }
+
+ return 0;
+}
+
+int event__process_lost(event_t *self)
+{
+ dump_printf(": id:%Ld: lost:%Ld\n", self->lost.id, self->lost.lost);
+ event__stats.lost += self->lost.lost;
+ return 0;
+}
+
+int event__process_mmap(event_t *self)
+{
+ struct thread *thread = threads__findnew(self->mmap.pid);
+ struct map *map = map__new(&self->mmap, MAP__FUNCTION,
+ event__cwd, event__cwdlen);
+
+ dump_printf(" %d/%d: [%p(%p) @ %p]: %s\n",
+ self->mmap.pid, self->mmap.tid,
+ (void *)(long)self->mmap.start,
+ (void *)(long)self->mmap.len,
+ (void *)(long)self->mmap.pgoff,
+ self->mmap.filename);
+
+ if (thread == NULL || map == NULL)
+ dump_printf("problem processing PERF_RECORD_MMAP, skipping event.\n");
+ else
+ thread__insert_map(thread, map);
+
+ return 0;
+}
+
+int event__process_task(event_t *self)
+{
+ struct thread *thread = threads__findnew(self->fork.pid);
+ struct thread *parent = threads__findnew(self->fork.ppid);
+
+ dump_printf("(%d:%d):(%d:%d)\n", self->fork.pid, self->fork.tid,
+ self->fork.ppid, self->fork.ptid);
+ /*
+ * A thread clone will have the same PID for both parent and child.
+ */
+ if (thread == parent)
+ return 0;
+
+ if (self->header.type == PERF_RECORD_EXIT)
+ return 0;
+
+ if (thread == NULL || parent == NULL ||
+ thread__fork(thread, parent) < 0) {
+ dump_printf("problem processing PERF_RECORD_FORK, skipping event.\n");
+ return -1;
+ }
+
+ return 0;
+}
struct sample_event sample;
} event_t;
+struct events_stats {
+ unsigned long total;
+ unsigned long lost;
+};
+
+void event__print_totals(void);
+
enum map_type {
MAP__FUNCTION = 0,
int event__synthesize_thread(pid_t pid, int (*process)(event_t *event));
void event__synthesize_threads(int (*process)(event_t *event));
+extern char *event__cwd;
+extern int event__cwdlen;
+extern struct events_stats event__stats;
+extern unsigned long event__total[PERF_RECORD_MAX];
+
+int event__process_comm(event_t *self);
+int event__process_lost(event_t *self);
+int event__process_mmap(event_t *self);
+int event__process_task(event_t *self);
+
#endif /* __PERF_RECORD_H */
.min_percent = 0.5
};
-unsigned long total;
-unsigned long total_mmap;
-unsigned long total_comm;
-unsigned long total_fork;
-unsigned long total_unknown;
-unsigned long total_lost;
-
/*
* histogram, sorted on item, collects counts
*/
+++ /dev/null
-#include "process_event.h"
-
-char *cwd;
-int cwdlen;
-
-int
-process_mmap_event(event_t *event, unsigned long offset, unsigned long head)
-{
- struct map *map = map__new(&event->mmap, cwd, cwdlen);
- struct thread *thread = threads__findnew(event->mmap.pid);
-
- dump_printf("%p [%p]: PERF_RECORD_MMAP %d/%d: [%p(%p) @ %p]: %s\n",
- (void *)(offset + head),
- (void *)(long)(event->header.size),
- event->mmap.pid,
- event->mmap.tid,
- (void *)(long)event->mmap.start,
- (void *)(long)event->mmap.len,
- (void *)(long)event->mmap.pgoff,
- event->mmap.filename);
-
- if (thread == NULL || map == NULL) {
- dump_printf("problem processing PERF_RECORD_MMAP, skipping event.\n");
- return 0;
- }
-
- thread__insert_map(thread, map);
- total_mmap++;
-
- return 0;
-
-}
-
-int
-process_comm_event(event_t *event, unsigned long offset, unsigned long head)
-{
- struct thread *thread = threads__findnew(event->comm.pid);
-
- dump_printf("%p [%p]: PERF_RECORD_COMM: %s:%d\n",
- (void *)(offset + head),
- (void *)(long)(event->header.size),
- event->comm.comm, event->comm.pid);
-
- if (thread == NULL ||
- thread__set_comm_adjust(thread, event->comm.comm)) {
- dump_printf("problem processing PERF_RECORD_COMM, skipping event.\n");
- return -1;
- }
- total_comm++;
-
- return 0;
-}
-
+++ /dev/null
-#ifndef __PROCESS_EVENT_H
-#define __PROCESS_EVENT_H
-
-#include "../builtin.h"
-#include "util.h"
-
-#include "color.h"
-#include <linux/list.h>
-#include "cache.h"
-#include <linux/rbtree.h>
-#include "symbol.h"
-#include "string.h"
-
-#include "../perf.h"
-#include "debug.h"
-
-#include "parse-options.h"
-#include "parse-events.h"
-
-#include "thread.h"
-#include "sort.h"
-#include "hist.h"
-
-extern char *cwd;
-extern int cwdlen;
-extern int process_mmap_event(event_t *, unsigned long, unsigned long);
-extern int process_comm_event(event_t *, unsigned long , unsigned long);
-
-#endif /* __PROCESS_H */
+++ /dev/null
-#include "process_events.h"
-
-char *cwd;
-int cwdlen;
-
-int
-process_mmap_event(event_t *event, unsigned long offset, unsigned long head)
-{
- struct map *map = map__new(&event->mmap, MAP__FUNCTION, cwd, cwdlen);
- struct thread *thread = threads__findnew(event->mmap.pid);
-
- dump_printf("%p [%p]: PERF_RECORD_MMAP %d/%d: [%p(%p) @ %p]: %s\n",
- (void *)(offset + head),
- (void *)(long)(event->header.size),
- event->mmap.pid,
- event->mmap.tid,
- (void *)(long)event->mmap.start,
- (void *)(long)event->mmap.len,
- (void *)(long)event->mmap.pgoff,
- event->mmap.filename);
-
- if (thread == NULL || map == NULL) {
- dump_printf("problem processing PERF_RECORD_MMAP, skipping event.\n");
- return 0;
- }
-
- thread__insert_map(thread, map);
- total_mmap++;
-
- return 0;
-}
-
-int
-process_task_event(event_t *event, unsigned long offset, unsigned long head)
-{
- struct thread *thread = threads__findnew(event->fork.pid);
- struct thread *parent = threads__findnew(event->fork.ppid);
-
- dump_printf("%p [%p]: PERF_RECORD_%s: (%d:%d):(%d:%d)\n",
- (void *)(offset + head),
- (void *)(long)(event->header.size),
- event->header.type == PERF_RECORD_FORK ? "FORK" : "EXIT",
- event->fork.pid, event->fork.tid,
- event->fork.ppid, event->fork.ptid);
-
- /*
- * A thread clone will have the same PID for both
- * parent and child.
- */
- if (thread == parent)
- return 0;
-
- if (event->header.type == PERF_RECORD_EXIT)
- return 0;
-
- if (!thread || !parent || thread__fork(thread, parent)) {
- dump_printf("problem processing PERF_RECORD_FORK, skipping event.\n");
- return -1;
- }
- total_fork++;
-
- return 0;
-}
-
+++ /dev/null
-#ifndef __PROCESS_EVENTS_H
-#define __PROCESS_EVENTS_H
-
-#include "../builtin.h"
-
-#include "util.h"
-#include "color.h"
-#include <linux/list.h>
-#include "cache.h"
-#include <linux/rbtree.h>
-#include "symbol.h"
-#include "string.h"
-#include "callchain.h"
-#include "strlist.h"
-#include "values.h"
-
-#include "../perf.h"
-#include "debug.h"
-#include "header.h"
-
-#include "parse-options.h"
-#include "parse-events.h"
-
-#include "data_map.h"
-#include "thread.h"
-#include "sort.h"
-#include "hist.h"
-
-extern char *cwd;
-extern int cwdlen;
-
-extern int process_mmap_event(event_t *, unsigned long , unsigned long);
-extern int process_task_event(event_t *, unsigned long, unsigned long);
-
-#endif /* __PROCESS_EVENTS_H */