1
# Core.py - Python extension for perf script, core functions
3
# Copyright (C) 2010 by Tom Zanussi <tzanussi@gmail.com>
5
# This software may be distributed under the terms of the GNU General
6
# Public License ("GPL") version 2 as published by the Free Software
9
from collections import defaultdict
12
return defaultdict(autodict)
14
flag_fields = autodict()
15
symbolic_fields = autodict()
17
def define_flag_field(event_name, field_name, delim):
18
flag_fields[event_name][field_name]['delim'] = delim
20
def define_flag_value(event_name, field_name, value, field_str):
21
flag_fields[event_name][field_name]['values'][value] = field_str
23
def define_symbolic_field(event_name, field_name):
24
# nothing to do, really
27
def define_symbolic_value(event_name, field_name, value, field_str):
28
symbolic_fields[event_name][field_name]['values'][value] = field_str
30
def flag_str(event_name, field_name, value):
33
if flag_fields[event_name][field_name]:
35
keys = flag_fields[event_name][field_name]['values'].keys()
38
if not value and not idx:
39
string += flag_fields[event_name][field_name]['values'][idx]
41
if idx and (value & idx) == idx:
42
if print_delim and flag_fields[event_name][field_name]['delim']:
43
string += " " + flag_fields[event_name][field_name]['delim'] + " "
44
string += flag_fields[event_name][field_name]['values'][idx]
50
def symbol_str(event_name, field_name, value):
53
if symbolic_fields[event_name][field_name]:
54
keys = symbolic_fields[event_name][field_name]['values'].keys()
57
if not value and not idx:
58
string = symbolic_fields[event_name][field_name]['values'][idx]
61
string = symbolic_fields[event_name][field_name]['values'][idx]
66
trace_flags = { 0x00: "NONE", \
68
0x02: "IRQS_NOSUPPORT", \
69
0x04: "NEED_RESCHED", \
73
def trace_flag_str(value):
77
keys = trace_flags.keys()
80
if not value and not idx:
84
if idx and (value & idx) == idx:
87
string += trace_flags[idx]
102
if state not in states:
109
def __init__(self, common_cpu, common_secs, common_nsecs,
110
common_pid, common_comm):
111
self.cpu = common_cpu
112
self.secs = common_secs
113
self.nsecs = common_nsecs
114
self.pid = common_pid
115
self.comm = common_comm
118
return (self.secs * (10 ** 9)) + self.nsecs
121
return "%d.%d" % (self.secs, int(self.nsecs / 1000))