simpletrace: changed naming of edict and idtoname to improve readability

Readability is subjective, but I've expanded the naming of the variables
and arguments, to help with understanding for new eyes on the code.

Signed-off-by: Mads Ynddal <m.ynddal@samsung.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-id: 20230926103436.25700-5-mads@ynddal.dk
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
Mads Ynddal 2023-09-26 12:34:26 +02:00 committed by Stefan Hajnoczi
parent f7bd4f0237
commit 3b71b61e9f

View file

@ -40,17 +40,17 @@ def read_header(fobj, hfmt):
return None return None
return struct.unpack(hfmt, hdr) return struct.unpack(hfmt, hdr)
def get_record(edict, idtoname, rechdr, fobj): def get_record(event_mapping, event_id_to_name, rechdr, fobj):
"""Deserialize a trace record from a file into a tuple """Deserialize a trace record from a file into a tuple
(name, timestamp, pid, arg1, ..., arg6).""" (name, timestamp, pid, arg1, ..., arg6)."""
if rechdr is None: if rechdr is None:
return None return None
if rechdr[0] != dropped_event_id: if rechdr[0] != dropped_event_id:
event_id = rechdr[0] event_id = rechdr[0]
name = idtoname[event_id] name = event_id_to_name[event_id]
rec = (name, rechdr[1], rechdr[3]) rec = (name, rechdr[1], rechdr[3])
try: try:
event = edict[name] event = event_mapping[name]
except KeyError as e: except KeyError as e:
sys.stderr.write('%s event is logged but is not declared ' \ sys.stderr.write('%s event is logged but is not declared ' \
'in the trace events file, try using ' \ 'in the trace events file, try using ' \
@ -79,10 +79,10 @@ def get_mapping(fobj):
return (event_id, name) return (event_id, name)
def read_record(edict, idtoname, fobj): def read_record(event_mapping, event_id_to_name, fobj):
"""Deserialize a trace record from a file into a tuple (event_num, timestamp, pid, arg1, ..., arg6).""" """Deserialize a trace record from a file into a tuple (event_num, timestamp, pid, arg1, ..., arg6)."""
rechdr = read_header(fobj, rec_header_fmt) rechdr = read_header(fobj, rec_header_fmt)
return get_record(edict, idtoname, rechdr, fobj) return get_record(event_mapping, event_id_to_name, rechdr, fobj)
def read_trace_header(fobj): def read_trace_header(fobj):
"""Read and verify trace file header""" """Read and verify trace file header"""
@ -103,14 +103,14 @@ def read_trace_header(fobj):
raise ValueError('Log format %d not supported with this QEMU release!' raise ValueError('Log format %d not supported with this QEMU release!'
% log_version) % log_version)
def read_trace_records(edict, idtoname, fobj): def read_trace_records(event_mapping, event_id_to_name, fobj):
"""Deserialize trace records from a file, yielding record tuples (event_num, timestamp, pid, arg1, ..., arg6). """Deserialize trace records from a file, yielding record tuples (event_num, timestamp, pid, arg1, ..., arg6).
Note that `idtoname` is modified if the file contains mapping records. Note that `event_id_to_name` is modified if the file contains mapping records.
Args: Args:
edict (str -> Event): events dict, indexed by name event_mapping (str -> Event): events dict, indexed by name
idtoname (int -> str): event names dict, indexed by event ID event_id_to_name (int -> str): event names dict, indexed by event ID
fobj (file): input file fobj (file): input file
""" """
@ -122,9 +122,9 @@ def read_trace_records(edict, idtoname, fobj):
(rectype, ) = struct.unpack('=Q', t) (rectype, ) = struct.unpack('=Q', t)
if rectype == record_type_mapping: if rectype == record_type_mapping:
event_id, name = get_mapping(fobj) event_id, name = get_mapping(fobj)
idtoname[event_id] = name event_id_to_name[event_id] = name
else: else:
rec = read_record(edict, idtoname, fobj) rec = read_record(event_mapping, event_id_to_name, fobj)
yield rec yield rec
@ -201,16 +201,16 @@ def process(events, log, analyzer, read_header=True):
frameinfo = inspect.getframeinfo(inspect.currentframe()) frameinfo = inspect.getframeinfo(inspect.currentframe())
dropped_event = Event.build("Dropped_Event(uint64_t num_events_dropped)", dropped_event = Event.build("Dropped_Event(uint64_t num_events_dropped)",
frameinfo.lineno + 1, frameinfo.filename) frameinfo.lineno + 1, frameinfo.filename)
edict = {"dropped": dropped_event} event_mapping = {"dropped": dropped_event}
idtoname = {dropped_event_id: "dropped"} event_id_to_name = {dropped_event_id: "dropped"}
for event in events_list: for event in events_list:
edict[event.name] = event event_mapping[event.name] = event
# If there is no header assume event ID mapping matches events list # If there is no header assume event ID mapping matches events list
if not read_header: if not read_header:
for event_id, event in enumerate(events_list): for event_id, event in enumerate(events_list):
idtoname[event_id] = event.name event_id_to_name[event_id] = event.name
def build_fn(analyzer, event): def build_fn(analyzer, event):
if isinstance(event, str): if isinstance(event, str):
@ -234,9 +234,9 @@ def process(events, log, analyzer, read_header=True):
analyzer.begin() analyzer.begin()
fn_cache = {} fn_cache = {}
for rec in read_trace_records(edict, idtoname, log): for rec in read_trace_records(event_mapping, event_id_to_name, log):
event_num = rec[0] event_num = rec[0]
event = edict[event_num] event = event_mapping[event_num]
if event_num not in fn_cache: if event_num not in fn_cache:
fn_cache[event_num] = build_fn(analyzer, event) fn_cache[event_num] = build_fn(analyzer, event)
fn_cache[event_num](event, rec) fn_cache[event_num](event, rec)