diff options
Diffstat (limited to 'process')
-rw-r--r-- | process/do_process.cpp | 12 | ||||
-rw-r--r-- | process/process.cpp | 3 |
2 files changed, 14 insertions, 1 deletions
diff --git a/process/do_process.cpp b/process/do_process.cpp index 7807226..529ef04 100644 --- a/process/do_process.cpp +++ b/process/do_process.cpp @@ -172,7 +172,9 @@ void perf_process_bundle::handle_trace_point(int type, void *trace, int cpu, uin /* start new process */ new_proc->schedule_thread(time, sw->next_pid); - change_blame(cpu, new_proc, LEVEL_PROCESS); + + if (sw->next_pid) + change_blame(cpu, new_proc, LEVEL_PROCESS); consume_blame(cpu); } @@ -268,6 +270,12 @@ void perf_process_bundle::handle_trace_point(int type, void *trace, int cpu, uin tmr = (struct timer_cancel *)trace; } + if (strcmp(event_name, "power:power_start") == 0) { + set_wakeup_pending(cpu); + } + if (strcmp(event_name, "power:power_end") == 0) { + consume_blame(cpu); + } } void start_process_measurement(void) @@ -282,6 +290,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("power:power_start"); + perf_events->add_event("power:power_end"); } perf_events->start(); diff --git a/process/process.cpp b/process/process.cpp index e985b14..b4418d0 100644 --- a/process/process.cpp +++ b/process/process.cpp @@ -24,6 +24,9 @@ uint64_t process::deschedule_thread(uint64_t time, int thread_id) uint64_t delta; delta = time - running_since; + + if (thread_id == 0) + delta = 0; accumulated_runtime += delta; running = 0; |