xref: /aosp_15_r20/external/autotest/client/tests/compilebench/compilebench.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1*9c5db199SXin Liimport os
2*9c5db199SXin Liimport re
3*9c5db199SXin Lifrom autotest_lib.client.bin import test, utils
4*9c5db199SXin Li
5*9c5db199SXin Litest_name = 'compilebench'
6*9c5db199SXin Li
7*9c5db199SXin Liclass compilebench(test.test):
8*9c5db199SXin Li    version = 1
9*9c5db199SXin Li
10*9c5db199SXin Li    def setup(self, tarball = 'compilebench-0.6.tar.gz'):
11*9c5db199SXin Li        self.tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir)
12*9c5db199SXin Li        utils.extract_tarball_to_dir(self.tarball, self.srcdir)
13*9c5db199SXin Li        os.chdir(self.srcdir)
14*9c5db199SXin Li        utils.system('patch -p1 < ../compilebench.patch')
15*9c5db199SXin Li
16*9c5db199SXin Li
17*9c5db199SXin Li    def run_once(self, dir=None, num_kernel_trees=10, num_random_runs=30):
18*9c5db199SXin Li        if not dir:
19*9c5db199SXin Li            dir = self.tmpdir
20*9c5db199SXin Li
21*9c5db199SXin Li        cmd = "%s -D %s -s %s -i %d -r %d" % (
22*9c5db199SXin Li                         os.path.join(self.srcdir, test_name),
23*9c5db199SXin Li                         dir,
24*9c5db199SXin Li                         self.srcdir,
25*9c5db199SXin Li                         num_kernel_trees,
26*9c5db199SXin Li                         num_random_runs)
27*9c5db199SXin Li
28*9c5db199SXin Li        output = utils.system_output(cmd)
29*9c5db199SXin Li
30*9c5db199SXin Li        self.__format_results(output)
31*9c5db199SXin Li
32*9c5db199SXin Li
33*9c5db199SXin Li    def __format_results(self, output):
34*9c5db199SXin Li        keylist = {}
35*9c5db199SXin Li
36*9c5db199SXin Li        THROUGHPUT = "MB_s"
37*9c5db199SXin Li        TIME       = "secs"
38*9c5db199SXin Li
39*9c5db199SXin Li        run_type_list = (
40*9c5db199SXin Li            ('intial create', THROUGHPUT, 6, 'initial_create'),
41*9c5db199SXin Li            ('create', THROUGHPUT, 5, 'new_create'),
42*9c5db199SXin Li            ('patch', THROUGHPUT, 5, 'patch'),
43*9c5db199SXin Li            ('compile', THROUGHPUT, 5, 'compile'),
44*9c5db199SXin Li            ('clean', THROUGHPUT, 5, 'clean'),
45*9c5db199SXin Li            ('read tree', THROUGHPUT, 6, 'read_tree'),
46*9c5db199SXin Li            ('read compiled tree', THROUGHPUT, 7, 'read_compiled_tree'),
47*9c5db199SXin Li            ('delete tree', TIME, 6, 'delete_tree'),
48*9c5db199SXin Li            ('delete compiled tree', TIME, 6, 'delete_compiled_tree'),
49*9c5db199SXin Li            ('stat tree', TIME, 6, 'stat_tree'),
50*9c5db199SXin Li            ('stat compiled tree', TIME, 7, 'stat_compiled_tree'),
51*9c5db199SXin Li        )
52*9c5db199SXin Li
53*9c5db199SXin Li# intial create total runs 10 avg 149.82 MB/s (user 0.63s sys 0.85s)
54*9c5db199SXin Li# create total runs 5 avg 27.50 MB/s (user 0.62s sys 0.83s)
55*9c5db199SXin Li# patch total runs 4 avg 15.01 MB/s (user 0.33s sys 0.63s)
56*9c5db199SXin Li# compile total runs 7 avg 41.47 MB/s (user 0.14s sys 0.75s)
57*9c5db199SXin Li# clean total runs 4 avg 697.77 MB/s (user 0.02s sys 0.08s)
58*9c5db199SXin Li# read tree total runs 2 avg 23.68 MB/s (user 0.85s sys 1.59s)
59*9c5db199SXin Li# read compiled tree total runs 1 avg 25.27 MB/s (user 0.98s sys 2.84s)
60*9c5db199SXin Li# delete tree total runs 2 avg 1.48 seconds (user 0.35s sys 0.45s)
61*9c5db199SXin Li# no runs for delete compiled tree
62*9c5db199SXin Li# stat tree total runs 4 avg 1.46 seconds (user 0.35s sys 0.26s)
63*9c5db199SXin Li# stat compiled tree total runs 1 avg 1.49 seconds (user 0.37s sys 0.29s)
64*9c5db199SXin Li
65*9c5db199SXin Li        for line in output.splitlines():
66*9c5db199SXin Li            for pattern, result_type, position, tag in run_type_list:
67*9c5db199SXin Li                if re.search('^%s' % pattern, line):
68*9c5db199SXin Li                    l = line.split()
69*9c5db199SXin Li                    value = l[position]
70*9c5db199SXin Li
71*9c5db199SXin Li                    s = "%s_%s" % (tag, result_type)
72*9c5db199SXin Li
73*9c5db199SXin Li                    keylist[s] = value
74*9c5db199SXin Li                    break
75*9c5db199SXin Li
76*9c5db199SXin Li        self.write_perf_keyval(keylist)
77