]>
Commit | Line | Data |
---|---|---|
765532c8 | 1 | # Util.py - Python extension for perf script, miscellaneous utility code |
7e4b21b8 TZ |
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 | ||
6cc73614 ACM |
9 | import errno, os |
10 | ||
00204c33 ACM |
11 | FUTEX_WAIT = 0 |
12 | FUTEX_WAKE = 1 | |
13 | FUTEX_PRIVATE_FLAG = 128 | |
14 | FUTEX_CLOCK_REALTIME = 256 | |
15 | FUTEX_CMD_MASK = ~(FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME) | |
16 | ||
7e4b21b8 TZ |
17 | NSECS_PER_SEC = 1000000000 |
18 | ||
19 | def avg(total, n): | |
20 | return total / n | |
21 | ||
22 | def nsecs(secs, nsecs): | |
23 | return secs * NSECS_PER_SEC + nsecs | |
24 | ||
25 | def nsecs_secs(nsecs): | |
26 | return nsecs / NSECS_PER_SEC | |
27 | ||
28 | def nsecs_nsecs(nsecs): | |
29 | return nsecs % NSECS_PER_SEC | |
30 | ||
31 | def nsecs_str(nsecs): | |
32 | str = "%5u.%09u" % (nsecs_secs(nsecs), nsecs_nsecs(nsecs)), | |
33 | return str | |
47902f36 | 34 | |
00204c33 ACM |
35 | def add_stats(dict, key, value): |
36 | if not dict.has_key(key): | |
37 | dict[key] = (value, value, value, 1) | |
38 | else: | |
39 | min, max, avg, count = dict[key] | |
40 | if value < min: | |
41 | min = value | |
42 | if value > max: | |
43 | max = value | |
44 | avg = (avg + value) / 2 | |
45 | dict[key] = (min, max, avg, count + 1) | |
46 | ||
47902f36 TZ |
47 | def clear_term(): |
48 | print("\x1b[H\x1b[2J") | |
6cc73614 ACM |
49 | |
50 | audit_package_warned = False | |
51 | ||
52 | try: | |
53 | import audit | |
54 | machine_to_id = { | |
55 | 'x86_64': audit.MACH_86_64, | |
56 | 'alpha' : audit.MACH_ALPHA, | |
6cc73614 ACM |
57 | 'ia64' : audit.MACH_IA64, |
58 | 'ppc' : audit.MACH_PPC, | |
59 | 'ppc64' : audit.MACH_PPC64, | |
60 | 's390' : audit.MACH_S390, | |
61 | 's390x' : audit.MACH_S390X, | |
62 | 'i386' : audit.MACH_X86, | |
63 | 'i586' : audit.MACH_X86, | |
64 | 'i686' : audit.MACH_X86, | |
65 | } | |
7f6c1bd5 ACM |
66 | try: |
67 | machine_to_id['armeb'] = audit.MACH_ARMEB | |
68 | except: | |
69 | pass | |
6cc73614 ACM |
70 | machine_id = machine_to_id[os.uname()[4]] |
71 | except: | |
72 | if not audit_package_warned: | |
73 | audit_package_warned = True | |
74 | print "Install the audit-libs-python package to get syscall names" | |
75 | ||
76 | def syscall_name(id): | |
77 | try: | |
78 | return audit.audit_syscall_to_name(id, machine_id) | |
79 | except: | |
80 | return str(id) | |
81 | ||
82 | def strerror(nr): | |
83 | try: | |
84 | return errno.errorcode[abs(nr)] | |
85 | except: | |
86 | return "Unknown %d errno" % nr |