From d1361e05977f70f815ff4807c754c181b1c47086 Mon Sep 17 00:00:00 2001 From: Pierre Tardy Date: Mon, 28 Feb 2011 16:26:20 +0100 Subject: cpuidle: move legacy cpuidle support to plugin This adds more consistency cpuidle is still handled a bit too much as a special case. Signed-off-by: Pierre Tardy --- timechart/colors.py | 9 --------- timechart/model.py | 33 ------------------------------- timechart/plugins/cpuidle.py | 47 +++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 46 insertions(+), 43 deletions(-) diff --git a/timechart/colors.py b/timechart/colors.py index e41a226..c8cb7f8 100644 --- a/timechart/colors.py +++ b/timechart/colors.py @@ -14,15 +14,6 @@ event_bg kernel_process_bg #F0F5A3 user_process_bg #E1DFFF selected_bg #ACD7E6 -C0 #000000 -C1 #bbbbff -C2 #7777ff -C3 #5555ff -C4 #3333ff -C5 #1111ff -C6 #0000ff -S0i3 #0011ff -S0i1 #0022ff idle #000000 waiting_for_cpu #ffff88 running #555555 diff --git a/timechart/model.py b/timechart/model.py index 5b00a14..c3e5c20 100644 --- a/timechart/model.py +++ b/timechart/model.py @@ -14,7 +14,6 @@ import colors import numpy import sys -c_state_table = ["C0","C1","C2","C4","C6","S0i1","S0i3"] def _pretty_time(time): if time > 1000000: time = time/1000000. @@ -337,38 +336,6 @@ class tcProject(HasTraits): self.generic_process_start(process,event) self.generic_process_end(process,event) - def do_event_power_frequency(self,event): - self.ensure_cpu_allocated(event.common_cpu) - if event.type==2:# p_state - tc = self.tmp_p_states[event.common_cpu] - tc['start_ts'].append(event.timestamp) - tc['linenumbers'].append(event.linenumber) - tc['types'].append(event.state) - - def do_event_power_start(self,event): - self.ensure_cpu_allocated(event.common_cpu) - if event.type==1:# c_state - tc = self.tmp_c_states[event.common_cpu] - if len(tc['start_ts'])>len(tc['end_ts']): - tc['end_ts'].append(event.timestamp) - self.missed_power_end +=1 - if self.missed_power_end < 10: - print "warning: missed power_end" - if self.missed_power_end == 10: - print "warning: missed power_end: wont warn anymore!" - tc['start_ts'].append(event.timestamp) - tc['types'].append(colors.get_color_id(c_state_table[int(event.state)])) - tc['linenumbers'].append(event.linenumber) - - def do_event_power_end(self,event): - self.ensure_cpu_allocated(event.common_cpu) - - tc = self.tmp_c_states[event.common_cpu] - if len(tc['start_ts'])>len(tc['end_ts']): - tc['end_ts'].append(event.timestamp) - - - def do_function_default(self,event): process = self.generic_find_process(0,"kernel function:%s"%(event.callee),"function") self.generic_process_start(process,event) diff --git a/timechart/plugins/cpuidle.py b/timechart/plugins/cpuidle.py index 1fb0dde..5564d15 100644 --- a/timechart/plugins/cpuidle.py +++ b/timechart/plugins/cpuidle.py @@ -1,9 +1,20 @@ from timechart.plugin import * from timechart import colors -from timechart.model import tcProcess, c_state_table +from timechart.model import tcProcess + +c_state_table = ["C0","C1","C2","C4","C6","S0i1","S0i3"] class cpu_idle(plugin): additional_colors = """ +C0 #000000 +C1 #bbbbff +C2 #7777ff +C3 #5555ff +C4 #3333ff +C5 #1111ff +C6 #0000ff +S0i3 #0011ff +S0i1 #0022ff """ additional_ftrace_parsers = [ ('cpu_idle', 'state=%d cpu_id=%d', 'state', 'cpuid'), @@ -12,6 +23,7 @@ class cpu_idle(plugin): additional_process_types = { } + # stable event support @staticmethod def do_event_cpu_idle(self,event): self.ensure_cpu_allocated(event.cpuid) @@ -30,6 +42,39 @@ class cpu_idle(plugin): else : if len(tc['start_ts'])>len(tc['end_ts']): tc['end_ts'].append(event.timestamp) + # legacy event support + @staticmethod + def do_event_power_start(self,event): + self.ensure_cpu_allocated(event.common_cpu) + if event.type==1:# c_state + tc = self.tmp_c_states[event.common_cpu] + if len(tc['start_ts'])>len(tc['end_ts']): + tc['end_ts'].append(event.timestamp) + self.missed_power_end +=1 + if self.missed_power_end < 10: + print "warning: missed power_end" + if self.missed_power_end == 10: + print "warning: missed power_end: wont warn anymore!" + tc['start_ts'].append(event.timestamp) + tc['types'].append(colors.get_color_id(c_state_table[int(event.state)])) + tc['linenumbers'].append(event.linenumber) + + @staticmethod + def do_event_power_end(self,event): + self.ensure_cpu_allocated(event.common_cpu) + + tc = self.tmp_c_states[event.common_cpu] + if len(tc['start_ts'])>len(tc['end_ts']): + tc['end_ts'].append(event.timestamp) + + @staticmethod + def do_event_power_frequency(self,event): + self.ensure_cpu_allocated(event.common_cpu) + if event.type==2:# p_state + tc = self.tmp_p_states[event.common_cpu] + tc['start_ts'].append(event.timestamp) + tc['linenumbers'].append(event.linenumber) + tc['types'].append(event.state) plugin_register(cpu_idle) -- cgit v1.2.3