sw:vec:test_runner: Add instruction count into test runner script Collect e2e instruction count in the test_runner script so the info can be collected by dashboard Change-Id: I61423b345c94ba9c8203cd0f9a22ece3b471c5b9
diff --git a/scripts/test_runner.py b/scripts/test_runner.py index 383b384..3650cbb 100755 --- a/scripts/test_runner.py +++ b/scripts/test_runner.py
@@ -45,6 +45,8 @@ "ReadByte from non existing peripheral", "File does not exist" ] + # stats collected command for renode + self.renode_end_command = None def run(self, timeout=1000): """ Run the simulation command and quit the simulation.""" @@ -66,6 +68,9 @@ exc = pexpect.exceptions.EOF(message) exc.__cause__ = None raise exc from run_hit_timeout + if self.renode_end_command: + self.child.send(self.renode_end_command) + self.child.expect("(springbok)", timeout=timeout) self.child.send("\nq\n") self.child.expect(pexpect.EOF, timeout=timeout) self.child.close() @@ -125,6 +130,7 @@ ] self.renode_simulator_cmd = " ".join(self.renode_args) super().__init__(self.renode_simulator_cmd) + self.renode_end_command = "\nsysbus.cpu2 ExecutedInstructions\n" def run(self, timeout=120): file_desc, script_path = tempfile.mkstemp(suffix=".resc") @@ -172,10 +178,21 @@ } def cleanup_message(message: str) -> str: - """ Clean up the message to get rid of the non-ascii code generated by - Mono. """ + """ Clean up the message generated by Mono. + + The non-ascii code generated by Mono. + + Convert the opcode count from hex to decimal. + """ ansi_escape = re.compile(r"\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])") output = ansi_escape.sub("", message) + op_count_out = re.compile( + r"(?P<op_count>0x[0-9A-Fa-f]+)\r\r\r\n\(springbok\)") + op_count = op_count_out.search(output) + if op_count: + op_count = int(op_count.group(1), 16) + output = op_count_out.sub( + f"Renode total instruction count: {op_count}\n", output) return output def main():