[Concept,5/5] test: trace: Handle trace-cmd caller-info output format
Commit Message
From: Simon Glass <simon.glass@canonical.com>
Newer versions of trace-cmd append a "<-- caller" suffix to function
trace lines, e.g.:
u-boot-1 0..... 60.805596: function: initf_malloc <-- initcall_run_f
This results in 7 fields per line instead of 5 after splitting, so the
existing `len(items) == 5` filter rejects every line, leaving the vals
dictionary empty and causing the test to fail.
Change the filter to `len(items) >= 5` so that the function name (at
index 4) and timestamp (at index 2) are extracted regardless of trailing
fields.
Co-developed-by: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Simon Glass <simon.glass@canonical.com>
---
test/py/tests/test_trace.py | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
@@ -144,14 +144,13 @@ def check_function(ubman, fname, proftool, map_fname, trace_dat):
cmd = f"trace-cmd report -l {trace_dat} |grep -E '(initf_|initr_)'"
out = utils.run_and_log(ubman, ['sh', '-c', cmd])
- # Format:
+ # Format (older trace-cmd):
# u-boot-1 0..... 60.805596: function: initf_malloc
- # u-boot-1 0..... 60.805597: function: initf_malloc
- # u-boot-1 0..... 60.805601: function: initf_bootstage
- # u-boot-1 0..... 60.805607: function: initf_bootstage
+ # Format (newer trace-cmd, includes caller):
+ # u-boot-1 0..... 60.805596: function: initf_malloc <-- initcall_run_f
lines = [line.replace(':', '').split() for line in out.splitlines()]
- vals = {items[4]: float(items[2]) for items in lines if len(items) == 5}
+ vals = {items[4]: float(items[2]) for items in lines if len(items) >= 5}
base = None
max_delta = 0
for timestamp in vals.values():