aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Tardy <pierre.tardy@intel.com>2010-12-01 01:30:31 +0100
committerPierre Tardy <pierre.tardy@intel.com>2010-12-01 01:33:31 +0100
commit5ca9c6cb0d382832006703fff1416e0cbd7300aa (patch)
tree0d552f88d24e849b553ed14572fa9e00ac8cd825
parent4432783dd5b26ece6ecdcc9736f711eb3014bec2 (diff)
menu_select plugin
useful to see what the menu governor is predicting Signed-off-by: Pierre Tardy <pierre.tardy@intel.com>
-rw-r--r--timechart/plugins/menu_select.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/timechart/plugins/menu_select.py b/timechart/plugins/menu_select.py
new file mode 100644
index 0000000..c9f58fd
--- /dev/null
+++ b/timechart/plugins/menu_select.py
@@ -0,0 +1,54 @@
+from timechart.plugin import *
+from timechart import colors
+from timechart.model import tcProcess
+
+class menu_select(plugin):
+ additional_colors = """
+menu_select_bg #e5bebe
+menu_select #ee0000
+"""
+ additional_ftrace_parsers = [
+ ( 'menu_select', 'expected:%d predicted %d state:%s %d','expected','predicted','next_state','num_state'),
+ ]
+ additional_process_types = {
+ "menu_select":(tcProcess, POWER_CLASS),
+ }
+ @staticmethod
+ def do_event_menu_select(proj,event):
+ found = 0
+ i = 0
+ while not found:
+ p = proj.generic_find_process(0,"menu_select_cpu%d_%d_predicted"%(event.common_cpu,i),"menu_select")
+ p2 = proj.generic_find_process(0,"menu_select_cpu%d_%d_expected"%(event.common_cpu,i),"menu_select")
+ if len(p['end_ts'])>0 and len(p2['end_ts'])>0 and (p['end_ts'][-1]>event.timestamp or p2['end_ts'][-1]>event.timestamp):
+ i+=1
+ continue
+ found = 1
+ p['start_ts'].append(int(event.timestamp))
+ p['end_ts'].append(int(event.timestamp+event.predicted))
+ p['types'].append(colors.get_color_id("menu_select"))
+ p['cpus'].append(event.common_cpu)
+ p['linenumbers'].append(event.linenumber)
+
+ p = p2
+ p['start_ts'].append(int(event.timestamp))
+ p['end_ts'].append(int(event.timestamp+event.expected))
+ p['types'].append(colors.get_color_id("menu_select"))
+ p['cpus'].append(event.common_cpu)
+ p['linenumbers'].append(event.linenumber)
+plugin_register(menu_select)
+
+menu_select_patch="""
+diff --git a/drivers/cpuidle/governors/menu.c b/drivers/cpuidle/governors/menu.c
+index 1b12870..4b18893 100644
+--- a/drivers/cpuidle/governors/menu.c
++++ b/drivers/cpuidle/governors/menu.c
+@@ -292,6 +292,7 @@ static int menu_select(struct cpuidle_device *dev)
+ data->exit_us = s->exit_latency;
+ data->last_state_idx = i;
+ }
++ trace_printk("expected:%u predicted %llu state:%s %d\n",data->expected_us, data->predicted_us, dev->states[data->last_state_idx].name, dev->state_count);
+
+ return data->last_state_idx;
+ }
+"""