#!/usr/bin/env python3 import unittest import time import math from collections import OrderedDict from selfdrive.hardware import HARDWARE, TICI from selfdrive.hardware.tici.power_monitor import get_power from selfdrive.manager.process_config import managed_processes from selfdrive.manager.manager import manager_cleanup POWER = OrderedDict( camerad=2.65, modeld=1.15, dmonitoringmodeld=0.25, loggerd=0.45, ) class TestPowerDraw(unittest.TestCase): @classmethod def setUpClass(cls): if not TICI: raise unittest.SkipTest def setUp(self): HARDWARE.initialize_hardware() HARDWARE.set_power_save(False) def tearDown(self): manager_cleanup() def test_camera_procs(self): baseline = get_power() prev = baseline used = {} for proc in POWER.keys(): managed_processes[proc].start() time.sleep(6) now = get_power(8) used[proc] = now - prev prev = now manager_cleanup() print("-"*35) print(f"Baseline {baseline:.2f}W\n") for proc in POWER.keys(): cur = used[proc] expected = POWER[proc] print(f"{proc.ljust(20)} {expected:.2f}W {cur:.2f}W") with self.subTest(proc=proc): self.assertTrue(math.isclose(cur, expected, rel_tol=0.10, abs_tol=0.1)) print("-"*35) if __name__ == "__main__": unittest.main()