1
from timechart.plugin import *
2
from timechart import colors
3
from timechart.model import tcProcess
5
class menu_select(plugin):
6
additional_colors = """
10
additional_ftrace_parsers = [
11
( 'menu_select', 'expected:%d predicted %d state:%s %d','expected','predicted','next_state','num_state'),
13
additional_process_types = {
14
"menu_select":(tcProcess, POWER_CLASS),
17
def do_event_menu_select(proj,event):
20
except AttributeError:
25
p = proj.generic_find_process(0,"menu_select_cpu%d_%d_predicted"%(event.common_cpu,i),"menu_select")
26
p2 = proj.generic_find_process(0,"menu_select_cpu%d_%d_expected"%(event.common_cpu,i),"menu_select")
27
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):
31
p['start_ts'].append(int(event.timestamp))
32
p['end_ts'].append(int(event.timestamp+event.predicted))
33
p['types'].append(colors.get_color_id("menu_select"))
34
p['cpus'].append(event.common_cpu)
37
p['start_ts'].append(int(event.timestamp))
38
p['end_ts'].append(int(event.timestamp+event.expected))
39
p['types'].append(colors.get_color_id("menu_select"))
40
p['cpus'].append(event.common_cpu)
41
plugin_register(menu_select)
44
diff --git a/drivers/cpuidle/governors/menu.c b/drivers/cpuidle/governors/menu.c
45
index 1b12870..4b18893 100644
46
--- a/drivers/cpuidle/governors/menu.c
47
+++ b/drivers/cpuidle/governors/menu.c
48
@@ -292,6 +292,7 @@ static int menu_select(struct cpuidle_device *dev)
49
data->exit_us = s->exit_latency;
50
data->last_state_idx = i;
52
+ 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);
54
return data->last_state_idx;