aboutsummaryrefslogtreecommitdiff
path: root/process
diff options
context:
space:
mode:
authorArjan van de Ven <arjan@linux.intel.com>2010-08-19 21:13:49 -0700
committerArjan van de Ven <arjan@linux.intel.com>2010-08-19 21:13:49 -0700
commita1203ee199aa7e14a86b1f4c16ee3cdc2c29f021 (patch)
tree1c53b57def1e4fedc4263db33169f0843cb5a882 /process
parent9b406c80f380ec9926e45dd27711a23b2647889f (diff)
downloadpowertop-a1203ee199aa7e14a86b1f4c16ee3cdc2c29f021.tar.gz
better wakeup accounting
Diffstat (limited to 'process')
-rw-r--r--process/do_process.cpp12
-rw-r--r--process/process.cpp3
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;