xref: /openbmc/openbmc/poky/meta/lib/oeqa/buildperf/test_basic.py (revision c342db356d4f451821781eb24eb9f3d39d6c0c5e)
1 # Copyright (c) 2016, Intel Corporation.
2 #
3 # SPDX-License-Identifier: GPL-2.0-only
4 #
5 """Basic set of build performance tests"""
6 import os
7 import shutil
8 
9 import oe.path
10 from oeqa.buildperf import BuildPerfTestCase
11 from oeqa.utils.commands import get_bb_var, get_bb_vars
12 
13 class Test1P1(BuildPerfTestCase):
14     build_target = 'core-image-sato'
15 
16     def test1(self):
17         """Build core-image-sato"""
18         self.rm_tmp()
19         self.rm_sstate()
20         self.rm_cache()
21         self.sync()
22         self.measure_cmd_resources(['bitbake', self.build_target], 'build',
23                                    'bitbake ' + self.build_target, save_bs=True)
24         self.measure_disk_usage(self.bb_vars['TMPDIR'], 'tmpdir', 'tmpdir')
25         self.measure_disk_usage(get_bb_var("IMAGE_ROOTFS", self.build_target), 'rootfs', 'rootfs', True)
26 
27 
28 class Test1P2(BuildPerfTestCase):
29     build_target = 'virtual/kernel'
30 
31     def test12(self):
32         """Build virtual/kernel"""
33         # Build and cleans state in order to get all dependencies pre-built
34         self.run_cmd(['bitbake', self.build_target])
35         self.run_cmd(['bitbake', self.build_target, '-c', 'cleansstate'])
36 
37         self.sync()
38         self.measure_cmd_resources(['bitbake', self.build_target], 'build',
39                                    'bitbake ' + self.build_target)
40 
41 
42 class Test1P3(BuildPerfTestCase):
43     build_target = 'core-image-sato'
44 
45     def test13(self):
46         """Build core-image-sato with rm_work enabled"""
47         postfile = os.path.join(self.tmp_dir, 'postfile.conf')
48         with open(postfile, 'w') as fobj:
49             fobj.write('INHERIT += "rm_work"\n')
50 
51         self.rm_tmp()
52         self.rm_sstate()
53         self.rm_cache()
54         self.sync()
55         cmd = ['bitbake', '-R', postfile, self.build_target]
56         self.measure_cmd_resources(cmd, 'build',
57                                    'bitbake' + self.build_target,
58                                    save_bs=True)
59         self.measure_disk_usage(self.bb_vars['TMPDIR'], 'tmpdir', 'tmpdir')
60 
61 
62 class Test2(BuildPerfTestCase):
63     build_target = 'core-image-sato'
64 
65     def test2(self):
66         """Run core-image-sato do_rootfs with sstate"""
67         # Build once in order to populate sstate cache
68         self.run_cmd(['bitbake', self.build_target])
69 
70         self.rm_tmp()
71         self.rm_cache()
72         self.sync()
73         cmd = ['bitbake', self.build_target, '-c', 'rootfs']
74         self.measure_cmd_resources(cmd, 'do_rootfs', 'bitbake do_rootfs')
75 
76 
77 class Test3(BuildPerfTestCase):
78 
79     def test3(self):
80         """Bitbake parsing (bitbake -p)"""
81         # Drop all caches and parse
82         self.rm_cache()
83         oe.path.remove(os.path.join(self.bb_vars['TMPDIR'], 'cache'), True)
84         self.measure_cmd_resources(['bitbake', '-p'], 'parse_1',
85                                    'bitbake -p (no caches)')
86         # Drop tmp/cache
87         oe.path.remove(os.path.join(self.bb_vars['TMPDIR'], 'cache'), True)
88         self.measure_cmd_resources(['bitbake', '-p'], 'parse_2',
89                                    'bitbake -p (no tmp/cache)')
90         # Parse with fully cached data
91         self.measure_cmd_resources(['bitbake', '-p'], 'parse_3',
92                                    'bitbake -p (cached)')
93 
94 
95 class Test4(BuildPerfTestCase):
96     build_target = 'core-image-sato'
97 
98     def test4(self):
99         """eSDK metrics"""
100         self.run_cmd(['bitbake', '-c', 'do_populate_sdk_ext',
101                      self.build_target])
102         self.bb_vars = get_bb_vars(None, self.build_target)
103         tmp_dir = self.bb_vars['TMPDIR']
104         installer = os.path.join(
105             self.bb_vars['SDK_DEPLOY'],
106             self.bb_vars['TOOLCHAINEXT_OUTPUTNAME'] + '.sh')
107         # Measure installer size
108         self.measure_disk_usage(installer, 'installer_bin', 'eSDK installer',
109                                 apparent_size=True)
110         # Measure deployment time and deployed size
111         deploy_dir = os.path.join(tmp_dir, 'esdk-deploy')
112         if os.path.exists(deploy_dir):
113             shutil.rmtree(deploy_dir)
114         self.sync()
115         self.measure_cmd_resources([installer, '-y', '-d', deploy_dir],
116                                    'deploy', 'eSDK deploy')
117         #make sure bitbake is unloaded
118         self.sync()
119         self.measure_disk_usage(deploy_dir, 'deploy_dir', 'deploy dir',
120                                 apparent_size=True)
121