* ban it!

* some legitimate blunders

* even more!

* this is from commaai/one

* here too

* this too

* ignore rest

* one liner

* Revert "one liner"

This reverts commit d96a162403.
pull/35746/head
Shane Smiskol 6 days ago committed by GitHub
parent 7d400cb00c
commit 632f7594a4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 1
      pyproject.toml
  2. 8
      selfdrive/debug/car/fw_versions.py
  3. 6
      selfdrive/debug/cpu_usage_stat.py
  4. 2
      selfdrive/ui/layouts/home.py
  5. 4
      selfdrive/ui/onroad/exp_button.py
  6. 2
      selfdrive/ui/widgets/pairing_dialog.py
  7. 6
      system/athena/athenad.py
  8. 26
      system/athena/tests/test_athenad.py
  9. 4
      system/camerad/test/test_exposure.py
  10. 2
      system/qcomgpsd/qcomgpsd.py
  11. 2
      tools/camerastream/compressed_vipc.py
  12. 4
      tools/lib/url_file.py
  13. 4
      tools/replay/unlog_ci_segment.py
  14. 4
      tools/sim/lib/simulated_sensors.py

@ -258,6 +258,7 @@ lint.flake8-implicit-str-concat.allow-multiline = false
"pytest.main".msg = "pytest.main requires special handling that is easy to mess up!" "pytest.main".msg = "pytest.main requires special handling that is easy to mess up!"
"unittest".msg = "Use pytest" "unittest".msg = "Use pytest"
"pyray.measure_text_ex".msg = "Use openpilot.system.ui.lib.text_measure" "pyray.measure_text_ex".msg = "Use openpilot.system.ui.lib.text_measure"
"time.time".msg = "Use time.monotonic"
[tool.ruff.format] [tool.ruff.format]
quote-style = "preserve" quote-style = "preserve"

@ -47,15 +47,15 @@ if __name__ == "__main__":
num_pandas = len(messaging.recv_one_retry(pandaStates_sock).pandaStates) num_pandas = len(messaging.recv_one_retry(pandaStates_sock).pandaStates)
t = time.time() t = time.monotonic()
print("Getting vin...") print("Getting vin...")
set_obd_multiplexing(True) set_obd_multiplexing(True)
vin_rx_addr, vin_rx_bus, vin = get_vin(*can_callbacks, (0, 1)) vin_rx_addr, vin_rx_bus, vin = get_vin(*can_callbacks, (0, 1))
print(f'RX: {hex(vin_rx_addr)}, BUS: {vin_rx_bus}, VIN: {vin}') print(f'RX: {hex(vin_rx_addr)}, BUS: {vin_rx_bus}, VIN: {vin}')
print(f"Getting VIN took {time.time() - t:.3f} s") print(f"Getting VIN took {time.monotonic() - t:.3f} s")
print() print()
t = time.time() t = time.monotonic()
fw_vers = get_fw_versions(*can_callbacks, set_obd_multiplexing, query_brand=args.brand, extra=extra, num_pandas=num_pandas, progress=True) fw_vers = get_fw_versions(*can_callbacks, set_obd_multiplexing, query_brand=args.brand, extra=extra, num_pandas=num_pandas, progress=True)
_, candidates = match_fw_to_car(fw_vers, vin) _, candidates = match_fw_to_car(fw_vers, vin)
@ -71,4 +71,4 @@ if __name__ == "__main__":
print() print()
print("Possible matches:", candidates) print("Possible matches:", candidates)
print(f"Getting fw took {time.time() - t:.3f} s") print(f"Getting fw took {time.monotonic() - t:.3f} s")

@ -37,8 +37,6 @@ monitored_proc_names = [
cpu_time_names = ['user', 'system', 'children_user', 'children_system'] cpu_time_names = ['user', 'system', 'children_user', 'children_system']
timer = getattr(time, 'monotonic', time.time)
def get_arg_parser(): def get_arg_parser():
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
@ -72,7 +70,7 @@ if __name__ == "__main__":
print('Add monitored proc:', k) print('Add monitored proc:', k)
stats[k] = {'cpu_samples': defaultdict(list), 'min': defaultdict(lambda: None), 'max': defaultdict(lambda: None), stats[k] = {'cpu_samples': defaultdict(list), 'min': defaultdict(lambda: None), 'max': defaultdict(lambda: None),
'avg': defaultdict(float), 'last_cpu_times': None, 'last_sys_time': None} 'avg': defaultdict(float), 'last_cpu_times': None, 'last_sys_time': None}
stats[k]['last_sys_time'] = timer() stats[k]['last_sys_time'] = time.monotonic()
stats[k]['last_cpu_times'] = p.cpu_times() stats[k]['last_cpu_times'] = p.cpu_times()
monitored_procs.append(p) monitored_procs.append(p)
i = 0 i = 0
@ -80,7 +78,7 @@ if __name__ == "__main__":
while True: while True:
for p in monitored_procs: for p in monitored_procs:
k = ' '.join(p.cmdline()) k = ' '.join(p.cmdline())
cur_sys_time = timer() cur_sys_time = time.monotonic()
cur_cpu_times = p.cpu_times() cur_cpu_times = p.cpu_times()
cpu_times = np.subtract(cur_cpu_times, stats[k]['last_cpu_times']) / (cur_sys_time - stats[k]['last_sys_time']) cpu_times = np.subtract(cur_cpu_times, stats[k]['last_cpu_times']) / (cur_sys_time - stats[k]['last_sys_time'])
stats[k]['last_sys_time'] = cur_sys_time stats[k]['last_sys_time'] = cur_sys_time

@ -67,7 +67,7 @@ class HomeLayout(Widget):
self.current_state = state self.current_state = state
def _render(self, rect: rl.Rectangle): def _render(self, rect: rl.Rectangle):
current_time = time.time() current_time = time.monotonic()
if current_time - self.last_refresh >= REFRESH_INTERVAL: if current_time - self.last_refresh >= REFRESH_INTERVAL:
self._refresh() self._refresh()
self.last_refresh = current_time self.last_refresh = current_time

@ -41,7 +41,7 @@ class ExpButton(Widget):
# Hold new state temporarily # Hold new state temporarily
self._held_mode = new_mode self._held_mode = new_mode
self._hold_end_time = time.time() + self._hold_duration self._hold_end_time = time.monotonic() + self._hold_duration
return True return True
return False return False
@ -58,7 +58,7 @@ class ExpButton(Widget):
rl.draw_texture(texture, center_x - texture.width // 2, center_y - texture.height // 2, self._white_color) rl.draw_texture(texture, center_x - texture.width // 2, center_y - texture.height // 2, self._white_color)
def _held_or_actual_mode(self): def _held_or_actual_mode(self):
now = time.time() now = time.monotonic()
if self._hold_end_time and now < self._hold_end_time: if self._hold_end_time and now < self._hold_end_time:
return self._held_mode return self._held_mode

@ -55,7 +55,7 @@ class PairingDialog:
self.qr_texture = None self.qr_texture = None
def _check_qr_refresh(self) -> None: def _check_qr_refresh(self) -> None:
current_time = time.time() current_time = time.monotonic()
if current_time - self.last_qr_generation >= self.QR_REFRESH_INTERVAL: if current_time - self.last_qr_generation >= self.QR_REFRESH_INTERVAL:
self._generate_qr_code() self._generate_qr_code()
self.last_qr_generation = current_time self.last_qr_generation = current_time

@ -426,7 +426,7 @@ def uploadFilesToUrls(files_data: list[UploadFileDict]) -> UploadFilesToUrlRespo
path=path, path=path,
url=file.url, url=file.url,
headers=file.headers, headers=file.headers,
created_at=int(time.time() * 1000), created_at=int(time.time() * 1000), # noqa: TID251
id=None, id=None,
allow_cellular=file.allow_cellular, allow_cellular=file.allow_cellular,
priority=file.priority, priority=file.priority,
@ -580,7 +580,7 @@ def takeSnapshot() -> str | dict[str, str] | None:
def get_logs_to_send_sorted() -> list[str]: def get_logs_to_send_sorted() -> list[str]:
# TODO: scan once then use inotify to detect file creation/deletion # TODO: scan once then use inotify to detect file creation/deletion
curr_time = int(time.time()) curr_time = int(time.time()) # noqa: TID251
logs = [] logs = []
for log_entry in os.listdir(Paths.swaglog_root()): for log_entry in os.listdir(Paths.swaglog_root()):
log_path = os.path.join(Paths.swaglog_root(), log_entry) log_path = os.path.join(Paths.swaglog_root(), log_entry)
@ -617,7 +617,7 @@ def log_handler(end_event: threading.Event) -> None:
log_entry = log_files.pop() # newest log file log_entry = log_files.pop() # newest log file
cloudlog.debug(f"athena.log_handler.forward_request {log_entry}") cloudlog.debug(f"athena.log_handler.forward_request {log_entry}")
try: try:
curr_time = int(time.time()) curr_time = int(time.time()) # noqa: TID251
log_path = os.path.join(Paths.swaglog_root(), log_entry) log_path = os.path.join(Paths.swaglog_root(), log_entry)
setxattr(log_path, LOG_ATTR_NAME, int.to_bytes(curr_time, 4, sys.byteorder)) setxattr(log_path, LOG_ATTR_NAME, int.to_bytes(curr_time, 4, sys.byteorder))
with open(log_path) as f: with open(log_path) as f:

@ -91,8 +91,8 @@ class TestAthenadMethods:
@staticmethod @staticmethod
def _wait_for_upload(): def _wait_for_upload():
now = time.time() now = time.monotonic()
while time.time() - now < 5: while time.monotonic() - now < 5:
if athenad.upload_queue.qsize() == 0: if athenad.upload_queue.qsize() == 0:
break break
@ -190,11 +190,11 @@ class TestAthenadMethods:
fn = self._create_file('qlog', data=os.urandom(10000 * 1024)) fn = self._create_file('qlog', data=os.urandom(10000 * 1024))
upload_fn = fn + ('.zst' if compress else '') upload_fn = fn + ('.zst' if compress else '')
item = athenad.UploadItem(path=upload_fn, url="http://localhost:1238", headers={}, created_at=int(time.time()*1000), id='') item = athenad.UploadItem(path=upload_fn, url="http://localhost:1238", headers={}, created_at=int(time.time()*1000), id='') # noqa: TID251
with pytest.raises(requests.exceptions.ConnectionError): with pytest.raises(requests.exceptions.ConnectionError):
athenad._do_upload(item) athenad._do_upload(item)
item = athenad.UploadItem(path=upload_fn, url=f"{host}/qlog.zst", headers={}, created_at=int(time.time()*1000), id='') item = athenad.UploadItem(path=upload_fn, url=f"{host}/qlog.zst", headers={}, created_at=int(time.time()*1000), id='') # noqa: TID251
resp = athenad._do_upload(item) resp = athenad._do_upload(item)
assert resp.status_code == 201 assert resp.status_code == 201
@ -226,7 +226,7 @@ class TestAthenadMethods:
@with_upload_handler @with_upload_handler
def test_upload_handler(self, host): def test_upload_handler(self, host):
fn = self._create_file('qlog.zst') fn = self._create_file('qlog.zst')
item = athenad.UploadItem(path=fn, url=f"{host}/qlog.zst", headers={}, created_at=int(time.time()*1000), id='', allow_cellular=True) item = athenad.UploadItem(path=fn, url=f"{host}/qlog.zst", headers={}, created_at=int(time.time()*1000), id='', allow_cellular=True) # noqa: TID251
athenad.upload_queue.put_nowait(item) athenad.upload_queue.put_nowait(item)
self._wait_for_upload() self._wait_for_upload()
@ -242,7 +242,7 @@ class TestAthenadMethods:
mock_put = mocker.patch('openpilot.system.athena.athenad.UPLOAD_SESS.put') mock_put = mocker.patch('openpilot.system.athena.athenad.UPLOAD_SESS.put')
mock_put.return_value.__enter__.return_value.status_code = status mock_put.return_value.__enter__.return_value.status_code = status
fn = self._create_file('qlog.zst') fn = self._create_file('qlog.zst')
item = athenad.UploadItem(path=fn, url=f"{host}/qlog.zst", headers={}, created_at=int(time.time()*1000), id='', allow_cellular=True) item = athenad.UploadItem(path=fn, url=f"{host}/qlog.zst", headers={}, created_at=int(time.time()*1000), id='', allow_cellular=True) # noqa: TID251
athenad.upload_queue.put_nowait(item) athenad.upload_queue.put_nowait(item)
self._wait_for_upload() self._wait_for_upload()
@ -257,7 +257,7 @@ class TestAthenadMethods:
def test_upload_handler_timeout(self): def test_upload_handler_timeout(self):
"""When an upload times out or fails to connect it should be placed back in the queue""" """When an upload times out or fails to connect it should be placed back in the queue"""
fn = self._create_file('qlog.zst') fn = self._create_file('qlog.zst')
item = athenad.UploadItem(path=fn, url="http://localhost:44444/qlog.zst", headers={}, created_at=int(time.time()*1000), id='', allow_cellular=True) item = athenad.UploadItem(path=fn, url="http://localhost:44444/qlog.zst", headers={}, created_at=int(time.time()*1000), id='', allow_cellular=True) # noqa: TID251
item_no_retry = replace(item, retry_count=MAX_RETRY_COUNT) item_no_retry = replace(item, retry_count=MAX_RETRY_COUNT)
athenad.upload_queue.put_nowait(item_no_retry) athenad.upload_queue.put_nowait(item_no_retry)
@ -278,7 +278,7 @@ class TestAthenadMethods:
@with_upload_handler @with_upload_handler
def test_cancel_upload(self): def test_cancel_upload(self):
item = athenad.UploadItem(path="qlog.zst", url="http://localhost:44444/qlog.zst", headers={}, item = athenad.UploadItem(path="qlog.zst", url="http://localhost:44444/qlog.zst", headers={},
created_at=int(time.time()*1000), id='id', allow_cellular=True) created_at=int(time.time()*1000), id='id', allow_cellular=True) # noqa: TID251
athenad.upload_queue.put_nowait(item) athenad.upload_queue.put_nowait(item)
dispatcher["cancelUpload"](item.id) dispatcher["cancelUpload"](item.id)
@ -312,7 +312,7 @@ class TestAthenadMethods:
@with_upload_handler @with_upload_handler
def test_list_upload_queue_current(self, host: str): def test_list_upload_queue_current(self, host: str):
fn = self._create_file('qlog.zst') fn = self._create_file('qlog.zst')
item = athenad.UploadItem(path=fn, url=f"{host}/qlog.zst", headers={}, created_at=int(time.time()*1000), id='', allow_cellular=True) item = athenad.UploadItem(path=fn, url=f"{host}/qlog.zst", headers={}, created_at=int(time.time()*1000), id='', allow_cellular=True) # noqa: TID251
athenad.upload_queue.put_nowait(item) athenad.upload_queue.put_nowait(item)
self._wait_for_upload() self._wait_for_upload()
@ -331,7 +331,7 @@ class TestAthenadMethods:
path=fp, path=fp,
url=f"http://localhost:44444/{fn}", url=f"http://localhost:44444/{fn}",
headers={}, headers={},
created_at=int(time.time()*1000), created_at=int(time.time()*1000), # noqa: TID251
id='', id='',
allow_cellular=True, allow_cellular=True,
priority=i priority=i
@ -343,7 +343,7 @@ class TestAthenadMethods:
def test_list_upload_queue(self): def test_list_upload_queue(self):
item = athenad.UploadItem(path="qlog.zst", url="http://localhost:44444/qlog.zst", headers={}, item = athenad.UploadItem(path="qlog.zst", url="http://localhost:44444/qlog.zst", headers={},
created_at=int(time.time()*1000), id='id', allow_cellular=True) created_at=int(time.time()*1000), id='id', allow_cellular=True) # noqa: TID251
athenad.upload_queue.put_nowait(item) athenad.upload_queue.put_nowait(item)
items = dispatcher["listUploadQueue"]() items = dispatcher["listUploadQueue"]()
@ -356,8 +356,8 @@ class TestAthenadMethods:
assert len(items) == 0 assert len(items) == 0
def test_upload_queue_persistence(self): def test_upload_queue_persistence(self):
item1 = athenad.UploadItem(path="_", url="_", headers={}, created_at=int(time.time()), id='id1') item1 = athenad.UploadItem(path="_", url="_", headers={}, created_at=int(time.time()), id='id1') # noqa: TID251
item2 = athenad.UploadItem(path="_", url="_", headers={}, created_at=int(time.time()), id='id2') item2 = athenad.UploadItem(path="_", url="_", headers={}, created_at=int(time.time()), id='id2') # noqa: TID251
athenad.upload_queue.put_nowait(item1) athenad.upload_queue.put_nowait(item1)
athenad.upload_queue.put_nowait(item2) athenad.upload_queue.put_nowait(item2)

@ -33,8 +33,8 @@ class TestCamerad:
@with_processes(['camerad']) @with_processes(['camerad'])
def test_camera_operation(self): def test_camera_operation(self):
passed = 0 passed = 0
start = time.time() start = time.monotonic()
while time.time() - start < TEST_TIME and passed < REPEAT: while time.monotonic() - start < TEST_TIME and passed < REPEAT:
rpic, dpic = get_snapshots(frame="roadCameraState", front_frame="driverCameraState") rpic, dpic = get_snapshots(frame="roadCameraState", front_frame="driverCameraState")
wpic, _ = get_snapshots(frame="wideRoadCameraState") wpic, _ = get_snapshots(frame="wideRoadCameraState")

@ -286,7 +286,7 @@ def main() -> NoReturn:
continue continue
if DEBUG: if DEBUG:
print(f"{time.time():.4f}: got log: {log_type} len {len(log_payload)}") print(f"{time.time():.4f}: got log: {log_type} len {len(log_payload)}") # noqa: TID251
if log_type == LOG_GNSS_OEMDRE_MEASUREMENT_REPORT: if log_type == LOG_GNSS_OEMDRE_MEASUREMENT_REPORT:
msg = messaging.new_message('qcomGnss', valid=True) msg = messaging.new_message('qcomGnss', valid=True)

@ -62,7 +62,7 @@ def decoder(addr, vipc_server, vst, nvidia, W, H, debug=False):
print("waiting for iframe") print("waiting for iframe")
continue continue
time_q.append(time.monotonic()) time_q.append(time.monotonic())
network_latency = (int(time.time()*1e9) - evta.unixTimestampNanos)/1e6 network_latency = (int(time.time()*1e9) - evta.unixTimestampNanos)/1e6 # noqa: TID251
frame_latency = ((evta.idx.timestampEof/1e9) - (evta.idx.timestampSof/1e9))*1000 frame_latency = ((evta.idx.timestampEof/1e9) - (evta.idx.timestampSof/1e9))*1000
process_latency = ((evt.logMonoTime/1e9) - (evta.idx.timestampEof/1e9))*1000 process_latency = ((evt.logMonoTime/1e9) - (evta.idx.timestampEof/1e9))*1000

@ -131,13 +131,13 @@ class URLFile:
download_range = True download_range = True
if self._debug: if self._debug:
t1 = time.time() t1 = time.monotonic()
response = self._request('GET', self._url, headers=headers) response = self._request('GET', self._url, headers=headers)
ret = response.data ret = response.data
if self._debug: if self._debug:
t2 = time.time() t2 = time.monotonic()
if t2 - t1 > 0.1: if t2 - t1 > 0.1:
print(f"get {self._url} {headers!r} {t2 - t1:.3f} slow") print(f"get {self._url} {headers!r} {t2 - t1:.3f} slow")

@ -42,7 +42,7 @@ def replay(route, segment, loop):
msg = msgs[i].as_builder() msg = msgs[i].as_builder()
next_msg = msgs[i + 1] next_msg = msgs[i + 1]
start_time = time.time() start_time = time.monotonic()
w = msg.which() w = msg.which()
if w == 'roadCameraState': if w == 'roadCameraState':
@ -63,7 +63,7 @@ def replay(route, segment, loop):
socks[w] = None socks[w] = None
lag += (next_msg.logMonoTime - msg.logMonoTime) / 1e9 lag += (next_msg.logMonoTime - msg.logMonoTime) / 1e9
lag -= time.time() - start_time lag -= time.monotonic() - start_time
dt = max(lag, 0.0) dt = max(lag, 0.0)
lag -= dt lag -= dt

@ -53,7 +53,7 @@ class SimulatedSensors:
for _ in range(10): for _ in range(10):
dat = messaging.new_message('gpsLocationExternal', valid=True) dat = messaging.new_message('gpsLocationExternal', valid=True)
dat.gpsLocationExternal = { dat.gpsLocationExternal = {
"unixTimestampMillis": int(time.time() * 1000), "unixTimestampMillis": int(time.time() * 1000), # noqa: TID251
"flags": 1, # valid fix "flags": 1, # valid fix
"horizontalAccuracy": 1.0, "horizontalAccuracy": 1.0,
"verticalAccuracy": 1.0, "verticalAccuracy": 1.0,
@ -109,7 +109,7 @@ class SimulatedSensors:
self.camerad.cam_send_yuv_wide_road(yuv) self.camerad.cam_send_yuv_wide_road(yuv)
def update(self, simulator_state: 'SimulatorState', world: 'World'): def update(self, simulator_state: 'SimulatorState', world: 'World'):
now = time.time() now = time.monotonic()
self.send_imu_message(simulator_state) self.send_imu_message(simulator_state)
self.send_gps_message(simulator_state) self.send_gps_message(simulator_state)

Loading…
Cancel
Save