1e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# perf script event handlers, generated by perf script -g python
2e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# (c) 2010, Tom Zanussi <tzanussi@gmail.com>
3e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# Licensed under the terms of the GNU GPL License version 2
4e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#
5e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# This script tests basic functionality such as flag and symbol
6e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# strings, common_xxx() calls back into perf, begin, end, unhandled
7e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# events, etc.  Basically, if this script runs successfully and
8e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# displays expected results, Python scripting support should be ok.
9e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
10e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengimport os
11e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengimport sys
12e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
13e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengsys.path.append(os.environ['PERF_EXEC_PATH'] + \
14e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	'/scripts/python/Perf-Trace-Util/lib/Perf/Trace')
15e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
16e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengfrom Core import *
17e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengfrom perf_trace_context import *
18e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
19e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengunhandled = autodict()
20e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
21e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdef trace_begin():
22e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	print "trace_begin"
23e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	pass
24e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
25e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdef trace_end():
26e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        print_unhandled()
27e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
28e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdef irq__softirq_entry(event_name, context, common_cpu,
29e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	common_secs, common_nsecs, common_pid, common_comm,
30e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	vec):
31e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		print_header(event_name, common_cpu, common_secs, common_nsecs,
32e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			common_pid, common_comm)
33e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
34e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng                print_uncommon(context)
35e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
36e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		print "vec=%s\n" % \
37e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		(symbol_str("irq__softirq_entry", "vec", vec)),
38e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
39e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdef kmem__kmalloc(event_name, context, common_cpu,
40e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	common_secs, common_nsecs, common_pid, common_comm,
41e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	call_site, ptr, bytes_req, bytes_alloc,
42e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	gfp_flags):
43e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		print_header(event_name, common_cpu, common_secs, common_nsecs,
44e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			common_pid, common_comm)
45e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
46e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng                print_uncommon(context)
47e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
48e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		print "call_site=%u, ptr=%u, bytes_req=%u, " \
49e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		"bytes_alloc=%u, gfp_flags=%s\n" % \
50e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		(call_site, ptr, bytes_req, bytes_alloc,
51e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
52e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		flag_str("kmem__kmalloc", "gfp_flags", gfp_flags)),
53e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
54e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdef trace_unhandled(event_name, context, event_fields_dict):
55e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    try:
56e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        unhandled[event_name] += 1
57e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    except TypeError:
58e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        unhandled[event_name] = 1
59e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
60e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdef print_header(event_name, cpu, secs, nsecs, pid, comm):
61e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	print "%-20s %5u %05u.%09u %8u %-20s " % \
62e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	(event_name, cpu, secs, nsecs, pid, comm),
63e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
64e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# print trace fields not included in handler args
65e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdef print_uncommon(context):
66e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    print "common_preempt_count=%d, common_flags=%s, common_lock_depth=%d, " \
67e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        % (common_pc(context), trace_flag_str(common_flags(context)), \
68e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng               common_lock_depth(context))
69e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
70e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdef print_unhandled():
71e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    keys = unhandled.keys()
72e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    if not keys:
73e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        return
74e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
75e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    print "\nunhandled events:\n\n",
76e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
77e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    print "%-40s  %10s\n" % ("event", "count"),
78e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    print "%-40s  %10s\n" % ("----------------------------------------", \
79e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng                                 "-----------"),
80e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
81e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    for event_name in keys:
82e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	print "%-40s  %10d\n" % (event_name, unhandled[event_name])
83