aboutsummaryrefslogtreecommitdiff
path: root/process/do_process.cpp
diff options
context:
space:
mode:
authorArjan van de Ven <arjan@linux.intel.com>2010-08-20 17:12:46 -0400
committerArjan van de Ven <arjan@linux.intel.com>2010-08-20 17:12:46 -0400
commitb8cd3a0113280240425b808d0c7673b3f5fe606f (patch)
treee40a4b9e9c9f9eaa45e2e4506de39882480ed5bd /process/do_process.cpp
parent836f13f70da0ed16108dd2bef01eb7ff698a44df (diff)
downloadpowertop-b8cd3a0113280240425b808d0c7673b3f5fe606f.tar.gz
add hrtimers
Diffstat (limited to 'process/do_process.cpp')
-rw-r--r--process/do_process.cpp34
1 files changed, 33 insertions, 1 deletions
diff --git a/process/do_process.cpp b/process/do_process.cpp
index bd702da..8fe0edd 100644
--- a/process/do_process.cpp
+++ b/process/do_process.cpp
@@ -277,7 +277,8 @@ void perf_process_bundle::handle_trace_point(int type, void *trace, int cpu, uin
timer->fire(time, (uint64_t)tmr->timer);
- change_blame(cpu, timer, LEVEL_TIMER);
+ if (strcmp(timer->handler, "delayed_work_timer_fn"))
+ change_blame(cpu, timer, LEVEL_TIMER);
}
if (strcmp(event_name, "timer:timer_expire_exit") == 0) {
class timer *timer;
@@ -294,6 +295,35 @@ void perf_process_bundle::handle_trace_point(int type, void *trace, int cpu, uin
t = timer->done(time, (uint64_t)tmr->timer);
consumer_child_time(cpu, t);
}
+ if (strcmp(event_name, "timer:hrtimer_expire_entry") == 0) {
+ struct hrtimer_expire *tmr;
+ class timer *timer;
+ tmr = (struct hrtimer_expire *)trace;
+
+ timer = find_create_timer((uint64_t)tmr->function);
+
+ push_consumer(cpu, timer);
+ timer->fire(time, (uint64_t)tmr->timer);
+
+
+ if (strcmp(timer->handler, "delayed_work_timer_fn"))
+ change_blame(cpu, timer, LEVEL_TIMER);
+ }
+ if (strcmp(event_name, "timer:hrtimer_expire_exit") == 0) {
+ class timer *timer;
+ struct timer_cancel *tmr;
+ uint64_t t;
+ tmr = (struct timer_cancel *)trace;
+
+ timer = (class timer *) current_consumer(cpu);
+ if (timer && strcmp(timer->name(), "timer")) {
+ printf("not a timer\n");
+ return;
+ }
+ pop_consumer(cpu);
+ t = timer->done(time, (uint64_t)tmr->timer);
+ consumer_child_time(cpu, t);
+ }
if (strcmp(event_name, "power:power_start") == 0) {
set_wakeup_pending(cpu);
}
@@ -314,6 +344,8 @@ void start_process_measurement(void)
perf_events->add_event("irq:softirq_exit");
perf_events->add_event("timer:timer_expire_entry");
perf_events->add_event("timer:timer_expire_exit");
+ perf_events->add_event("timer:hrtimer_expire_entry");
+ perf_events->add_event("timer:hrtimer_expire_exit");
perf_events->add_event("power:power_start");
perf_events->add_event("power:power_end");
}