aboutsummaryrefslogtreecommitdiff
path: root/perf
diff options
context:
space:
mode:
authorArjan van de Ven <arjan@linux.intel.com>2010-08-09 13:40:19 -0400
committerArjan van de Ven <arjan@linux.intel.com>2010-08-09 13:40:19 -0400
commitcb2e75eae87de17c0b683d730ddbc571a28c947f (patch)
tree1f88f80abb8a25977e50b9a4e47f8dba9de3d87f /perf
parentc8089be3f04d986146ebb1429ff482569b5e6588 (diff)
downloadpowertop-cb2e75eae87de17c0b683d730ddbc571a28c947f.tar.gz
make the perf stuff actually work
Diffstat (limited to 'perf')
-rw-r--r--perf/perf.cpp19
-rw-r--r--perf/perf.h10
2 files changed, 24 insertions, 5 deletions
diff --git a/perf/perf.cpp b/perf/perf.cpp
index d99dc08..64ef32d 100644
--- a/perf/perf.cpp
+++ b/perf/perf.cpp
@@ -53,9 +53,12 @@ static int get_trace_type(const char *eventname)
char filename[4096];
sprintf(filename, "/sys/kernel/debug/tracing/events/%s/id", eventname);
- file.open("/sys/kernel/debug/tracing/events/%s/id", ios::in);
- if (!file)
- return 0;
+
+ file.open(filename, ios::in);
+ if (!file) {
+ cout << "Invalid trace type " << eventname << "\n";
+ return -1;
+ }
file >> this_trace;
@@ -154,10 +157,15 @@ void perf_event::set_event_name(const char *event_name)
perf_event::perf_event(const char *event_name, int buffer_size)
{
set_event_name(event_name);
+ perf_fd = -1;
bufsize = buffer_size;
}
-
+perf_event::perf_event(void)
+{
+ perf_fd = -1;
+ bufsize = 128;
+}
void perf_event::start(void)
{
@@ -200,7 +208,8 @@ void perf_event::process(void)
void perf_event::clear(void)
{
munmap(perf_mmap, (bufsize+1)*getpagesize());
- close(perf_fd);
+ if (perf_fd != -1)
+ close(perf_fd);
perf_fd = -1;
}
diff --git a/perf/perf.h b/perf/perf.h
index db3c3ef..43f3f80 100644
--- a/perf/perf.h
+++ b/perf/perf.h
@@ -1,3 +1,7 @@
+#ifndef _INCLUDE_GUARD_PERF_H_
+#define _INCLUDE_GUARD_PERF_H_
+
+#include <iostream>
using namespace std;
@@ -16,7 +20,10 @@ protected:
void create_perf_event(char *eventname);
public:
+ perf_event(void);
perf_event(const char *event_name, int buffer_size = 128);
+
+
void set_event_name(const char *event_name);
void start(void);
@@ -27,3 +34,6 @@ public:
virtual void handle_event(struct perf_event_header *header) { };
};
+
+
+#endif \ No newline at end of file