diff options
author | Arjan van de Ven <arjan@linux.intel.com> | 2010-08-19 21:13:49 -0700 |
---|---|---|
committer | Arjan van de Ven <arjan@linux.intel.com> | 2010-08-19 21:13:49 -0700 |
commit | a1203ee199aa7e14a86b1f4c16ee3cdc2c29f021 (patch) | |
tree | 1c53b57def1e4fedc4263db33169f0843cb5a882 /process | |
parent | 9b406c80f380ec9926e45dd27711a23b2647889f (diff) | |
download | powertop-a1203ee199aa7e14a86b1f4c16ee3cdc2c29f021.tar.gz |
better wakeup accounting
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; |