You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.3 KiB
62 lines
1.3 KiB
3 years ago
|
#!/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()
|