def do_event_menu_select(proj, event): try: a = event.predicted except AttributeError: return 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 = 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)
def do_event_runtime_pm_status(proj,event): if proj.first_ts == 0: proj.first_ts = event.timestamp-1 p = proj.generic_find_process(0,"runtime_pm:%s %s"%(event.driver,event.dev),"runtime_pm") if len(p['start_ts'])>len(p['end_ts']): p['end_ts'].append(event.timestamp) if event.status!="SUSPENDED": p['start_ts'].append(int(event.timestamp)) p['types'].append(colors.get_color_id("rpm_%s"%(event.status.lower()))) p['cpus'].append(event.common_cpu)
def do_event_sched_switch(self,event): # @todo differenciate between kernel and user process prev = self.generic_find_process(event.prev_pid,event.prev_comm,"user_process",event.timestamp-100000000) next = self.generic_find_process(event.next_pid,event.next_comm,"user_process",event.timestamp-100000000) self.generic_process_end(prev,event) if event.__dict__.has_key('prev_state') and event.prev_state == 'R':# mark prev to be waiting for cpu prev['start_ts'].append(event.timestamp) prev['types'].append(colors.get_color_id("waiting_for_cpu")) prev['cpus'].append(event.common_cpu) self.generic_process_start(next,event)
def do_event_runtime_pm_usage(proj, event): p = proj.generic_find_process(0,"runtime_pm_usage:%s %s"%(event.driver,event.dev),"runtime_pm") if len(p['start_ts'])>len(p['end_ts']): p['end_ts'].append(event.timestamp) if event.usage!=0: p['start_ts'].append(int(event.timestamp)) usagecolor = event.usage if usagecolor<0: usagecolor = -1 if usagecolor>6: usagecolor = 6 p['types'].append(colors.get_color_id("rpm_usage=%d"%(usagecolor))) p['cpus'].append(event.common_cpu)
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)]))
def do_event_sched_switch(self, event): # @todo differenciate between kernel and user process prev = self.generic_find_process(event.prev_pid, event.prev_comm, "user_process", event.timestamp - 100000000) next = self.generic_find_process(event.next_pid, event.next_comm, "user_process", event.timestamp - 100000000) self.generic_process_end(prev, event) if event.__dict__.has_key('prev_state') and ( event.prev_state == 'R' or event.prev_state == 'R+'): # mark prev to be waiting for cpu prev['start_ts'].append(event.timestamp) prev['cpus'].append(event.common_cpu) if event.prev_state == 'R': prev['types'].append(colors.get_color_id("waiting_for_cpu")) else: prev['types'].append( colors.get_color_id("waiting_for_cpu_rplus")) self.generic_process_start(next, event)
def do_event_menu_select(proj,event): try: a= event.predicted except AttributeError: return 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 = 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)
def do_event_cpu_idle(self,event): self.ensure_cpu_allocated(event.cpuid) tc = self.tmp_c_states[event.cpuid] if event.state != 4294967295 : 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 cpu_idle end" if self.missed_power_end == 10: print "warning: missed cpu_idle end: wont warn anymore!" tc['start_ts'].append(event.timestamp) tc['types'].append(colors.get_color_id(c_state_table[int(event.state)])) else : if len(tc['start_ts'])>len(tc['end_ts']): tc['end_ts'].append(event.timestamp)
def start_cpu_idle(self, event): try: tc = self.tmp_c_states[event.cpuid] except: self.ensure_cpu_allocated(event.cpuid) tc = self.tmp_c_states[event.cpuid] 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 cpu_idle end" if self.missed_power_end == 10: print "warning: missed cpu_idle end: wont warn anymore!" name = c_state_table[int(event.state)] tc['start_ts'].append(event.timestamp) tc['types'].append(colors.get_color_id(name)) process = self.generic_find_process(0,"cpu%d/%s"%(event.cpuid,name),"cpuidle") self.generic_process_start(process,event, build_p_stack=False)