Skip to content

Commit f25f726

Browse files
committed
debug
1 parent 283b487 commit f25f726

File tree

3 files changed

+88
-30
lines changed

3 files changed

+88
-30
lines changed

selfdrive/ui/mici/onroad/augmented_road_view.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,9 @@ def _render(self, _):
129129
rl.draw_texture(self._icon, int(icon_x), int(icon_y), rl.WHITE)
130130

131131

132+
times = {}
133+
134+
132135
class AugmentedRoadView(CameraView):
133136
def __init__(self, bookmark_callback=None, stream_type: VisionStreamType = VisionStreamType.VISION_STREAM_ROAD):
134137
super().__init__("camerad", stream_type)
@@ -183,11 +186,24 @@ def _handle_mouse_release(self, mouse_pos: MousePos):
183186
super()._handle_mouse_release(mouse_pos)
184187

185188
def _render(self, _):
189+
def tlog(uid):
190+
nonlocal t
191+
now = time.monotonic()
192+
if uid not in times:
193+
times[uid] = [now - t]
194+
else:
195+
times[uid].append(now - t)
196+
t = now
197+
186198
start_draw = time.monotonic()
199+
t = time.monotonic()
187200
self._switch_stream_if_needed(ui_state.sm)
201+
tlog("switch_stream")
202+
# print(f"{(time.monotonic() - t) * 1000:.2f} ms - switch stream check")
188203

189204
# Update calibration before rendering
190205
self._update_calibration()
206+
tlog("update_calib")
191207

192208
# Create inner content area with border padding
193209
self._content_rect = rl.Rectangle(
@@ -208,9 +224,11 @@ def _render(self, _):
208224

209225
# Render the base camera view
210226
super()._render(self._content_rect)
227+
tlog("camera render")
211228

212229
# Draw all UI overlays
213230
self._model_renderer.render(self._content_rect)
231+
tlog("model render")
214232

215233
# Fade out bottom of overlays for looks
216234
rl.draw_texture_ex(self._fade_texture, rl.Vector2(self._content_rect.x, self._content_rect.y), 0.0, 1.0, rl.WHITE)
@@ -232,6 +250,8 @@ def _render(self, _):
232250
self._alert_renderer.render(self._content_rect)
233251
self._hud_renderer.render(self._content_rect)
234252

253+
tlog("UI overlays")
254+
235255
# Draw fake rounded border
236256
rl.draw_rectangle_rounded_lines_ex(self._content_rect, 0.2 * 1.02, 10, 50, rl.BLACK)
237257

@@ -249,6 +269,14 @@ def _render(self, _):
249269
rl.draw_rectangle(int(self.rect.x), int(self.rect.y), int(self.rect.width), int(self.rect.height), rl.Color(0, 0, 0, 175))
250270
self._offroad_label.render(self._content_rect)
251271

272+
tlog("final overlays")
273+
274+
# print("*** AugmentedRoadView timing ***")
275+
# for uid, tlist in times.items():
276+
# max_time = max(tlist) * 1000
277+
# avg_time = sum(tlist) / len(tlist) * 1000
278+
# print(f" {uid}: max {max_time:.2f} ms, avg {avg_time:.2f} ms over {len(tlist)} calls")
279+
252280
# publish uiDebug
253281
msg = messaging.new_message('uiDebug')
254282
msg.uiDebug.drawTimeMillis = (time.monotonic() - start_draw) * 1000

selfdrive/ui/mici/onroad/cameraview.py

Lines changed: 59 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import time
12
import platform
23
import numpy as np
34
import pyray as rl
@@ -103,6 +104,8 @@
103104
}
104105
"""
105106

107+
times = {}
108+
106109

107110
class CameraView(Widget):
108111
def __init__(self, name: str, stream_type: VisionStreamType):
@@ -225,13 +228,27 @@ def _calc_frame_matrix(self, rect: rl.Rectangle) -> np.ndarray:
225228
])
226229

227230
def _render(self, rect: rl.Rectangle):
231+
def tlog(uid):
232+
nonlocal t
233+
now = time.monotonic()
234+
if uid not in times:
235+
times[uid] = [now - t]
236+
else:
237+
times[uid].append(now - t)
238+
t = now
239+
240+
t = time.monotonic()
228241
if self._switching:
229242
self._handle_switch()
230243

244+
tlog("switch")
245+
231246
if not self._ensure_connection():
232247
self._draw_placeholder(rect)
233248
return
234249

250+
tlog("connect")
251+
235252
# Try to get a new buffer without blocking
236253
buffer = self.client.recv(timeout_ms=0)
237254
if buffer:
@@ -240,35 +257,47 @@ def _render(self, rect: rl.Rectangle):
240257
elif not self.client.is_connected():
241258
# ensure we clear the displayed frame when the connection is lost
242259
self.frame = None
243-
244-
if not self.frame:
245-
self._draw_placeholder(rect)
246-
return
247-
248-
transform = self._calc_frame_matrix(rect)
249-
src_rect = rl.Rectangle(0, 0, float(self.frame.width), float(self.frame.height))
250-
# Flip driver camera horizontally
251-
if self._stream_type == VisionStreamType.VISION_STREAM_DRIVER:
252-
src_rect.width = -src_rect.width
253-
254-
# Calculate scale
255-
scale_x = rect.width * transform[0, 0] # zx
256-
scale_y = rect.height * transform[1, 1] # zy
257-
258-
# Calculate base position (centered)
259-
x_offset = rect.x + (rect.width - scale_x) / 2
260-
y_offset = rect.y + (rect.height - scale_y) / 2
261-
262-
x_offset += transform[0, 2] * rect.width / 2
263-
y_offset += transform[1, 2] * rect.height / 2
264-
265-
dst_rect = rl.Rectangle(x_offset, y_offset, scale_x, scale_y)
266-
267-
# Render with appropriate method
268-
if TICI:
269-
self._render_egl(src_rect, dst_rect)
270-
else:
271-
self._render_textures(src_rect, dst_rect)
260+
#
261+
# if not self.frame:
262+
# self._draw_placeholder(rect)
263+
# return
264+
#
265+
# tlog("recv")
266+
#
267+
# transform = self._calc_frame_matrix(rect)
268+
# src_rect = rl.Rectangle(0, 0, float(self.frame.width), float(self.frame.height))
269+
# # Flip driver camera horizontally
270+
# if self._stream_type == VisionStreamType.VISION_STREAM_DRIVER:
271+
# src_rect.width = -src_rect.width
272+
#
273+
# # Calculate scale
274+
# scale_x = rect.width * transform[0, 0] # zx
275+
# scale_y = rect.height * transform[1, 1] # zy
276+
#
277+
# # Calculate base position (centered)
278+
# x_offset = rect.x + (rect.width - scale_x) / 2
279+
# y_offset = rect.y + (rect.height - scale_y) / 2
280+
#
281+
# x_offset += transform[0, 2] * rect.width / 2
282+
# y_offset += transform[1, 2] * rect.height / 2
283+
#
284+
# dst_rect = rl.Rectangle(x_offset, y_offset, scale_x, scale_y)
285+
#
286+
# tlog("calc rects")
287+
#
288+
# # Render with appropriate method
289+
# if TICI:
290+
# self._render_egl(src_rect, dst_rect)
291+
# else:
292+
# self._render_textures(src_rect, dst_rect)
293+
#
294+
# tlog("render")
295+
296+
print("*** CameraView timings ***")
297+
for uid, tlist in times.items():
298+
max_time = max(tlist) * 1000
299+
avg_time = sum(tlist) / len(tlist) * 1000
300+
print(f" {uid}: max {max_time:.2f} ms, avg {avg_time:.2f} ms over {len(tlist)} calls")
272301

273302
def _draw_placeholder(self, rect: rl.Rectangle):
274303
if self._placeholder_color:
@@ -342,6 +371,7 @@ def _ensure_connection(self) -> bool:
342371

343372
if not self.client.connect(False) or not self.client.num_buffers:
344373
return False
374+
return False
345375

346376
cloudlog.debug(f"Connected to {self._name} stream: {self._stream_type}, buffers: {self.client.num_buffers}")
347377
self._initialize_textures()

tools/replay/camera.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#include "third_party/linux/include/msm_media_info.h"
99
#include "tools/replay/util.h"
1010

11-
const int BUFFER_COUNT = 40;
11+
const int BUFFER_COUNT = 127;
1212

1313
std::tuple<size_t, size_t, size_t> get_nv12_info(int width, int height) {
1414
int nv12_width = VENUS_Y_STRIDE(COLOR_FMT_NV12, width);

0 commit comments

Comments
 (0)