perf_timer.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. """
  2. Copyright (c) Contributors to the Open 3D Engine Project.
  3. For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. SPDX-License-Identifier: Apache-2.0 OR MIT
  5. """
  6. import time
  7. ENTER_MSG = ("Entered game mode", "Failed to enter game mode")
  8. EXIT_MSG = ("Exited game mode", "Couldn't exit game mode")
  9. class Timer:
  10. unit_divisor = 60
  11. hour_divisor = unit_divisor * unit_divisor
  12. def start(self):
  13. self._start_time = time.perf_counter()
  14. def log_time(self, message):
  15. from editor_python_test_tools.utils import Report
  16. elapsed_time = time.perf_counter() - self._start_time
  17. hours = int(elapsed_time / Timer.hour_divisor)
  18. minutes = int(elapsed_time % Timer.hour_divisor / Timer.unit_divisor)
  19. seconds = elapsed_time % Timer.unit_divisor
  20. Report.info(f'{message}: {hours:0>2d}:{minutes:0>2d}:{seconds:0>5.2f}\n')
  21. def time_editor_level_loading(level_dir, level_name):
  22. """
  23. Summary:
  24. Time how long it takes to load an arbitrary level, entering game mode, and exiting game mode
  25. Level Description:
  26. Preferably a level with a large number of entities
  27. Expected Behavior:
  28. Level loads within a reasonable time frame e.i. doesn't trip the framework timeout
  29. Benchmark Steps:
  30. 1) Time opening the level
  31. 2) Time entering game mode
  32. 3) Time exiting game mode
  33. 4) Close the editor
  34. :return: None
  35. """
  36. from editor_python_test_tools.utils import TestHelper as helper
  37. timer = Timer()
  38. helper.init_idle()
  39. # 1) Open level
  40. timer.start()
  41. helper.open_level(level_dir, level_name)
  42. timer.log_time('Level load time')
  43. # 2) Time how long it takes to enter game mode
  44. timer.start()
  45. helper.enter_game_mode(ENTER_MSG)
  46. timer.log_time('Enter game mode')
  47. # 3) Exit game mode
  48. timer.start()
  49. helper.exit_game_mode(EXIT_MSG)
  50. timer.log_time('Exit game mode')
  51. # 4) Close the editor
  52. helper.close_editor()