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 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
(name, timestamp, pid, arg1, ..., arg6)."""
if rechdr is None:
return None
if rechdr[0] != dropped_event_id:
event_id = rechdr[0]
name = idtoname[event_id]
name = event_id_to_name[event_id]
rec = (name, rechdr[1], rechdr[3])
try:
event = edict[name]
event = event_mapping[name]
except KeyError as e:
sys.stderr.write('%s event is logged but is not declared ' \
'in the trace events file, try using ' \
@ -79,10 +79,10 @@ def get_mapping(fobj):
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)."""
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):
"""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!'
% 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).
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:
edict (str -> Event): events dict, indexed by name
idtoname (int -> str): event names dict, indexed by event ID
event_mapping (str -> Event): events dict, indexed by name
event_id_to_name (int -> str): event names dict, indexed by event ID
fobj (file): input file
"""
@ -122,9 +122,9 @@ def read_trace_records(edict, idtoname, fobj):
(rectype, ) = struct.unpack('=Q', t)
if rectype == record_type_mapping:
event_id, name = get_mapping(fobj)
idtoname[event_id] = name
event_id_to_name[event_id] = name
else:
rec = read_record(edict, idtoname, fobj)
rec = read_record(event_mapping, event_id_to_name, fobj)
yield rec
@ -201,16 +201,16 @@ def process(events, log, analyzer, read_header=True):
frameinfo = inspect.getframeinfo(inspect.currentframe())
dropped_event = Event.build("Dropped_Event(uint64_t num_events_dropped)",
frameinfo.lineno + 1, frameinfo.filename)
edict = {"dropped": dropped_event}
idtoname = {dropped_event_id: "dropped"}
event_mapping = {"dropped": dropped_event}
event_id_to_name = {dropped_event_id: "dropped"}
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 not read_header:
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):
if isinstance(event, str):
@ -234,9 +234,9 @@ def build_fn(analyzer, event):
analyzer.begin()
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 = edict[event_num]
event = event_mapping[event_num]
if event_num not in fn_cache:
fn_cache[event_num] = build_fn(analyzer, event)
fn_cache[event_num](event, rec)