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