| # perf script event handlers, generated by perf script -g python | |
| # (c) 2010, Tom Zanussi <tzanussi@gmail.com> | |
| # Licensed under the terms of the GNU GPL License version 2 | |
| # | |
| # This script tests basic functionality such as flag and symbol | |
| # strings, common_xxx() calls back into perf, begin, end, unhandled | |
| # events, etc. Basically, if this script runs successfully and | |
| # displays expected results, Python scripting support should be ok. | |
| from __future__ import print_function | |
| import os | |
| import sys | |
| sys.path.append(os.environ['PERF_EXEC_PATH'] + \ | |
| '/scripts/python/Perf-Trace-Util/lib/Perf/Trace') | |
| from Core import * | |
| from perf_trace_context import * | |
| unhandled = autodict() | |
| def trace_begin(): | |
| print("trace_begin") | |
| pass | |
| def trace_end(): | |
| print_unhandled() | |
| def irq__softirq_entry(event_name, context, common_cpu, | |
| common_secs, common_nsecs, common_pid, common_comm, | |
| common_callchain, vec): | |
| print_header(event_name, common_cpu, common_secs, common_nsecs, | |
| common_pid, common_comm) | |
| print_uncommon(context) | |
| print("vec=%s" % (symbol_str("irq__softirq_entry", "vec", vec))) | |
| def kmem__kmalloc(event_name, context, common_cpu, | |
| common_secs, common_nsecs, common_pid, common_comm, | |
| common_callchain, call_site, ptr, bytes_req, bytes_alloc, | |
| gfp_flags): | |
| print_header(event_name, common_cpu, common_secs, common_nsecs, | |
| common_pid, common_comm) | |
| print_uncommon(context) | |
| print("call_site=%u, ptr=%u, bytes_req=%u, " | |
| "bytes_alloc=%u, gfp_flags=%s" % | |
| (call_site, ptr, bytes_req, bytes_alloc, | |
| flag_str("kmem__kmalloc", "gfp_flags", gfp_flags))) | |
| def trace_unhandled(event_name, context, event_fields_dict): | |
| try: | |
| unhandled[event_name] += 1 | |
| except TypeError: | |
| unhandled[event_name] = 1 | |
| def print_header(event_name, cpu, secs, nsecs, pid, comm): | |
| print("%-20s %5u %05u.%09u %8u %-20s " % | |
| (event_name, cpu, secs, nsecs, pid, comm), | |
| end=' ') | |
| # print trace fields not included in handler args | |
| def print_uncommon(context): | |
| print("common_preempt_count=%d, common_flags=%s, " | |
| "common_lock_depth=%d, " % | |
| (common_pc(context), trace_flag_str(common_flags(context)), | |
| common_lock_depth(context))) | |
| def print_unhandled(): | |
| keys = unhandled.keys() | |
| if not keys: | |
| return | |
| print("\nunhandled events:\n") | |
| print("%-40s %10s" % ("event", "count")) | |
| print("%-40s %10s" % ("----------------------------------------", | |
| "-----------")) | |
| for event_name in keys: | |
| print("%-40s %10d\n" % (event_name, unhandled[event_name])) |