Source code for benchbuild.extensions.time
import logging
from benchbuild.extensions import base
from benchbuild.utils.cmd import time
from benchbuild.utils import db
LOG = logging.getLogger(__name__)
[docs]class RunWithTime(base.Extension):
"""Wrap a command with time and store the timings in the database."""
def __call__(self, binary_command, *args, may_wrap=True, **kwargs):
time_tag = "BENCHBUILD: "
if may_wrap:
run_cmd = time["-f", time_tag + "%U-%S-%e", binary_command]
def handle_timing(run_infos):
"""Takes care of the formating for the timing statistics."""
from benchbuild.utils import schema as s
session = s.Session()
for run_info in run_infos:
if may_wrap:
timings = fetch_time_output(time_tag,
time_tag + "{:g}-{:g}-{:g}",
run_info.stderr.split("\n"))
if timings:
db.persist_time(run_info.db_run, session, timings)
else:
LOG.warning("No timing information found.")
session.commit()
return run_infos
res = self.call_next(run_cmd, *args, **kwargs)
return handle_timing(res)
def __str__(self):
return "Time execution of wrapped binary"
[docs]def fetch_time_output(marker, format_s, ins):
"""
Fetch the output /usr/bin/time from a.
Args:
marker: The marker that limits the time output
format_s: The format string used to parse the timings
ins: A list of lines we look for the output.
Returns:
A list of timing tuples
"""
from parse import parse
timings = [x for x in ins if marker in x]
res = [parse(format_s, t) for t in timings]
return [_f for _f in res if _f]