1765532c8SArnaldo Carvalho de Melo# perf script event handlers, generated by perf script -g python
24d161f03STom Zanussi# (c) 2010, Tom Zanussi <[email protected]>
34d161f03STom Zanussi# Licensed under the terms of the GNU GPL License version 2
44d161f03STom Zanussi#
54d161f03STom Zanussi# This script tests basic functionality such as flag and symbol
64d161f03STom Zanussi# strings, common_xxx() calls back into perf, begin, end, unhandled
74d161f03STom Zanussi# events, etc.  Basically, if this script runs successfully and
84d161f03STom Zanussi# displays expected results, Python scripting support should be ok.
94d161f03STom Zanussi
10*57e604b1STony Jonesfrom __future__ import print_function
11*57e604b1STony Jones
124d161f03STom Zanussiimport os
134d161f03STom Zanussiimport sys
144d161f03STom Zanussi
154d161f03STom Zanussisys.path.append(os.environ['PERF_EXEC_PATH'] + \
164d161f03STom Zanussi	'/scripts/python/Perf-Trace-Util/lib/Perf/Trace')
174d161f03STom Zanussi
184d161f03STom Zanussifrom Core import *
194d161f03STom Zanussifrom perf_trace_context import *
204d161f03STom Zanussi
214d161f03STom Zanussiunhandled = autodict()
224d161f03STom Zanussi
234d161f03STom Zanussidef trace_begin():
24*57e604b1STony Jones	print("trace_begin")
254d161f03STom Zanussi	pass
264d161f03STom Zanussi
274d161f03STom Zanussidef trace_end():
284d161f03STom Zanussi	print_unhandled()
294d161f03STom Zanussi
304d161f03STom Zanussidef irq__softirq_entry(event_name, context, common_cpu,
314d161f03STom Zanussi		       common_secs, common_nsecs, common_pid, common_comm,
320f5f5bcdSJoseph Schuchart		       common_callchain, vec):
334d161f03STom Zanussi	print_header(event_name, common_cpu, common_secs, common_nsecs,
344d161f03STom Zanussi		common_pid, common_comm)
354d161f03STom Zanussi
364d161f03STom Zanussi	print_uncommon(context)
374d161f03STom Zanussi
38*57e604b1STony Jones	print("vec=%s" % (symbol_str("irq__softirq_entry", "vec", vec)))
394d161f03STom Zanussi
404d161f03STom Zanussidef kmem__kmalloc(event_name, context, common_cpu,
414d161f03STom Zanussi		  common_secs, common_nsecs, common_pid, common_comm,
420f5f5bcdSJoseph Schuchart		  common_callchain, call_site, ptr, bytes_req, bytes_alloc,
434d161f03STom Zanussi		  gfp_flags):
444d161f03STom Zanussi	print_header(event_name, common_cpu, common_secs, common_nsecs,
454d161f03STom Zanussi		common_pid, common_comm)
464d161f03STom Zanussi
474d161f03STom Zanussi	print_uncommon(context)
484d161f03STom Zanussi
49*57e604b1STony Jones	print("call_site=%u, ptr=%u, bytes_req=%u, "
50*57e604b1STony Jones		"bytes_alloc=%u, gfp_flags=%s" %
514d161f03STom Zanussi		(call_site, ptr, bytes_req, bytes_alloc,
52*57e604b1STony Jones		flag_str("kmem__kmalloc", "gfp_flags", gfp_flags)))
534d161f03STom Zanussi
54c0251485SPierre Tardydef trace_unhandled(event_name, context, event_fields_dict):
554d161f03STom Zanussi	try:
564d161f03STom Zanussi		unhandled[event_name] += 1
574d161f03STom Zanussi	except TypeError:
584d161f03STom Zanussi		unhandled[event_name] = 1
594d161f03STom Zanussi
604d161f03STom Zanussidef print_header(event_name, cpu, secs, nsecs, pid, comm):
61*57e604b1STony Jones	print("%-20s %5u %05u.%09u %8u %-20s " %
624d161f03STom Zanussi		(event_name, cpu, secs, nsecs, pid, comm),
63*57e604b1STony Jones		end=' ')
644d161f03STom Zanussi
654d161f03STom Zanussi# print trace fields not included in handler args
664d161f03STom Zanussidef print_uncommon(context):
67*57e604b1STony Jones	print("common_preempt_count=%d, common_flags=%s, "
68*57e604b1STony Jones		"common_lock_depth=%d, " %
69b504d7f6STony Jones		(common_pc(context), trace_flag_str(common_flags(context)),
70*57e604b1STony Jones		common_lock_depth(context)))
714d161f03STom Zanussi
724d161f03STom Zanussidef print_unhandled():
734d161f03STom Zanussi	keys = unhandled.keys()
744d161f03STom Zanussi	if not keys:
754d161f03STom Zanussi		return
764d161f03STom Zanussi
77*57e604b1STony Jones	print("\nunhandled events:\n")
784d161f03STom Zanussi
79*57e604b1STony Jones	print("%-40s  %10s" % ("event", "count"))
80*57e604b1STony Jones	print("%-40s  %10s" % ("----------------------------------------",
81*57e604b1STony Jones				"-----------"))
824d161f03STom Zanussi
834d161f03STom Zanussi	for event_name in keys:
84*57e604b1STony Jones		print("%-40s  %10d\n" % (event_name, unhandled[event_name]))
85