summaryrefslogtreecommitdiffstats
path: root/tools/perf/util
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2009-12-13 19:50:27 -0200
committerIngo Molnar <mingo@elte.hu>2009-12-14 16:57:16 +0100
commitec913369733923dbfd6bdff5953a918107059701 (patch)
tree4c4397f5de47bb1352bfed874919bb438b6e4816 /tools/perf/util
parent13df45ca1c9a430d5f53862854070fcc324e015c (diff)
perf session: Reduce the number of parms to perf_session__process_events
By having the cwd/cwdlen in the perf_session struct and full_paths in perf_event_ops. Now its just a matter of passing the ops. Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Frédéric Weisbecker <fweisbec@gmail.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Paul Mackerras <paulus@samba.org> LKML-Reference: <1260741029-4430-4-git-send-email-acme@infradead.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'tools/perf/util')
-rw-r--r--tools/perf/util/data_map.c32
-rw-r--r--tools/perf/util/event.c8
-rw-r--r--tools/perf/util/session.c4
-rw-r--r--tools/perf/util/session.h7
4 files changed, 28 insertions, 23 deletions
diff --git a/tools/perf/util/data_map.c b/tools/perf/util/data_map.c
index 36e3bfe7319..ba2eb2ce018 100644
--- a/tools/perf/util/data_map.c
+++ b/tools/perf/util/data_map.c
@@ -4,9 +4,6 @@
#include "thread.h"
#include "session.h"
-static unsigned long mmap_window = 32;
-static char __cwd[PATH_MAX];
-
static int process_event_stub(event_t *event __used,
struct perf_session *session __used)
{
@@ -141,8 +138,7 @@ static struct thread *perf_session__register_idle_thread(struct perf_session *se
}
int perf_session__process_events(struct perf_session *self,
- struct perf_event_ops *ops,
- int full_paths, int *cwdlen, char **cwd)
+ struct perf_event_ops *ops)
{
int err;
unsigned long head, shift;
@@ -168,17 +164,21 @@ int perf_session__process_events(struct perf_session *self,
ops->sample_type_check(sample_type) < 0)
goto out_err;
- if (!full_paths) {
- if (getcwd(__cwd, sizeof(__cwd)) == NULL) {
- pr_err("failed to get the current directory\n");
+ if (!ops->full_paths) {
+ char bf[PATH_MAX];
+
+ if (getcwd(bf, sizeof(bf)) == NULL) {
err = -errno;
+out_getcwd_err:
+ pr_err("failed to get the current directory\n");
goto out_err;
}
- *cwd = __cwd;
- *cwdlen = strlen(*cwd);
- } else {
- *cwd = NULL;
- *cwdlen = 0;
+ self->cwd = strdup(bf);
+ if (self->cwd == NULL) {
+ err = -ENOMEM;
+ goto out_getcwd_err;
+ }
+ self->cwdlen = strlen(self->cwd);
}
shift = page_size * (head / page_size);
@@ -186,7 +186,7 @@ int perf_session__process_events(struct perf_session *self,
head -= shift;
remap:
- buf = mmap(NULL, page_size * mmap_window, PROT_READ,
+ buf = mmap(NULL, page_size * self->mmap_window, PROT_READ,
MAP_SHARED, self->fd, offset);
if (buf == MAP_FAILED) {
pr_err("failed to mmap file\n");
@@ -201,12 +201,12 @@ more:
if (!size)
size = 8;
- if (head + event->header.size >= page_size * mmap_window) {
+ if (head + event->header.size >= page_size * self->mmap_window) {
int munmap_ret;
shift = page_size * (head / page_size);
- munmap_ret = munmap(buf, page_size * mmap_window);
+ munmap_ret = munmap(buf, page_size * self->mmap_window);
assert(munmap_ret == 0);
offset += shift;
diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c
index e2c489533c6..40d8d842a21 100644
--- a/tools/perf/util/event.c
+++ b/tools/perf/util/event.c
@@ -1,6 +1,7 @@
#include <linux/types.h>
#include "event.h"
#include "debug.h"
+#include "session.h"
#include "string.h"
#include "thread.h"
@@ -186,9 +187,6 @@ void event__synthesize_threads(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 perf_session *session __used)
@@ -212,11 +210,11 @@ int event__process_lost(event_t *self, struct perf_session *session __used)
return 0;
}
-int event__process_mmap(event_t *self, struct perf_session *session __used)
+int event__process_mmap(event_t *self, struct perf_session *session)
{
struct thread *thread = threads__findnew(self->mmap.pid);
struct map *map = map__new(&self->mmap, MAP__FUNCTION,
- event__cwd, event__cwdlen);
+ session->cwd, session->cwdlen);
dump_printf(" %d/%d: [%p(%p) @ %p]: %s\n",
self->mmap.pid, self->mmap.tid,
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index 39766868d43..534a8770ee7 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -61,6 +61,9 @@ struct perf_session *perf_session__new(const char *filename, int mode,
goto out_delete;
memcpy(self->filename, filename, len);
+ self->mmap_window = 32;
+ self->cwd = NULL;
+ self->cwdlen = 0;
if (mode == O_RDONLY && perf_session__open(self, force) < 0) {
perf_session__delete(self);
@@ -77,5 +80,6 @@ void perf_session__delete(struct perf_session *self)
{
perf_header__exit(&self->header);
close(self->fd);
+ free(self->cwd);
free(self);
}
diff --git a/tools/perf/util/session.h b/tools/perf/util/session.h
index 7a4c32c545f..1e0da9ca31a 100644
--- a/tools/perf/util/session.h
+++ b/tools/perf/util/session.h
@@ -7,7 +7,10 @@
struct perf_session {
struct perf_header header;
unsigned long size;
+ unsigned long mmap_window;
int fd;
+ int cwdlen;
+ char *cwd;
char filename[0];
};
@@ -25,6 +28,7 @@ struct perf_event_ops {
event_op process_unthrottle_event;
int (*sample_type_check)(u64 sample_type);
unsigned long total_unknown;
+ bool full_paths;
};
struct perf_session *perf_session__new(const char *filename, int mode,
@@ -32,8 +36,7 @@ struct perf_session *perf_session__new(const char *filename, int mode,
void perf_session__delete(struct perf_session *self);
int perf_session__process_events(struct perf_session *self,
- struct perf_event_ops *event_ops,
- int full_paths, int *cwdlen, char **cwd);
+ struct perf_event_ops *event_ops);
int perf_header__read_build_ids(int input, u64 offset, u64 file_size);