mirror of
https://github.com/kunkundi/crossdesk.git
synced 2026-10-18 01:46:47 +08:00
46 lines
3.2 KiB
Markdown
46 lines
3.2 KiB
Markdown
# 鼠标输入启动诊断
|
||
|
||
控制端和被控端都需要重新编译 CrossDesk 及 `deps/submodules/minirtc`。
|
||
诊断默认使用 INFO/WARN 日志。连接后立即在远端画面内持续移动鼠标,
|
||
保留两端同一次运行的 `crossdesk-*.log` 和 `minirtc-*.log`。
|
||
|
||
## 记录顺序
|
||
|
||
| 日志 | 所在端 | 含义 |
|
||
| --- | --- | --- |
|
||
| `Input connection status` | 两端 CrossDesk | 上层连接状态变化 |
|
||
| `Mouse UI stream window shown` / `Mouse UI selected` | 控制端 CrossDesk | 窗口显示和当前会话选择 |
|
||
| `Mouse UI event` | 控制端 CrossDesk | Slint 视频输入区域收到事件,包含本地 UI 遮挡、拖动和释放抑制状态 |
|
||
| `Mouse trace: scope=pointer` / `scope=scroll` | 控制端 CrossDesk | 转发入口、过滤原因、调用发送 API 的时间和返回值 |
|
||
| `Mouse transport dispatch` | 控制端 MiniRTC | 连接与 ICE 就绪检查及传输层返回值 |
|
||
| `Mouse RTP enqueue` | 控制端 MiniRTC | 实际入队结果,队列满时明确记录 |
|
||
| `Mouse RTP send begin` / `send end` | 控制端 MiniRTC | 队列等待、底层发送调用耗时及真实返回值 |
|
||
| `Mouse RTP receive` | 被控端 MiniRTC | RTP 包进入鼠标数据通道,位于应用回调之前 |
|
||
| `Mouse trace: scope=receive` | 被控端 CrossDesk | 应用回调入口及各检查、提交阶段 |
|
||
| `Mouse RTP callback complete` | 被控端 MiniRTC | 应用回调的总耗时 |
|
||
|
||
应用接收阶段依次为 `parse`、`authorize`、`desktop_check`、`dispatch`,
|
||
随后是 `normal_desktop_inject` 或 `secure_desktop_inject`。
|
||
`phase=stage_begin` 在调用前记录,`phase=stage_done` 或 `phase=end`
|
||
报告该阶段耗时。若某阶段开始后长时间没有结束,可以确定阻塞区间。
|
||
`outcome=no_controller`、`unauthorized`、`inject_failed` 等说明具体处理结果;
|
||
`submitted` 表示操作系统提交调用成功,不是目标应用已执行的确认。
|
||
|
||
## 关联与限频
|
||
|
||
- `tag` 是鼠标消息原始字节的 FNV-1a 64 位摘要,可关联发送和接收;相同消息
|
||
会有相同摘要,因此重复消息应同时结合 RTP 的 `ssrc` / `seq` 和时间判断。
|
||
- `event` 是各阶段本地计数,不应视为跨端共同序号。会话/通道重建后重新计数。
|
||
- `mono_us` 是进程所在机器的单调时钟,只用于该端的耗时判断。
|
||
两端日志的墙钟可能不同,不能直接相减当作网络时延。
|
||
- `queue_us`、`send_us`、`stage_us`、`dispatch_us` 和 `total_us` 单位均为微秒。
|
||
`stage_us` 和 `send_us` 排除本阶段入口日志写入时间;总耗时仍包含诊断开销。
|
||
- 每个采样器记录前 3 次事件,此后最多每 5 秒选取一次事件。
|
||
失败和耗时达到 100 毫秒的调用使用独立限频,前 3 次记录,此后每 5 秒一次。
|
||
- 发送 API 的返回值不等于网络送达确认,应检查传输层、RTP 发送和远端接收记录。
|
||
|
||
如果有 UI 事件而没有发送入口,先看 `local_ui`、`dragging`、`suppressed`;
|
||
如果已入队却迟迟没有实际发送,查看 `queue_us`;如果远端已有 RTP 记录,
|
||
但应用处理耗时很长,查看接收阶段。仅当两端相关阶段都及时完成时,
|
||
才进一步检查 Windows 注入后的钩子或目标应用行为。
|