import os import re from autotest_lib.client.bin import test from autotest_lib.client.bin import utils import tracers import base_tracer class tracing_microbenchmark(test.test): version = 1 preserve_srcdir = True def setup(self): os.chdir(self.srcdir) utils.system('make CROSS_COMPILE=""') def initialize(self, tracer='ftrace', calls=100000, **kwargs): self.job.require_gcc() tracer_class = getattr(tracers, tracer) if not issubclass(tracer_class, base_tracer.Tracer): raise TypeError self.tracer = tracer_class() getuid_microbench = os.path.join(self.srcdir, 'getuid_microbench') self.cmd = '%s %d' % (getuid_microbench, calls) def warmup(self, buffer_size_kb=8000, **kwargs): self.tracer.warmup(buffer_size_kb) def cleanup(self): self.tracer.cleanup() def run_once(self, **kwargs): self.results = {} self.tracer.start_tracing() self.cmd_result = utils.run(self.cmd) self.tracer.stop_tracing() self.tracer.gather_stats(self.results) self.tracer.reset_tracing() def postprocess_iteration(self): result_re = re.compile(r'(?P\d+) calls ' r'in (?P