File Index
Files and directories
Sign in
FILE

Core.py

File preview with syntax highlighting.

linux-6.19.14/tools/perf/scripts/python/Perf-Trace-Util/lib/Perf/Trace/Core.py PYTHON
  1# Core.py - Python extension for perf script, core functions
  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
  9from collections import defaultdict
 10
 11def autodict():
 12    return defaultdict(autodict)
 13
 14flag_fields = autodict()
 15symbolic_fields = autodict()
 16
 17def define_flag_field(event_name, field_name, delim):
 18    flag_fields[event_name][field_name]['delim'] = delim
 19
 20def define_flag_value(event_name, field_name, value, field_str):
 21    flag_fields[event_name][field_name]['values'][value] = field_str
 22
 23def define_symbolic_field(event_name, field_name):
 24    # nothing to do, really
 25    pass
 26
 27def define_symbolic_value(event_name, field_name, value, field_str):
 28    symbolic_fields[event_name][field_name]['values'][value] = field_str
 29
 30def flag_str(event_name, field_name, value):
 31    string = ""
 32
 33    if flag_fields[event_name][field_name]:
 34        print_delim = 0
 35        for idx in sorted(flag_fields[event_name][field_name]['values']):
 36            if not value and not idx:
 37                string += flag_fields[event_name][field_name]['values'][idx]
 38                break
 39            if idx and (value & idx) == idx:
 40                if print_delim and flag_fields[event_name][field_name]['delim']:
 41                    string += " " + flag_fields[event_name][field_name]['delim'] + " "
 42                string += flag_fields[event_name][field_name]['values'][idx]
 43                print_delim = 1
 44                value &= ~idx
 45
 46    return string
 47
 48def symbol_str(event_name, field_name, value):
 49    string = ""
 50
 51    if symbolic_fields[event_name][field_name]:
 52        for idx in sorted(symbolic_fields[event_name][field_name]['values']):
 53            if not value and not idx:
 54                string = symbolic_fields[event_name][field_name]['values'][idx]
 55                break
 56            if (value == idx):
 57                string = symbolic_fields[event_name][field_name]['values'][idx]
 58                break
 59
 60    return string
 61
 62trace_flags = { 0x00: "NONE", \
 63                    0x01: "IRQS_OFF", \
 64                    0x02: "IRQS_NOSUPPORT", \
 65                    0x04: "NEED_RESCHED", \
 66                    0x08: "HARDIRQ", \
 67                    0x10: "SOFTIRQ" }
 68
 69def trace_flag_str(value):
 70    string = ""
 71    print_delim = 0
 72
 73    for idx in trace_flags:
 74        if not value and not idx:
 75            string += "NONE"
 76            break
 77
 78        if idx and (value & idx) == idx:
 79            if print_delim:
 80                string += " | ";
 81            string += trace_flags[idx]
 82            print_delim = 1
 83            value &= ~idx
 84
 85    return string
 86
 87
 88def taskState(state):
 89	states = {
 90		0 : "R",
 91		1 : "S",
 92		2 : "D",
 93		64: "DEAD"
 94	}
 95
 96	if state not in states:
 97		return "Unknown"
 98
 99	return states[state]
100
101
102class EventHeaders:
103	def __init__(self, common_cpu, common_secs, common_nsecs,
104		     common_pid, common_comm, common_callchain):
105		self.cpu = common_cpu
106		self.secs = common_secs
107		self.nsecs = common_nsecs
108		self.pid = common_pid
109		self.comm = common_comm
110		self.callchain = common_callchain
111
112	def ts(self):
113		return (self.secs * (10 ** 9)) + self.nsecs
114
115	def ts_format(self):
116		return "%d.%d" % (self.secs, int(self.nsecs / 1000))
~/ Read-only file preview.