~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to tools/perf/scripts/python/Perf-Trace-Util/lib/Perf/Trace/Core.py

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Core.py - Python extension for perf script, core functions
 
2
#
 
3
# Copyright (C) 2010 by Tom Zanussi <tzanussi@gmail.com>
 
4
#
 
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
 
7
# Foundation.
 
8
 
 
9
from collections import defaultdict
 
10
 
 
11
def autodict():
 
12
    return defaultdict(autodict)
 
13
 
 
14
flag_fields = autodict()
 
15
symbolic_fields = autodict()
 
16
 
 
17
def define_flag_field(event_name, field_name, delim):
 
18
    flag_fields[event_name][field_name]['delim'] = delim
 
19
 
 
20
def define_flag_value(event_name, field_name, value, field_str):
 
21
    flag_fields[event_name][field_name]['values'][value] = field_str
 
22
 
 
23
def define_symbolic_field(event_name, field_name):
 
24
    # nothing to do, really
 
25
    pass
 
26
 
 
27
def define_symbolic_value(event_name, field_name, value, field_str):
 
28
    symbolic_fields[event_name][field_name]['values'][value] = field_str
 
29
 
 
30
def flag_str(event_name, field_name, value):
 
31
    string = ""
 
32
 
 
33
    if flag_fields[event_name][field_name]:
 
34
        print_delim = 0
 
35
        keys = flag_fields[event_name][field_name]['values'].keys()
 
36
        keys.sort()
 
37
        for idx in keys:
 
38
            if not value and not idx:
 
39
                string += flag_fields[event_name][field_name]['values'][idx]
 
40
                break
 
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]
 
45
                print_delim = 1
 
46
                value &= ~idx
 
47
 
 
48
    return string
 
49
 
 
50
def symbol_str(event_name, field_name, value):
 
51
    string = ""
 
52
 
 
53
    if symbolic_fields[event_name][field_name]:
 
54
        keys = symbolic_fields[event_name][field_name]['values'].keys()
 
55
        keys.sort()
 
56
        for idx in keys:
 
57
            if not value and not idx:
 
58
                string = symbolic_fields[event_name][field_name]['values'][idx]
 
59
                break
 
60
            if (value == idx):
 
61
                string = symbolic_fields[event_name][field_name]['values'][idx]
 
62
                break
 
63
 
 
64
    return string
 
65
 
 
66
trace_flags = { 0x00: "NONE", \
 
67
                    0x01: "IRQS_OFF", \
 
68
                    0x02: "IRQS_NOSUPPORT", \
 
69
                    0x04: "NEED_RESCHED", \
 
70
                    0x08: "HARDIRQ", \
 
71
                    0x10: "SOFTIRQ" }
 
72
 
 
73
def trace_flag_str(value):
 
74
    string = ""
 
75
    print_delim = 0
 
76
 
 
77
    keys = trace_flags.keys()
 
78
 
 
79
    for idx in keys:
 
80
        if not value and not idx:
 
81
            string += "NONE"
 
82
            break
 
83
 
 
84
        if idx and (value & idx) == idx:
 
85
            if print_delim:
 
86
                string += " | ";
 
87
            string += trace_flags[idx]
 
88
            print_delim = 1
 
89
            value &= ~idx
 
90
 
 
91
    return string
 
92
 
 
93
 
 
94
def taskState(state):
 
95
        states = {
 
96
                0 : "R",
 
97
                1 : "S",
 
98
                2 : "D",
 
99
                64: "DEAD"
 
100
        }
 
101
 
 
102
        if state not in states:
 
103
                return "Unknown"
 
104
 
 
105
        return states[state]
 
106
 
 
107
 
 
108
class EventHeaders:
 
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
 
116
 
 
117
        def ts(self):
 
118
                return (self.secs * (10 ** 9)) + self.nsecs
 
119
 
 
120
        def ts_format(self):
 
121
                return "%d.%d" % (self.secs, int(self.nsecs / 1000))