1# Util.py - Python extension for perf trace, miscellaneous utility code
2#
3# Copyright (C) 2010 by Tom Zanussi <[email protected]>
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
9import errno, os
10
11NSECS_PER_SEC    = 1000000000
12
13def avg(total, n):
14    return total / n
15
16def nsecs(secs, nsecs):
17    return secs * NSECS_PER_SEC + nsecs
18
19def nsecs_secs(nsecs):
20    return nsecs / NSECS_PER_SEC
21
22def nsecs_nsecs(nsecs):
23    return nsecs % NSECS_PER_SEC
24
25def nsecs_str(nsecs):
26    str = "%5u.%09u" % (nsecs_secs(nsecs), nsecs_nsecs(nsecs)),
27    return str
28
29def clear_term():
30    print("\x1b[H\x1b[2J")
31
32audit_package_warned = False
33
34try:
35	import audit
36	machine_to_id = {
37		'x86_64': audit.MACH_86_64,
38		'alpha'	: audit.MACH_ALPHA,
39		'armeb'	: audit.MACH_ARMEB,
40		'ia64'	: audit.MACH_IA64,
41		'ppc'	: audit.MACH_PPC,
42		'ppc64'	: audit.MACH_PPC64,
43		's390'	: audit.MACH_S390,
44		's390x'	: audit.MACH_S390X,
45		'i386'	: audit.MACH_X86,
46		'i586'	: audit.MACH_X86,
47		'i686'	: audit.MACH_X86,
48	}
49	machine_id = machine_to_id[os.uname()[4]]
50except:
51	if not audit_package_warned:
52		audit_package_warned = True
53		print "Install the audit-libs-python package to get syscall names"
54
55def syscall_name(id):
56	try:
57		return audit.audit_syscall_to_name(id, machine_id)
58	except:
59		return str(id)
60
61def strerror(nr):
62	try:
63		return errno.errorcode[abs(nr)]
64	except:
65		return "Unknown %d errno" % nr
66