From 69e7a748359b1879e84236004d8bf21c77aedbc8 Mon Sep 17 00:00:00 2001 From: royjr Date: Wed, 15 Jul 2026 13:35:07 -0400 Subject: [PATCH] lagless --- .../ui/mici/onroad/augmented_road_view.py | 69 ++++++++++++------- 1 file changed, 46 insertions(+), 23 deletions(-) diff --git a/selfdrive/ui/mici/onroad/augmented_road_view.py b/selfdrive/ui/mici/onroad/augmented_road_view.py index 2d61909931..8ba5730bc0 100644 --- a/selfdrive/ui/mici/onroad/augmented_road_view.py +++ b/selfdrive/ui/mici/onroad/augmented_road_view.py @@ -174,6 +174,12 @@ class AugmentedRoadView(CameraView): } self._radar_ranges_label = UnifiedLabel("", **radar_text_args) self._radar_counts_label = UnifiedLabel("none", **radar_text_args) + self._radar_status = ("", "none") + self._radar_layout_key: tuple[str, str, int] | None = None + self._radar_range_width = 0 + self._radar_count_width = 36 + self._radar_status_width = 52 + self._radar_status_height = 42 self._fade_texture = gui_app.texture("icons_mici/onroad/onroad_fade.png") @@ -191,12 +197,10 @@ class AugmentedRoadView(CameraView): status = ("", "radar detected\ntap to enable") else: status = format_radar_tracks_onroad_columns(live_tracks) if ui_state.sm.valid["liveTracks"] else ("", "none") - self._radar_ranges_label.set_text(status[0]) - self._radar_counts_label.set_text(status[1]) + self._set_radar_status(status) elif not ui_state.sm.alive["liveTracks"]: self._radar_tracks_settings_prompt = False - self._radar_ranges_label.set_text("") - self._radar_counts_label.set_text("none") + self._set_radar_status(("", "none")) # update offroad label if ui_state.panda_type == log.PandaState.PandaType.unknown: @@ -206,6 +210,37 @@ class AugmentedRoadView(CameraView): else: self._offroad_label.set_text("start the car to\nuse sunnypilot") + def _set_radar_status(self, status: tuple[str, str]) -> None: + if status == self._radar_status: + return + + self._radar_status = status + self._radar_ranges_label.set_text(status[0]) + self._radar_counts_label.set_text(status[1]) + self._radar_layout_key = None + + def _update_radar_status_layout(self) -> None: + radar_horizontal_padding = 8 + radar_column_gap = 8 + radar_max_inner_width = int(self._content_rect.width - 40) + layout_key = (*self._radar_status, radar_max_inner_width) + if layout_key == self._radar_layout_key: + return + + radar_range_max_width = radar_max_inner_width - 36 - radar_column_gap + self._radar_ranges_label.get_content_height(radar_range_max_width) + self._radar_counts_label.get_content_height(radar_max_inner_width) + self._radar_range_width = int(np.ceil(self._radar_ranges_label.text_width)) + self._radar_count_width = max(36, int(np.ceil(self._radar_counts_label.text_width))) + radar_status_inner_width = self._radar_range_width + self._radar_count_width + (radar_column_gap if self._radar_range_width else 0) + self._radar_status_width = radar_status_inner_width + radar_horizontal_padding * 2 + self._radar_status_height = max( + 42, + self._radar_ranges_label.get_content_height(max(self._radar_range_width, 1)) + 10, + self._radar_counts_label.get_content_height(self._radar_count_width) + 10, + ) + self._radar_layout_key = layout_key + def _handle_mouse_release(self, mouse_pos: MousePos): if (self._radar_tracks_settings_callback is not None and rl.check_collision_point_rec(mouse_pos, self._radar_status_rect)): @@ -256,37 +291,25 @@ class AugmentedRoadView(CameraView): radar_horizontal_padding = 8 radar_column_gap = 8 - radar_max_inner_width = int(self._content_rect.width - 40) - radar_range_max_width = radar_max_inner_width - 36 - radar_column_gap - self._radar_ranges_label.get_content_height(radar_range_max_width) - self._radar_counts_label.get_content_height(radar_max_inner_width) - radar_range_width = int(np.ceil(self._radar_ranges_label.text_width)) - radar_count_width = max(36, int(np.ceil(self._radar_counts_label.text_width))) - radar_status_inner_width = radar_range_width + radar_count_width + (radar_column_gap if radar_range_width else 0) - radar_status_width = radar_status_inner_width + radar_horizontal_padding * 2 - radar_status_height = max( - 42, - self._radar_ranges_label.get_content_height(max(radar_range_width, 1)) + 10, - self._radar_counts_label.get_content_height(radar_count_width) + 10, - ) + self._update_radar_status_layout() self._radar_status_rect = rl.Rectangle( - self._content_rect.x + self._content_rect.width - radar_status_width - 12, + self._content_rect.x + self._content_rect.width - self._radar_status_width - 12, self._content_rect.y + 8, - radar_status_width, - radar_status_height, + self._radar_status_width, + self._radar_status_height, ) radar_status_rect = self._radar_status_rect rl.draw_rectangle_rounded(radar_status_rect, 0.5, 8, rl.Color(0, 0, 0, 170)) self._radar_ranges_label.render(rl.Rectangle( radar_status_rect.x + radar_horizontal_padding, radar_status_rect.y + 5, - radar_range_width, + self._radar_range_width, radar_status_rect.height - 10, )) self._radar_counts_label.render(rl.Rectangle( - radar_status_rect.x + radar_horizontal_padding + radar_range_width + (radar_column_gap if radar_range_width else 0), + radar_status_rect.x + radar_horizontal_padding + self._radar_range_width + (radar_column_gap if self._radar_range_width else 0), radar_status_rect.y + 5, - radar_count_width, + self._radar_count_width, radar_status_rect.height - 10, ))