test_basic.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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. import oe.path
  9. from oeqa.buildperf import BuildPerfTestCase
  10. from oeqa.utils.commands import get_bb_var, get_bb_vars
  11. class Test1P1(BuildPerfTestCase):
  12. build_target = 'core-image-sato'
  13. def test1(self):
  14. """Build core-image-sato"""
  15. self.rm_tmp()
  16. self.rm_sstate()
  17. self.rm_cache()
  18. self.sync()
  19. self.measure_cmd_resources(['bitbake', self.build_target], 'build',
  20. 'bitbake ' + self.build_target, save_bs=True)
  21. self.measure_disk_usage(self.bb_vars['TMPDIR'], 'tmpdir', 'tmpdir')
  22. self.measure_disk_usage(get_bb_var("IMAGE_ROOTFS", self.build_target), 'rootfs', 'rootfs', True)
  23. class Test1P2(BuildPerfTestCase):
  24. build_target = 'virtual/kernel'
  25. def test12(self):
  26. """Build virtual/kernel"""
  27. # Build and cleans state in order to get all dependencies pre-built
  28. self.run_cmd(['bitbake', self.build_target])
  29. self.run_cmd(['bitbake', self.build_target, '-c', 'cleansstate'])
  30. self.sync()
  31. self.measure_cmd_resources(['bitbake', self.build_target], 'build',
  32. 'bitbake ' + self.build_target)
  33. class Test1P3(BuildPerfTestCase):
  34. build_target = 'core-image-sato'
  35. def test13(self):
  36. """Build core-image-sato with rm_work enabled"""
  37. postfile = os.path.join(self.tmp_dir, 'postfile.conf')
  38. with open(postfile, 'w') as fobj:
  39. fobj.write('INHERIT += "rm_work"\n')
  40. self.rm_tmp()
  41. self.rm_sstate()
  42. self.rm_cache()
  43. self.sync()
  44. cmd = ['bitbake', '-R', postfile, self.build_target]
  45. self.measure_cmd_resources(cmd, 'build',
  46. 'bitbake' + self.build_target,
  47. save_bs=True)
  48. self.measure_disk_usage(self.bb_vars['TMPDIR'], 'tmpdir', 'tmpdir')
  49. class Test2(BuildPerfTestCase):
  50. build_target = 'core-image-sato'
  51. def test2(self):
  52. """Run core-image-sato do_rootfs with sstate"""
  53. # Build once in order to populate sstate cache
  54. self.run_cmd(['bitbake', self.build_target])
  55. self.rm_tmp()
  56. self.rm_cache()
  57. self.sync()
  58. cmd = ['bitbake', self.build_target, '-c', 'rootfs']
  59. self.measure_cmd_resources(cmd, 'do_rootfs', 'bitbake do_rootfs')
  60. class Test3(BuildPerfTestCase):
  61. def test3(self):
  62. """Bitbake parsing (bitbake -p)"""
  63. # Drop all caches and parse
  64. self.rm_cache()
  65. oe.path.remove(os.path.join(self.bb_vars['TMPDIR'], 'cache'), True)
  66. self.measure_cmd_resources(['bitbake', '-p'], 'parse_1',
  67. 'bitbake -p (no caches)')
  68. # Drop tmp/cache
  69. oe.path.remove(os.path.join(self.bb_vars['TMPDIR'], 'cache'), True)
  70. self.measure_cmd_resources(['bitbake', '-p'], 'parse_2',
  71. 'bitbake -p (no tmp/cache)')
  72. # Parse with fully cached data
  73. self.measure_cmd_resources(['bitbake', '-p'], 'parse_3',
  74. 'bitbake -p (cached)')
  75. class Test4(BuildPerfTestCase):
  76. build_target = 'core-image-sato'
  77. def test4(self):
  78. """eSDK metrics"""
  79. self.run_cmd(['bitbake', '-c', 'do_populate_sdk_ext',
  80. self.build_target])
  81. self.bb_vars = get_bb_vars(None, self.build_target)
  82. tmp_dir = self.bb_vars['TMPDIR']
  83. installer = os.path.join(
  84. self.bb_vars['SDK_DEPLOY'],
  85. self.bb_vars['TOOLCHAINEXT_OUTPUTNAME'] + '.sh')
  86. # Measure installer size
  87. self.measure_disk_usage(installer, 'installer_bin', 'eSDK installer',
  88. apparent_size=True)
  89. # Measure deployment time and deployed size
  90. deploy_dir = os.path.join(tmp_dir, 'esdk-deploy')
  91. if os.path.exists(deploy_dir):
  92. shutil.rmtree(deploy_dir)
  93. self.sync()
  94. self.measure_cmd_resources([installer, '-y', '-d', deploy_dir],
  95. 'deploy', 'eSDK deploy')
  96. #make sure bitbake is unloaded
  97. self.sync()
  98. self.measure_disk_usage(deploy_dir, 'deploy_dir', 'deploy dir',
  99. apparent_size=True)