diag(vkernel): _render() 各阶段埋 [rc] 面包屑,定位卡死步骤
日志证据:本轮 [dt] 心跳一行都没打印 → 桌面线程没走到“每秒”分支,即卡在第一轮循环里; 而屏幕顶部出现一小块蓝色 → 很可能执行到第一次 _render() 中途卡住(写了一半)。 宿主 QEMU 随后 abort(0x40000015 = STATUS_FATAL_APP_EXIT)。 在 _render() 埋 6 个面包屑: [rc] entry / bg done / taskbar done / windows done / cursor done / vblank done / flush done 最后打印的那条 = 卡住的那一步。若连 [rc] entry 都没有,则卡点在其之前 (_update_mouse / _update_keyboard / _heartbeat_check),再补那边。 定位后连同所有 [DIAG] 一并移除。
This commit is contained in:
1 parent
164228e15a
commit
cfbb0c1286
1 file changed
+7
@@ -1294,6 +1294,7 @@ _perf_t_fb: uint64 = 0
|
||||
def _render():
|
||||
global _render_count, _cached_top_win
|
||||
global _perf_t_bg, _perf_t_win, _perf_t_cur, _perf_t_fb
|
||||
serial.puts("[rc] entry\n")
|
||||
w: int = _screen_w
|
||||
h: int = _screen_h
|
||||
pitch: int = _fb_pitch
|
||||
@@ -1313,8 +1314,10 @@ def _render():
|
||||
py_bg += 1
|
||||
t1: uint64 = timer.timer_get_ticks()
|
||||
_perf_t_bg += (t1 - t0)
|
||||
serial.puts("[rc] bg done\n")
|
||||
|
||||
_draw_taskbar(back)
|
||||
serial.puts("[rc] taskbar done\n")
|
||||
|
||||
t2: uint64 = timer.timer_get_ticks()
|
||||
sorted: [MAX_APP_WINDOWS]int
|
||||
@@ -1335,6 +1338,7 @@ def _render():
|
||||
_draw_app_window(back, &_wins[sorted[si]])
|
||||
t3: uint64 = timer.timer_get_ticks()
|
||||
_perf_t_win += (t3 - t2)
|
||||
serial.puts("[rc] windows done\n")
|
||||
|
||||
# Mark cursor rows as dirty so cursor gets flushed to framebuffer
|
||||
_mark_rows_dirty(_cursor_y, CURSOR_H)
|
||||
@@ -1342,8 +1346,10 @@ def _render():
|
||||
_draw_cursor(back)
|
||||
t4: uint64 = timer.timer_get_ticks()
|
||||
_perf_t_cur += (t4 - t3)
|
||||
serial.puts("[rc] cursor done\n")
|
||||
|
||||
_wait_vblank()
|
||||
serial.puts("[rc] vblank done\n")
|
||||
if _dirty_count > 0:
|
||||
py_fb: int = _dirty_y_min
|
||||
while py_fb <= _dirty_y_max:
|
||||
@@ -1357,6 +1363,7 @@ def _render():
|
||||
py_fb += 1
|
||||
t5: uint64 = timer.timer_get_ticks()
|
||||
_perf_t_fb += (t5 - t4)
|
||||
serial.puts("[rc] flush done\n")
|
||||
|
||||
_render_count += 1
|
||||
|
||||
|
||||
Reference in new issue
Block a user