fix(kernel,explorer): 内核不再画屏消除残留;CREATE 打印 style 诊断
蓝色残留根因:main.vp 里 VGA_drv.Print 在 __init__ 尾部执行,而它晚于 app spawn —— explorer 已经把桌面画上去了,内核随后又往 framebuffer 打一行测试文本/清屏,于是永远盖在桌面上(整屏刷一次也救不了,因为之后又被画)。S3e 之后屏幕由 explorer 独占合成,直接删除内核侧 VGA 驱动创建与 Print。另:handle_request 的 CREATE 分支加一条诊断打印(style/w/h),用于确认 style 是否真的透传到 explorer —— 5 条日志,定位后撤。
This commit is contained in:
1 parent
ae39fab5d8
commit
844fbff31c
2 files changed
+7
-3
No files matched your search
@@ -1002,6 +1002,10 @@ class DeskServer:
|
||||
def handle_request(self, m: desk.DeskMsg):
|
||||
if m.type == uint32(desk.DESK_REQ_CREATE):
|
||||
# pid 随请求携带(窗口还没诞生),标题内联在消息里
|
||||
_sb: [96]char
|
||||
viperlib.snprintf(&_sb, 96, "[explorer] create style=%d w=%d h=%d\n",
|
||||
int(m.style), m.c, m.d)
|
||||
devfs.serial_puts(&_sb)
|
||||
nw: int = self.alloc_window(m.pid, m.a, m.b, m.c, m.d, int(m.style))
|
||||
if nw >= 0:
|
||||
ns: desk.WinSlot* = self.slot(nw)
|
||||
|
||||
@@ -347,9 +347,9 @@ class ViperKernel:
|
||||
mse_svc.start()
|
||||
serial.puts("[main] services started\n")
|
||||
|
||||
VGA_drv = vga._VGAScreenDriver(fb, width, height, pitch, fb_format)
|
||||
self.VGA = &VGA_drv
|
||||
self.VGA.Print(100, 100, "ViperOS VKernel Test")
|
||||
# S3e 之后屏幕由用户态 explorer 独占合成:内核不再创建 VGA 驱动、不再往 framebuffer
|
||||
# 画任何东西。原先这里会 Print 一行测试文本,而它执行时间在 explorer 启动之后 ——
|
||||
# 等于把内核测试内容盖在桌面上(也是屏幕上蓝色/文本残留的来源)。
|
||||
_CheckFrameLocals("after_vga", fb, width, height, pitch)
|
||||
serial.puts("你好\n")
|
||||
|
||||
|
||||
Reference in new issue
Block a user