| """Test Module to perform an extra execution of the benchmark in the linux |
| perf tool.""" |
| from litsupport import shellcommand |
| from litsupport import testplan |
| from litsupport.modules import run_under |
| |
| |
| def _mutateCommandLine(context, commandline): |
| context.profilefile = context.tmpBase + ".perf_data" |
| # Storing profile file in context allows other modules to be aware of it. |
| cmd = shellcommand.parse(commandline) |
| cmd.wrap( |
| "perf", |
| [ |
| "record", |
| "-e", |
| context.config.perf_profile_events, |
| "-o", |
| context.profilefile, |
| "--", |
| ], |
| ) |
| if cmd.stdout is None: |
| cmd.stdout = "/dev/null" |
| else: |
| cmd.stdout += ".perfrecord" |
| if cmd.stderr is None: |
| cmd.stderr = "/dev/null" |
| else: |
| cmd.stderr += ".perfrecord" |
| return cmd.toCommandline() |
| |
| |
| def mutatePlan(context, plan): |
| script = context.parsed_runscript |
| if context.config.run_under: |
| script = testplan.mutateScript(context, script, run_under.mutateCommandLine) |
| script = testplan.mutateScript(context, script, _mutateCommandLine) |
| plan.profilescript += script |
| plan.metric_collectors.append(lambda context: {"profile": context.profilefile}) |