Compare commits

...

3 Commits

231 changed files with 11754 additions and 25 deletions

View File

@ -1,7 +1,66 @@
# 继续开发前必读
## 2026-11-05 Ubuntu 深度响应调优(最新)
- Ubuntu VM102 已在正常会话中启用 KMS 捕获 + 原生独立光标:virtio_gpu atomic 唯一 primary plane,2K geometry,cursor hotspot plane 不暴露;盒子客户端 SHA 未变。KMS 守护按 `CRTC_W/H=2560x1440` 校验,不能依赖 virtio atomic 客户端的 legacy `crtc_id/fb_id=0`。
- KMS 45FPS 与 X11 45FPS 长按框选回显 P50/P95=195.9/246.6ms vs 250.1/311.5ms;更新约16.0/s vs10.6/s。28次原生光标点击、7种形状/热点/隐显通过,像素差0;正常退出、空闲重连、guard强杀恢复、再次重连通过。证据 `docs/evidence/ubuntu-deep-latency-20261105/`,报告 `docs/ubuntu-deep-latency-20261105.md`。
- 真实GTK按钮/ masked entry 定量仅为当前应用内回显,不能代表真实后端认证;KMS按钮约304/378ms、字符约165/182ms。硬编和 `min_threads=4` 均失败/无收益并已撤回;Ubuntu仍软件x264,未达到Windows约90ms或零延迟。
- 盒子 Ubuntu 卡片暂保持45FPS请求用于当前联调,2K/30Mbps;若收尾要回30FPS,先正常退出并改仅 Ubuntu 对象。当前现场应保持 `vdi-sunshine.service capture=kms` 与 guard active;检查时不要用 `fb_id/crtc_id` 作为活动判据。
完整对话总结在:`D:\DAIMA\vdi-cloud\PROJECT_CONTEXT.md`
## 2026-11-05 Ubuntu框选/渲染后续(优先于旧VM102硬件描述)
- 后续用户要求清理锁屏Sunshine卡片:已确认是Stream Started/Paused通知,非多份安装。Ubuntu sunshine.conf新增system_tray=disabled(同时移除托盘图标),正常退出/入口重连后新进程日志确认生效;仅当前4条通知均为Sunshine时,通过GNOME通知面板清除并确认0剩余。原配置备份~/vdi-terminal/backups/sunshine-notifications-20261105/sunshine.conf;不改全局通知或锁屏策略,串流/guard active,退回普通桌面。下方“Sunshine配置与原配置一致”仅指渲染调优结束时,现多此一项。
- 用户要求先只处理Ubuntu,已明确允许正常关闭启动、A/B及必要回退。本轮VM102正常关闭启动3次,最终4核/6144MB、cpu=host、vga=virtio-gl;宿主Intel i915共享渲染,Windows/麒麟/独占NVIDIA配置未动。宿主仅补GL/EGL/Mesa依赖,0升级10新增0移除。
- Xorg确认virgl Intel HD4600/glamor生效,x264确认AVX2/FMA3/BMI2。仍X11捕获/libx264软件编码,renderD128不代表硬件编码。最终2K30/30Mbps/limited、默认线程;45FPS及min_threads=4试验无明显延迟收益,已撤回。盒子desktops JSON结构与本轮备份完全相同,客户端SHA仍5d4330…。
- 受控60Hz长按框选:基线回显P50/P95=398.3/634.6ms,最终224.4/308.3ms;独立编号更新2.0→12.4/s,不等于总视频FPS。有效轮次最终编号300及释放均见;中位改善约44%,短样本未随机重复,非USB/光子延迟,尚未达到Windows/原生目标。
- 回归16编号点击+2快速点击,源18按/18放,最大坐标误差1.375px;2K及12灰阶核对通过。临时测试服务已停,最后留Ubuntu普通桌面,Sunshine/guard active。不要自动进一步改麒麟。
- 备份PVE /root/vdi-ubuntu-render-20261105/102.conf.before,Ubuntu/盒子各自~/vdi-terminal/backups/ubuntu-render-20261105/。回退只还原cpu/删除vga字段,需正常关闭启动;别整份覆盖VM配置。
- 报告docs/ubuntu-drag-render-20261105.md,原始证据docs/evidence/ubuntu-drag-20261105/。剩余瓶颈为捕获/GPU读回/软件编码;未部署硬编方案或更换协议。
## 2026-11-05 Linux原生独立光标(优先于下方旧样式/原型状态)
- 用户要求保留原生样式并直接实施低延迟方案;Ubuntu恢复Adwaita/24、default加速,关闭动画保留。两Linux真实2560×1440/30FPS请求/30Mbps/limited/软件编码保留。
- 已部署0005 + terminal/native-cursor:受限独立SSH密钥/固定主机公钥同步XFixes真实形状、热点、显隐,本地X11指针移动不等待视频。单座席X11/2K/绝对鼠标,最多128×128;状态2秒过期或源几何改变则结束串流恢复原服务,不做运行中帧交接。
- 私有原版Sunshine精确SHA + 进程级adapter只清除捕获副本像素。Ubuntu原/usr/bin/sunshine的capabilities保留,租约内用同SHA无cap副本;麒麟仅host.py/私有sunshine/.so认证KYSEC。guard按需启动,ExecStopPost恢复;原服务永久文件不改。
- 盒子最终客户端SHA 5d4330f703d7f8e053bc3795ca42bdaf231c9e9dd8ebb00a612013adbcccee03,.71/.72 profile固定该值;helper在远端租约前核验,旧备份实测拒绝且原服务PID不变。修改二进制须停用profile并重新验证。备份~/vdi-terminal/backups/native-cursor-20261105/;回退先退出等恢复,再停用两JSON。
- 最终版两系统七种光标形状/热点一致、静态像素最大差0、视频无混入指针;各28编号点击与源事件完全匹配,Ubuntu误差最大1.055px、麒麟0.829px。较早各16次40ms短按和双击补测通过;最终版暂停Moonlight指针仍移动,较早服务器主动warp(400,600)两台读回正确。
- 最终页面视频回显Ubuntu P50/P95 188.38/522.42ms,麒麟134.37/165.56ms;不是本地指针或物理USB延迟,未定量证明Windows等效。Ubuntu两次强制暂停恢复后首击未回显,根因未定;完整SDL失焦未验收,不可称全部场景无丢输入。
- agent/guard SIGKILL恢复、Ubuntu bridge冻结退出、麒麟真实分辨率变化退出及恢复2K重连均已测。4项单测和清洁patch应用通过。构建器会规范CRLF但严格上下文;现场本轮未重建部署其他任务0004,不能据构建器宣称现场包含0004。
- 普通Ubuntu初次收尾约4分42秒触发stale/mismatched退出,发现校验时间在读取前取得的原子替换竞态,改为读后取时间。该轮未区分未来/实际过期,不能认定唯一根因。仅修时序版先6分钟通过,之后9分32秒真实heartbeat超时;最终状态等待上限改2秒、主机TTL4秒,增加X11读耗时诊断。已测暂停Ubuntu代理1.1秒时指针继续移动且会话存活。旧1da552…形状/点击证据保留;最终版持续运行另记。
- Ubuntu原Sunshine在11:12:07恢复测试阶段停止超过10秒、看门狗SIGTRAP,11:12:14恢复;未修复上游停止看门狗问题,原crash报告保留且未外发。
- 最终2秒策略Ubuntu6分钟/65960次状态读取存活,含1.1秒暂停;读前时间出现1次合法未来值、读后0次,证实竞态检查顺序需要修正。随后同会话七形状/28点击通过;bridge冻结2.6秒后2.904秒检查客户端退出,原服务恢复。详见ubuntu-final-soak/release-probe/final-stale-state等最终证据。
- 最终新SHA的Windows2K45/RKMPP/EGL无独立光标env回归;麒麟2K30七形状/28点击及普通桌面重连后退出,原服务active且无临时drop-in。Ubuntu保留2K30/原生指针PID299860/父235482,guard按设计active,临时GTK源/盒子探针均已停。报告docs/linux-native-cursor-20261105.md,证据docs/evidence/native-cursor-20261105/。
## 2026-11-05 Ubuntu画质与鼠标样式调优
- Ubuntu .72/test2 已由1080p升级真实2560×1440,盒子只改Ubuntu对象为2K30,自动请求30Mbps。原VM虚拟VGA在当前内核可直接切2K,未改PVE硬件或重启VM/GDM。
- 用户服务启动前newmode/addmode/output创建2K;删模式后服务启动重建通过。GNOME monitors.xml保存单屏2K/100%缩放,最终锁屏/解锁仍2K;整机重启恢复未验收。DisplayConfig持久调用曾待确认后回退,已重新保存显示配置并重新核验最终尺寸。
- DMZ-White/24px、flat鼠标加速、关闭GNOME动画;不是复制Windows整套主题,也没有叠加本地假箭头。无GPU render节点,仍X11/libx264 ultrafast/zerolatency默认线程。
- .72 host-color-range=0,正常kiosk最终PID240476/父235482,2K30/30Mbps、RKMPP/EGL、服务端MPEG和真实源2K核对;最终保留Ubuntu普通桌面连接,临时GTK服务已停止。
- 正常入口2K短测:45请求full21.49FPS/F9 P50 373.2ms;limited22.83/376.7ms;单线程+无动画17.98/402.9ms(单线程已撤回);最终30请求limited/默认线程/无动画21.40/320.9ms。F9每轮24翻转无超时,但一轮客体有额外F9事件且无序号,不能证明逐键延迟。四轮启动快速点击只记录24/24/23/21且单线程有坐标重复,不能说全部通过;补做稳定正常会话24次慢速交替点击24/24、误差<1px、F8收到,见final-input-check.json。源GTK本身约15–20绘制/秒,视频含重复帧;不能声称独立运动21–23帧、稳定30/45或物理延迟降低/Windows等效。
- limited灰阶保持黑白层次,未显著截断;单像素/彩字仍受4:2:0限制。两端备份~/vdi-terminal/backups/ubuntu-quality-20261105/,Ubuntu monitors.xml原不存在;.72 range原不存在。原Sunshine配置/服务、gsettings原值均保留。测试仅补装python3-gi-cairo,无整体升级。
- 文档docs/ubuntu-quality-20261105.md、证据docs/evidence/ubuntu-quality-20261105/。Windows/麒麟卡片结构比较未变,未改客户端二进制、全局渲染或USB任务修改。
## 2026-11-05 Windows固定PCI设备不再可弹出
- 用户要求日常体验像普通电脑、托盘只留真实U盘,授权“你自己保存然后重启”。交互会话仅设置/系统窗口,无打开文档;未强制关闭应用。
- 09:28正常shutdown.exe /s /t 0后冷启动VM100。原args保留GPU子厂商设置,追加三个global:ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off、pci-bridge.shpc=off、pcie-root-port.hotplug=off。PCI增删须关机,USB设备级热插拔保留;没改总线/设备地址/驱动,没有重启USB隧道。
- 原托盘四项(GTX965M/VirtIO网卡/串口/附加AHCI)Capabilities从6变0,InstanceId相同,Status OK;GPU错误0,系统盘Online/Healthy,IP .70、Sunshine及Guest Agent正常。
- PVE备份/工具/root/vdi-fixed-pci-20261105/(backup/plan.json、vm.conf.before),set-fixed-pci.py支持prepare/apply/restore且拒绝在线变更。4项单测和无磁盘/网络后端/直通GPU的隔离QEMU测试通过(PCI关闭、usb-redir添加/删除)。
- 盒子无物理U盘,仅键鼠,USB服务active;Moonlight随关机退出,用户须重连Windows。托盘UIA未暴露传统图标子项,外观与真实U盘插拔待用户验收,不冒充目视完成。文档docs/fixed-pci-tray-20261105.md及evidence/fixed-pci-20261105。
## 2026-11-04 云桌面图形关机/重启按钮限制
- 用户明确要求Windows/Ubuntu/麒麟桌面内图形关机、重启按钮也禁用,前面的快捷键补丁不足。本轮已通过PVE Guest Agent实际部署,不依赖未构建的Moonlight 0004。
- Windows VM100/test HKU Explorer NoClose=1,交互用户任务广播Policy并SHRestricted(2)=1;无Explorer重启/注销/VM重启,任务已删除。首次原值备份C:\ProgramData\VDI\power-policy\original.clixml。
- 麒麟VM101/test1使用polkit .pkla,Ubuntu VM102/test2使用.rules。两台均额外部署/etc/dbus-1/system.d/zz-vdi-desktop-power.conf,按客户UID拒绝login1电源方法和Can*查询,只ReloadConfig。root CanPowerOff仍yes。
- 两台实际图形进程pkcheck基础reboot仍授权(内部原因未确定),所以不能只靠polkit宣称已屏蔽。D-Bus错误签名安全探测八项全部Access denied,七项Can*拒绝;并未发送有效关机请求。麒麟定位时仅重启过polkit一次,Sunshine保持active。
- 三台running,Windows LastBoot及Linux boot ID与部署前一致;未逐项目视验收菜单外观、未重启验收。限制当前客户账户图形电源入口,不防管理员命令/改策略,不涉及注销/锁屏,不实现盒子开关联动VM生命周期。新用户需重新针对账户应用。
- 工具tools/deploy-guest-power-policy.py apply/query/restore --vm 100或--vm 101 --user test1或--vm 102 --user test2;Linux首次备份/var/lib/vdi/power-policy。详见docs/guest-power-policy-20261104.md及evidence/guest-power-policy-20261104。
## 2026-11-04 盒子过夜重启观察(最新)
- 用户要求今晚开机观察并记录重启/原因。19:35启用vdi-overnight-observer.service,active/enabled,每60秒fsync心跳、boot ID/uptime计数、温度/负载/内存/网络/进程/桌面几何;跨午夜分日志。当前计数0是启用后范围,不代表历史没重启。
- 中文汇总~/vdi-terminal/logs/overnight-summary.txt;JSON行overnight-health-YYYYMMDD.log;持久状态~/vdi-terminal/state/overnight-state.json。同boot的服务重启不计为整机重启;11项状态/证据/跨日测试通过,实际分钟样本和服务重启状态保持已验证,未实际重启盒子。
- /var/log是zram,journal链接到eMMC /var/log.hdd/journal。新增70-vdi-observer-journal.conf配置persistent/64MB/7day/30s,flush/sync确认磁盘journal;只重启journald和本观察服务,不动Moonlight/显示/网络/GPU。
- root拥有/usr/local/libexec/vdi-observer-pstore只读采集pstore到/var/lib/vdi-observer/pstore.json(root:systemd-journal 640),观察服务低权限读取。旧归档41字节reboot行仅基线;仅内容变化作为新线索。无法确认的断电/硬复位明确标原因未确认,不能伪造重启因果。
- 最后Windows串流PID137139、2K45和显示守护保留,boot ID afb6a02f-ba7c-478a-8704-c78a993d23c6。文档docs/overnight-box-observation-20261104.md及evidence/overnight-observer-20261104;备份~/vdi-terminal/backups/overnight-observer-20261104-*。明早读取两天日志和汇总,无明早自动通知任务。
## 2026-11-04 麒麟鼠标掉帧继续排查(最新)
- 保留原版Sunshine SHA256 1c3099bf924db3aee759b3d7c05e012569ef8650c400d1479144398795decc71、单线程、暂停合成器、真实2K30/30Mbps。未改PVE或其他桌面。
- wrapper支持~/.config/vdi-terminal/host-color-range/<host>的0/1协商;仅.71设0,消除软件full-range额外转换。同场景2K45请求:原full21.42FPS,limited28.81FPS;不代表真实45或物理延迟与Windows一致。

View File

@ -66,7 +66,7 @@ vdi-cloud/
- 会话退出后返回桌面列表。
不同客户部署环境的桌面地址不同:换环境时在“设置”里改地址即可,不需要改代码。
VPN 属于网络层能力(盒子上的 VPN 客户端建立隧道后),地址字段直接填隧道地址即可。
这里的 VPN 仅指网络层能力:盒子上的 VPN 客户端建立隧道后,桌面地址字段可以填写隧道地址。让云桌面内部浏览器和应用通过 Clash/Mihomo 访问 GPT 等外部服务属于后续规划,见“下一步计划”第 8 项。
设备身份自动登录是正式认证 API 上线前的临时实现。后续通过 `DesktopService` 适配层接入真实的用户认证、桌面列表和一次性连接票据接口,页面流程不需要重写。
@ -86,7 +86,9 @@ VPN 属于网络层能力(盒子上的 VPN 客户端建立隧道后),地
- `vsync`、`frame-pacing`、性能叠图等低延迟参数可配置;
- 独立 Moonlight 启动脚本保留作调试用途,但不再作为产品开机入口。
2026-11-04 现场已接通 Windows、Ubuntu、麒麟三种桌面的正常选择与连接流程。Ubuntu 当前采用 1080p / 30 FPS 配置,麒麟已升级真实 2K / 30 FPS 配置与30Mbps;两者使用 `libx264` 软件编码,盒子使用 RKMPP 硬解。麒麟后续采用逐主机limited视频范围协商,同场景动态短测由约21提高至29FPS,仍未达到Windows水平,长期性能及物理输入延迟尚未验收。配置、备份与证据见 [Linux 桌面接入记录](docs/linux-desktop-onboarding-20261104.md)、[麒麟2K调优记录](docs/kylin-quality-20261104.md) 和 [鼠标掉帧继续排查](docs/kylin-mouse-20261104.md)。
2026-11-04 现场已接通 Windows、Ubuntu、麒麟三种桌面的正常选择与连接流程。Ubuntu 与麒麟现均为真实 2K / 30 FPS 请求配置与30Mbps,使用 `libx264` 软件编码和逐主机limited范围协商,盒子使用 RKMPP 硬解。2026-11-05 两套 Linux 已启用受限 X11 原生独立光标:同步实际形状/热点/显隐,由盒子显示指针位置,移动不再等待视频;Ubuntu恢复Adwaita/24px及默认鼠标加速,保留关闭动画。Windows保持原视频光标路径。形状、编号点击、断线恢复已实测,完整失焦与物理输入延迟尚未验收;点击页面及拖窗内容仍受软件编码限制,不能称定量等同Windows。方案和边界见 [原生独立光标实施记录](docs/linux-native-cursor-20261105.md);历史画质证据见 [Linux接入](docs/linux-desktop-onboarding-20261104.md)、[Ubuntu调优](docs/ubuntu-quality-20261105.md)、[麒麟2K调优](docs/kylin-quality-20261104.md)。
2026-11-05 后续只对 Ubuntu VM102 启用 `cpu=host`(AVX2)及 `virtio-gl`(共享Intel核显渲染)。受控长按框选的回显中位数约398→224ms,2K与原生光标保留;45FPS和4编码线程未继续改善延迟,最终仍用30FPS及默认线程。尚未达到Windows/原生目标,仍需解决捕获和软件编码瓶颈,详见 [Ubuntu框选与渲染调优](docs/ubuntu-drag-render-20261105.md)。
### 3. 状态机
@ -250,7 +252,9 @@ Moonlight 调试配置路径:
4. 实现 Ubuntu、麒麟桌面连接配置;
5. 适配 RK3528 MPP/VPU 硬解;
6. 切换到 Weston/Wayland 正式显示路径;
7. 开发 `vdt-agent`、OTA、USB、云端服务和 Web 控制台。
7. 开发 `vdt-agent`、OTA、USB、云端服务和 Web 控制台;
8. **云桌面内上网代理(规划)**:在终端登录首页提供代理配置入口,支持导入/更新 Clash 或 Mihomo 订阅、选择节点、启停和连通性测试;由云端服务将策略分别下发到 Windows、Ubuntu 和麒麟云桌面,使桌面内的浏览器和应用可以访问 GPT 等外部服务,同时为 Moonlight 串流、管理平台和必要内网地址保留稳定的直连/专用路由。该功能当前不实现、不部署;
9. **云桌面软件白名单与商业合规(规划)**:建立按客户/桌面生效的软件允许列表、版本校验、策略下发、审计和回滚流程。Windows 与麒麟计划通过签名的系统插件或代理组件执行白名单策略;Ubuntu 计划在系统底层实施,并在定版前完成权限模型、更新机制和例外流程评审。该功能当前不实现、不部署,正式销售前必须完成授权范围和合规审查。
## 十、开发规范

View File

@ -0,0 +1,37 @@
status: running
agent: 1
args: -set device.hostpci0.x-pci-sub-vendor-id=0x1558 -set device.hostpci0.x-pci-sub-device-id=0x6557 -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off -global pci-bridge.shpc=off -global pcie-root-port.hotplug=off
balloon: 0
bios: seabios
boot: order=sata0;ide2
cores: 4
cpu: host,hidden=1
hostpci0: 0000:01:00.0,pcie=1,rombar=1,romfile=gtx965m-clevo-readback-20261103.rom
ide0: none,media=cdrom
ide2: none,media=cdrom
machine: pc-q35-11.0
memory: 8192
meta: creation-qemu=11.0.0,ctime=1792722917
name: win10-test
net0: virtio=BC:24:11:B4:01:43,bridge=vmbr0,firewall=1
numa: 0
onboot: 1
ostype: win10
sata0: local-lvm:base-100-disk-0,size=60G
scsihw: virtio-scsi-single
smbios1: uuid=52fd3777-0bb4-40a7-8136-b02c40947a11
sockets: 1
template: 0
vmgenid: a1963978-050f-4b3c-8c9a-7a4d13d72f43
{
"vm": 100,
"device_present": false,
"channels": [],
"usb": " Device 0.1, Port 1, Speed 480 Mb/s, Product QEMU USB Tablet, ID: tablet\r\n",
"vm_status": {
"status": "running",
"running": true
}
}
EXIT 0

View File

@ -0,0 +1,3 @@
{"vm": 100, "action": "apply", "args": "-set device.hostpci0.x-pci-sub-vendor-id=0x1558 -set device.hostpci0.x-pci-sub-device-id=0x6557 -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off -global pci-bridge.shpc=off -global pcie-root-port.hotplug=off", "next_step": "cold start and verify Windows"}
EXIT 0

View File

@ -0,0 +1,2 @@
EXIT 0

View File

@ -0,0 +1,11 @@
QEMU_VERSION {'qemu': {'micro': 3, 'minor': 0, 'major': 11}, 'package': 'pve-qemu-kvm_11.0.3-4'}
PCIE_PORT_HOTPLUG_OFF: 4/4
PCI_BRIDGE_SHPC_OFF: 4/4
ACPI_PCI_HOTPLUG_OFF
USB_REDIR_ADD_OK
USB_REDIR_REMOVE_OK
ISOLATED_SMOKE_PASS (Windows UI and physical USB not tested)
QEMU_STDERR: kvm: warning: nic diagnet has no peer
EXIT 0

View File

@ -0,0 +1,35 @@
{
"vm": 100,
"created": "2026-11-05T09:24:07.989788+08:00",
"original_args": "-set device.hostpci0.x-pci-sub-vendor-id=0x1558 -set device.hostpci0.x-pci-sub-device-id=0x6557",
"proposed_args": "-set device.hostpci0.x-pci-sub-vendor-id=0x1558 -set device.hostpci0.x-pci-sub-device-id=0x6557 -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off -global pci-bridge.shpc=off -global pcie-root-port.hotplug=off",
"original_config": {
"agent": "1",
"args": "-set device.hostpci0.x-pci-sub-vendor-id=0x1558 -set device.hostpci0.x-pci-sub-device-id=0x6557",
"balloon": "0",
"bios": "seabios",
"boot": "order=sata0;ide2",
"cores": "4",
"cpu": "host,hidden=1",
"hostpci0": "0000:01:00.0,pcie=1,rombar=1,romfile=gtx965m-clevo-readback-20261103.rom",
"ide0": "none,media=cdrom",
"ide2": "none,media=cdrom",
"machine": "pc-q35-11.0",
"memory": "8192",
"meta": "creation-qemu=11.0.0,ctime=1792722917",
"name": "win10-test",
"net0": "virtio=BC:24:11:B4:01:43,bridge=vmbr0,firewall=1",
"numa": "0",
"onboot": "1",
"ostype": "win10",
"sata0": "local-lvm:base-100-disk-0,size=60G",
"scsihw": "virtio-scsi-single",
"smbios1": "uuid=52fd3777-0bb4-40a7-8136-b02c40947a11",
"sockets": "1",
"template": "0",
"vmgenid": "a1963978-050f-4b3c-8c9a-7a4d13d72f43"
},
"status": "prepared; not applied"
}
EXIT 0

View File

@ -0,0 +1,13 @@
status: running
{
"vm": 100,
"device_present": false,
"channels": [],
"usb": " Device 0.1, Port 1, Speed 480 Mb/s, Product QEMU USB Tablet, ID: tablet\r\n",
"vm_status": {
"status": "running",
"running": true
}
}
EXIT 0

View File

@ -0,0 +1,8 @@
SHUTDOWN_REQUEST 0 {
"exitcode" : 0,
"exited" : 1
}
VM_STOPPED_NORMALLY
EXIT 0

View File

@ -0,0 +1,62 @@
{
"time": "2026-11-05T09:29:55.1484833+08:00",
"user": "DESKTOP-Q072ICM\\test",
"tray": [
{
"class": "Shell_TrayWnd",
"name": "",
"items": [
{
"name": "开始",
"type": "ControlType.Pane",
"class": "Start"
},
{
"name": "搜索突出显示图标打开搜索主页窗口",
"type": "ControlType.Pane",
"class": "DynamicContent1"
},
{
"name": "在此键入进行搜索",
"type": "ControlType.Pane",
"class": "Button"
},
{
"name": "任务视图",
"type": "ControlType.Pane",
"class": "TrayButton"
},
{
"name": "运行中的应用程序",
"type": "ControlType.Pane",
"class": "MSTaskSwWClass"
},
{
"name": "运行中的应用程序",
"type": "ControlType.Pane",
"class": "MSTaskListWClass"
},
{
"name": "用户提示通知区域",
"type": "ControlType.Pane",
"class": "ToolbarWindow32"
},
{
"name": "任务栏输入指示",
"type": "ControlType.Pane",
"class": "TrayInputIndicatorWClass"
},
{
"name": "系统时钟, 9:29, ‎2026/‎11/‎5",
"type": "ControlType.Pane",
"class": "TrayClockWClass"
},
{
"name": "操作中心,3 个新通知",
"type": "ControlType.Pane",
"class": "TrayButton"
}
]
}
]
}

View File

@ -0,0 +1,64 @@
{
"time": "2026-11-05T09:27:06.7691671+08:00",
"processes": [
"ApplicationFrameHost",
"ChsIME",
"conhost",
"csrss",
"ctfmon",
"DefenderSessionHelper",
"dllhost",
"dwm",
"explorer",
"FileCoAuth",
"fontdrvhost",
"M365Copilot",
"msedge",
"msedgewebview2",
"NVDisplay.Container",
"OneDrive",
"PhoneExperienceHost",
"powershell",
"RuntimeBroker",
"SearchApp",
"SecurityHealthSystray",
"ShellExperienceHost",
"sihost",
"StartMenuExperienceHost",
"sunshine",
"svchost",
"SystemSettings",
"TabTip",
"taskhostw",
"TextInputHost",
"UserOOBEBroker",
"winlogon"
],
"user": "DESKTOP-Q072ICM\\test",
"windows": [
{
"Id": 6208,
"ProcessName": "ApplicationFrameHost",
"SessionId": 1,
"MainWindowTitle": "设置"
},
{
"Id": 6256,
"ProcessName": "explorer",
"SessionId": 1,
"MainWindowTitle": ""
},
{
"Id": 8684,
"ProcessName": "SystemSettings",
"SessionId": 1,
"MainWindowTitle": "设置"
},
{
"Id": 4652,
"ProcessName": "TextInputHost",
"SessionId": 1,
"MainWindowTitle": "Microsoft Text Input Application"
}
]
}

View File

@ -0,0 +1,107 @@
{
"boot": "2026-11-05T09:28:17.5000000+08:00",
"devices": [
{
"name": "Red Hat VirtIO Ethernet Adapter",
"status": "OK",
"instance": "PCI\\VEN_1AF4\u0026DEV_1000\u0026SUBSYS_00011AF4\u0026REV_00\\5\u0026226B9205\u00260\u00269008F0",
"capabilities": 0
},
{
"name": "Standard SATA AHCI Controller",
"status": "OK",
"instance": "PCI\\VEN_8086\u0026DEV_2922\u0026SUBSYS_11001AF4\u0026REV_02\\3\u002611583659\u00261\u0026FA",
"capabilities": 0
},
{
"name": "NVIDIA GeForce GTX 965M",
"status": "OK",
"instance": "PCI\\VEN_10DE\u0026DEV_13D9\u0026SUBSYS_65571558\u0026REV_A1\\4\u00263335B6E8\u00260\u002600E0",
"capabilities": 0
},
{
"name": "VirtIO Serial Driver",
"status": "OK",
"instance": "PCI\\VEN_1AF4\u0026DEV_1003\u0026SUBSYS_00031AF4\u0026REV_00\\5\u0026226B9205\u00260\u00264008F0",
"capabilities": 0
},
{
"name": "Standard SATA AHCI Controller",
"status": "OK",
"instance": "PCI\\VEN_8086\u0026DEV_2922\u0026SUBSYS_11001AF4\u0026REV_02\\5\u0026226B9205\u00260\u00263808F0",
"capabilities": 0
}
],
"ip": [
{
"InterfaceAlias": "以太网",
"IPAddress": "192.168.1.70"
},
{
"InterfaceAlias": "Loopback Pseudo-Interface 1",
"IPAddress": "127.0.0.1"
}
],
"disk": [
{
"Number": 0,
"FriendlyName": "QEMU HARDDISK",
"OperationalStatus": "Online",
"HealthStatus": "Healthy",
"IsBoot": true,
"BusType": "SATA"
}
],
"ejectOrRemovable": [
{
"InstanceId": "SWD\\PRINTENUM\\{E254A0CC-C950-4956-A2C8-6CBC391E11FE}",
"Data": 244
},
{
"InstanceId": "{6FDE7547-1B65-48AE-B628-80BE62016026}\\VIOSERIALPORT\\6\u0026201398F9\u00260\u002601",
"Data": 230
},
{
"InstanceId": "DISPLAY\\MTT1337\\1\u002623323A80\u00260\u0026UID256",
"Data": 228
},
{
"InstanceId": "DISPLAY\\DEFAULT_MONITOR\\4\u002618756DEA\u00260\u0026UID0",
"Data": 228
},
{
"InstanceId": "SWD\\PRINTENUM\\{FEA805B9-BFF7-40E5-A50E-37CBA79B87D2}",
"Data": 244
},
{
"InstanceId": "USB\\VID_0627\u0026PID_0001\\28754-0000:00:1D.7-1",
"Data": 148
},
{
"InstanceId": "SWD\\PRINTENUM\\{FAA68C95-DAED-418D-BBBF-DE2DAD0E10B9}",
"Data": 244
},
{
"InstanceId": "SWD\\PRINTENUM\\{5B90D326-0123-4713-9B92-00DC0665DA58}",
"Data": 244
},
{
"InstanceId": "SWD\\PRINTENUM\\{FD12D2CE-A457-4909-9B7D-3CFB018A7323}",
"Data": 244
}
],
"time": "2026-11-05T09:29:02.2662944+08:00",
"sunshine": [
{
"Id": 5764,
"SessionId": 1
}
],
"gpu": [
{
"Name": "NVIDIA GeForce GTX 965M",
"ConfigManagerErrorCode": 0
}
],
"user": "DESKTOP-Q072ICM\\test"
}

View File

@ -0,0 +1 @@
{"vm": 101, "exitcode": 0, "out-data": "{\"action\": \"apply\", \"user\": \"test1\", \"backend\": \"pkla\", \"path\": \"/etc/polkit-1/localauthority/90-mandatory.d/99-vdi-power.pkla\", \"backup\": \"/var/lib/vdi/power-policy\", \"policy_matches\": true, \"dbus_policy_matches\": true, \"dbus_denials\": {\"PowerOff\": {\"code\": 1, \"error\": \"\\u001b[0;1;31mCall failed: Access denied\\u001b[0m\"}, \"Reboot\": {\"code\": 1, \"error\": \"\\u001b[0;1;31mCall failed: Access denied\\u001b[0m\"}, \"Halt\": {\"code\": 1, \"error\": \"\\u001b[0;1;31mCall failed: Access denied\\u001b[0m\"}, \"Suspend\": {\"code\": 1, \"error\": \"\\u001b[0;1;31mCall failed: Access denied\\u001b[0m\"}, \"Hibernate\": {\"code\": 1, \"error\": \"\\u001b[0;1;31mCall failed: Access denied\\u001b[0m\"}, \"HybridSleep\": {\"code\": 1, \"error\": \"\\u001b[0;1;31mCall failed: Access denied\\u001b[0m\"}, \"SuspendThenHibernate\": {\"code\": 1, \"error\": \"\\u001b[0;1;31mCall failed: Access denied\\u001b[0m\"}, \"ScheduleShutdown\": {\"code\": 1, \"error\": \"\\u001b[0;1;31mCall failed: Access denied\\u001b[0m\"}}, \"boot_id\": \"6c83a4b3-eae9-45eb-94f2-43bb372c44a2\", \"capabilities\": {\"CanPowerOff\": {\"code\": 1, \"value\": \"\", \"error\": \"\\u001b[0;1;31mCall failed: Access denied\\u001b[0m\"}, \"CanReboot\": {\"code\": 1, \"value\": \"\", \"error\": \"\\u001b[0;1;31mCall failed: Access denied\\u001b[0m\"}, \"CanHalt\": {\"code\": 1, \"value\": \"\", \"error\": \"\\u001b[0;1;31mCall failed: Access denied\\u001b[0m\"}, \"CanSuspend\": {\"code\": 1, \"value\": \"\", \"error\": \"\\u001b[0;1;31mCall failed: Access denied\\u001b[0m\"}, \"CanHibernate\": {\"code\": 1, \"value\": \"\", \"error\": \"\\u001b[0;1;31mCall failed: Access denied\\u001b[0m\"}, \"CanHybridSleep\": {\"code\": 1, \"value\": \"\", \"error\": \"\\u001b[0;1;31mCall failed: Access denied\\u001b[0m\"}, \"CanSuspendThenHibernate\": {\"code\": 1, \"value\": \"\", \"error\": \"\\u001b[0;1;31mCall failed: Access denied\\u001b[0m\"}}}\n", "exited": 1}

View File

@ -0,0 +1 @@
{"vm": 101, "exited": 1, "out-data": "{\"action\": \"query\", \"user\": \"test1\", \"backend\": \"pkla\", \"path\": \"/etc/polkit-1/localauthority/90-mandatory.d/99-vdi-power.pkla\", \"backup\": \"/var/lib/vdi/power-policy\", \"policy_matches\": true, \"dbus_policy_matches\": true, \"dbus_denials\": {}, \"boot_id\": \"6c83a4b3-eae9-45eb-94f2-43bb372c44a2\", \"capabilities\": {\"CanPowerOff\": {\"code\": 1, \"value\": \"\", \"error\": \"\\u001b[0;1;31mCall failed: Access denied\\u001b[0m\"}, \"CanReboot\": {\"code\": 1, \"value\": \"\", \"error\": \"\\u001b[0;1;31mCall failed: Access denied\\u001b[0m\"}, \"CanHalt\": {\"code\": 1, \"value\": \"\", \"error\": \"\\u001b[0;1;31mCall failed: Access denied\\u001b[0m\"}, \"CanSuspend\": {\"code\": 1, \"value\": \"\", \"error\": \"\\u001b[0;1;31mCall failed: Access denied\\u001b[0m\"}, \"CanHibernate\": {\"code\": 1, \"value\": \"\", \"error\": \"\\u001b[0;1;31mCall failed: Access denied\\u001b[0m\"}, \"CanHybridSleep\": {\"code\": 1, \"value\": \"\", \"error\": \"\\u001b[0;1;31mCall failed: Access denied\\u001b[0m\"}, \"CanSuspendThenHibernate\": {\"code\": 1, \"value\": \"\", \"error\": \"\\u001b[0;1;31mCall failed: Access denied\\u001b[0m\"}}}\n", "exitcode": 0}

View File

@ -0,0 +1 @@
{"vm": 102, "exitcode": 0, "out-data": "{\"action\": \"apply\", \"user\": \"test2\", \"backend\": \"rules\", \"path\": \"/etc/polkit-1/rules.d/00-vdi-power.rules\", \"backup\": \"/var/lib/vdi/power-policy\", \"policy_matches\": true, \"dbus_policy_matches\": true, \"dbus_denials\": {\"PowerOff\": {\"code\": 1, \"error\": \"Call failed: Access denied\"}, \"Reboot\": {\"code\": 1, \"error\": \"Call failed: Access denied\"}, \"Halt\": {\"code\": 1, \"error\": \"Call failed: Access denied\"}, \"Suspend\": {\"code\": 1, \"error\": \"Call failed: Access denied\"}, \"Hibernate\": {\"code\": 1, \"error\": \"Call failed: Access denied\"}, \"HybridSleep\": {\"code\": 1, \"error\": \"Call failed: Access denied\"}, \"SuspendThenHibernate\": {\"code\": 1, \"error\": \"Call failed: Access denied\"}, \"ScheduleShutdown\": {\"code\": 1, \"error\": \"Call failed: Access denied\"}}, \"boot_id\": \"b82ac3c5-f2ee-454f-971b-d3e2a64d990b\", \"capabilities\": {\"CanPowerOff\": {\"code\": 1, \"value\": \"\", \"error\": \"Call failed: Access denied\"}, \"CanReboot\": {\"code\": 1, \"value\": \"\", \"error\": \"Call failed: Access denied\"}, \"CanHalt\": {\"code\": 1, \"value\": \"\", \"error\": \"Call failed: Access denied\"}, \"CanSuspend\": {\"code\": 1, \"value\": \"\", \"error\": \"Call failed: Access denied\"}, \"CanHibernate\": {\"code\": 1, \"value\": \"\", \"error\": \"Call failed: Access denied\"}, \"CanHybridSleep\": {\"code\": 1, \"value\": \"\", \"error\": \"Call failed: Access denied\"}, \"CanSuspendThenHibernate\": {\"code\": 1, \"value\": \"\", \"error\": \"Call failed: Access denied\"}}}\n", "exited": 1}

View File

@ -0,0 +1 @@
{"vm": 102, "exited": 1, "out-data": "{\"action\": \"query\", \"user\": \"test2\", \"backend\": \"rules\", \"path\": \"/etc/polkit-1/rules.d/00-vdi-power.rules\", \"backup\": \"/var/lib/vdi/power-policy\", \"policy_matches\": true, \"dbus_policy_matches\": true, \"dbus_denials\": {}, \"boot_id\": \"b82ac3c5-f2ee-454f-971b-d3e2a64d990b\", \"capabilities\": {\"CanPowerOff\": {\"code\": 1, \"value\": \"\", \"error\": \"Call failed: Access denied\"}, \"CanReboot\": {\"code\": 1, \"value\": \"\", \"error\": \"Call failed: Access denied\"}, \"CanHalt\": {\"code\": 1, \"value\": \"\", \"error\": \"Call failed: Access denied\"}, \"CanSuspend\": {\"code\": 1, \"value\": \"\", \"error\": \"Call failed: Access denied\"}, \"CanHibernate\": {\"code\": 1, \"value\": \"\", \"error\": \"Call failed: Access denied\"}, \"CanHybridSleep\": {\"code\": 1, \"value\": \"\", \"error\": \"Call failed: Access denied\"}, \"CanSuspendThenHibernate\": {\"code\": 1, \"value\": \"\", \"error\": \"Call failed: Access denied\"}}}\n", "exitcode": 0}

View File

@ -0,0 +1,17 @@
[
{
"vm": 100,
"status": "running",
"uptime": 1736
},
{
"vm": 101,
"status": "running",
"uptime": 27815
},
{
"vm": 102,
"status": "running",
"uptime": 112734
}
]

View File

@ -0,0 +1,5 @@
{
"exited": 1,
"out-data": "{\"user\": \"test1\", \"graphical_subject\": \"1257,635,1000\", \"polkit_active_session\": {\"power-off\": {\"exitcode\": 1, \"error\": \"Not authorized.\"}, \"reboot\": {\"exitcode\": 0, \"error\": \"\"}, \"suspend\": {\"exitcode\": 1, \"error\": \"Not authorized.\"}, \"hibernate\": {\"exitcode\": 1, \"error\": \"Not authorized.\"}}, \"dbus_invalid_signature_denial_probes\": {\"PowerOff\": {\"exitcode\": 1, \"error\": \"\\u001b[0;1;31mCall failed: Access denied\\u001b[0m\"}, \"Reboot\": {\"exitcode\": 1, \"error\": \"\\u001b[0;1;31mCall failed: Access denied\\u001b[0m\"}}, \"sunshine\": \"active\", \"boot_id\": \"6c83a4b3-eae9-45eb-94f2-43bb372c44a2\", \"root_can_poweroff\": \"s \\\"yes\\\"\"}\n",
"exitcode": 0
}

View File

@ -0,0 +1,5 @@
{
"exitcode": 0,
"out-data": "{\"user\": \"test2\", \"graphical_subject\": \"7174,7356579,1000\", \"polkit_active_session\": {\"power-off\": {\"exitcode\": 1, \"error\": \"Not authorized.\"}, \"reboot\": {\"exitcode\": 0, \"error\": \"\"}, \"suspend\": {\"exitcode\": 1, \"error\": \"Not authorized.\"}, \"hibernate\": {\"exitcode\": 1, \"error\": \"Not authorized.\"}}, \"dbus_invalid_signature_denial_probes\": {\"PowerOff\": {\"exitcode\": 1, \"error\": \"Call failed: Access denied\"}, \"Reboot\": {\"exitcode\": 1, \"error\": \"Call failed: Access denied\"}}, \"sunshine\": \"active\", \"boot_id\": \"b82ac3c5-f2ee-454f-971b-d3e2a64d990b\", \"root_can_poweroff\": \"s \\\"yes\\\"\"}\n",
"exited": 1
}

View File

@ -0,0 +1 @@
{"vm": 100, "exitcode": 0, "out-truncated": 0, "exited": 1, "out-data": "{\"Action\":\"Apply\",\"User\":\"DESKTOP-Q072ICM\\\\test\",\"Sid\":\"S-1-5-21-911627089-847994065-1864506460-1003\",\"NoClose\":1,\"Backup\":\"C:\\\\ProgramData\\\\VDI\\\\power-policy\\\\original.clixml\",\"EffectiveShellNoClose\":1,\"LastBoot\":\"2026-11-04T20:31:16.5000000+08:00\",\"Scope\":\"Desktop power menus only; privileged administration remains available\"}\r\n"}

View File

@ -0,0 +1 @@
{"vm": 100, "exitcode": 0, "exited": 1, "out-truncated": 0, "out-data": "{\"Action\":\"Query\",\"User\":\"DESKTOP-Q072ICM\\\\test\",\"Sid\":\"S-1-5-21-911627089-847994065-1864506460-1003\",\"NoClose\":1,\"Backup\":\"C:\\\\ProgramData\\\\VDI\\\\power-policy\\\\original.clixml\",\"EffectiveShellNoClose\":1,\"LastBoot\":\"2026-11-04T20:31:16.5000000+08:00\",\"Scope\":\"Desktop power menus only; privileged administration remains available\"}\r\n"}

View File

@ -0,0 +1,28 @@
[
{
"host": "192.168.1.72",
"normal": {
"width": 24,
"height": 24,
"visible_pixels": 240
},
"adapter": {
"width": 24,
"height": 24,
"visible_pixels": 0
}
},
{
"host": "192.168.1.71",
"normal": {
"width": 16,
"height": 16,
"visible_pixels": 0
},
"adapter": {
"width": 16,
"height": 16,
"visible_pixels": 0
}
}
]

View File

@ -0,0 +1,16 @@
{
"ubuntu": {
"measured_clicks": 28,
"matched_source_events": 28,
"max_coordinate_error_pixels": 0.9814453125,
"p50_ms": 188.9504005,
"p95_ms": 468.920931
},
"kylin": {
"measured_clicks": 28,
"matched_source_events": 28,
"max_coordinate_error_pixels": 0.74267578125,
"p50_ms": 127.61443249999999,
"p95_ms": 168.630841
}
}

View File

@ -0,0 +1 @@
5d4330f703d7f8e053bc3795ca42bdaf231c9e9dd8ebb00a612013adbcccee03

View File

@ -0,0 +1,13 @@
{
"192.168.1.71": {
"host_py_sha256": "41f6a9a7dcbe3b916864eb3a4bb1b2cbaf669c779256f913fbeef4f53cf09b65",
"client_sha256": "5d4330f703d7f8e053bc3795ca42bdaf231c9e9dd8ebb00a612013adbcccee03",
"status": "600\nActiveState=inactive\n"
},
"192.168.1.72": {
"host_py_sha256": "41f6a9a7dcbe3b916864eb3a4bb1b2cbaf669c779256f913fbeef4f53cf09b65",
"client_sha256": "5d4330f703d7f8e053bc3795ca42bdaf231c9e9dd8ebb00a612013adbcccee03",
"status": "600\nActiveState=active\n39181 /usr/bin/python3 /home/test2/vdi-terminal/native-cursor-v1/host.py stream\n"
},
"box_helper_sha256": "44b3e8a0ca591fbde42cf3372d343ab4cb603c089e7805bbccf6d261b2e173ac"
}

View File

@ -0,0 +1,103 @@
"""Run only with the controlled GTK acceptance window filling the stream."""
import ctypes as C
import json
import os
from pathlib import Path
import signal
import statistics
import struct
import subprocess
import time
os.environ.update(DISPLAY=':0', XAUTHORITY='/home/armbian/.Xauthority')
x = C.CDLL('libX11.so.6')
fix = C.CDLL('libXfixes.so.3')
test = C.CDLL('libXtst.so.6')
class Cursor(C.Structure):
_fields_ = [('x', C.c_short), ('y', C.c_short), ('w', C.c_ushort),
('h', C.c_ushort), ('hx', C.c_ushort), ('hy', C.c_ushort),
('serial', C.c_ulong), ('pixels', C.POINTER(C.c_ulong)),
('atom', C.c_ulong), ('name', C.c_char_p)]
x.XOpenDisplay.argtypes = [C.c_char_p]
x.XOpenDisplay.restype = C.c_void_p
x.XDefaultRootWindow.argtypes = [C.c_void_p]
x.XDefaultRootWindow.restype = C.c_ulong
x.XFree.argtypes = [C.c_void_p]
x.XSync.argtypes = [C.c_void_p, C.c_int]
x.XWarpPointer.argtypes = [C.c_void_p, C.c_ulong, C.c_ulong, C.c_int,
C.c_int, C.c_uint, C.c_uint, C.c_int, C.c_int]
x.XGetImage.argtypes = [C.c_void_p, C.c_ulong, C.c_int, C.c_int,
C.c_uint, C.c_uint, C.c_ulong, C.c_int]
x.XGetImage.restype = C.c_void_p
x.XGetPixel.argtypes = [C.c_void_p, C.c_int, C.c_int]
x.XGetPixel.restype = C.c_ulong
x.XDestroyImage.argtypes = [C.c_void_p]
fix.XFixesGetCursorImage.argtypes = [C.c_void_p]
fix.XFixesGetCursorImage.restype = C.POINTER(Cursor)
test.XTestFakeButtonEvent.argtypes = [C.c_void_p, C.c_uint, C.c_int, C.c_ulong]
d = x.XOpenDisplay(None)
assert d
root = x.XDefaultRootWindow(d)
def native():
p = fix.XFixesGetCursorImage(d)
assert p
try:
c = p.contents
return dict(x=c.x, y=c.y, w=c.w, h=c.h, hx=c.hx, hy=c.hy,
pixels=[int(c.pixels[i]) & 0xffffffff for i in range(c.w*c.h)])
finally:
x.XFree(p)
def warp(px, py):
x.XWarpPointer(d, 0, root, 0, 0, 0, 0, px, py)
x.XSync(d, 0)
def decoded_sequence():
im = x.XGetImage(d, root, 40, 1370, 640, 1, 0xffffffff, 2)
assert im
try:
values = [x.XGetPixel(im, i*40+20, 0) & 0xffffff for i in range(16)]
if any(0x202020 <= v <= 0xe0e0e0 for v in values):
return -1
return sum((1 << i) for i, v in enumerate(values) if v > 0xe0e0e0)
finally:
x.XDestroyImage(im)
def flat_video_crop(px, py):
im = x.XGetImage(d, root, px-40, py-40, 100, 100, 0xffffffff, 2)
assert im
try:
pixels = [x.XGetPixel(im, a, b) & 0xffffff for b in range(100) for a in range(100)]
# No baked-in pointer: uniform acceptance-window background at this point.
ref = pixels[0]
bad = sum(any(abs(((v >> s) & 255) - ((ref >> s) & 255)) > 8
for s in (0, 8, 16)) for v in pixels)
return dict(reference=ref, nonuniform_pixels=bad)
finally:
x.XDestroyImage(im)
start_sequence=decoded_sequence()
results=[]
for i in range(16):
px,py=((300,800) if i%2==0 else (1500,900))
warp(px,py);time.sleep(.18)
start=time.monotonic_ns();test.XTestFakeButtonEvent(d,1,1,0);x.XSync(d,0)
time.sleep(.04);test.XTestFakeButtonEvent(d,1,0,0);x.XSync(d,0)
target=start_sequence+i+1
while decoded_sequence()!=target and time.monotonic_ns()-start<2000000000:time.sleep(.002)
seen=decoded_sequence();results.append(dict(seq=target,seen=seen,x=px,y=py));assert seen==target,results[-1]
time.sleep(.08)
# Two quick clicks before waiting for their combined numbered video update.
start=decoded_sequence()
for i in range(2):
test.XTestFakeButtonEvent(d,1,1,0);x.XSync(d,0);time.sleep(.04);test.XTestFakeButtonEvent(d,1,0,0);x.XSync(d,0);time.sleep(.07)
end=time.monotonic()+2
while decoded_sequence()!=start+2 and time.monotonic()<end:time.sleep(.002)
print(json.dumps(dict(clicks=results,double_click_start=start,double_click_end=decoded_sequence())))

View File

@ -0,0 +1,10 @@
{
"192.168.1.71": {
"status": "MainPID=194186\nExecStart={ path=/opt/vdi-sunshine-0.21.0/usr/bin/sunshine ; argv[]=/opt/vdi-sunshine-0.21.0/usr/bin/sunshine /home/test1/.config/sunshine/sunshine.conf ; ignore_errors=no ; start_time=[Thu 2026-11-05 12:28:12 CST] ; stop_time=[n/a] ; pid=194186 ; code=(null) ; status=0/0 }\nId=vdi-sunshine.service\nActiveState=active\n\nMainPID=0\nExecStart={ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 /home/test1/vdi-terminal/native-cursor-v1/host.py guard ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }\nId=vdi-native-cursor-guard.service\nActiveState=inactive\n\nMainPID=0\nId=vdi-native-cursor-source.service\nActiveState=inactive\nScreen 0: minimum 320 x 200, current 2560 x 1440, maximum 8192 x 8192\nVirtual-1 connected primary 2560x1440+0+0 (normal left inverted right x axis y axis) 325mm x 203mm\n'Adwaita'\n24\n'default'\n1c3099bf924db3aee759b3d7c05e012569ef8650c400d1479144398795decc71 /opt/vdi-sunshine-0.21.0/usr/bin/sunshine\nno-runtime-dropin\n",
"stderr": ""
},
"192.168.1.72": {
"status": "MainPID=42901\nExecStart={ path=/home/test2/vdi-terminal/native-cursor-v1/sunshine ; argv[]=/home/test2/vdi-terminal/native-cursor-v1/sunshine /home/test2/.config/sunshine/sunshine.conf ; ignore_errors=no ; start_time=[Thu 2026-11-05 12:29:41 CST] ; stop_time=[n/a] ; pid=42901 ; code=(null) ; status=0/0 }\nId=vdi-sunshine.service\nActiveState=active\n\nMainPID=42870\nExecStart={ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 /home/test2/vdi-terminal/native-cursor-v1/host.py guard ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }\nId=vdi-native-cursor-guard.service\nActiveState=active\n\nMainPID=0\nId=vdi-native-cursor-source.service\nActiveState=inactive\nScreen 0: minimum 320 x 200, current 2560 x 1440, maximum 8192 x 8192\nVirtual-1 connected primary 2560x1440+0+0 (normal left inverted right x axis y axis) 325mm x 203mm\n'Adwaita'\n24\n'default'\n61e1ecbc8db2df786b9760c652aa4b9885dff36c57d4af09616344314cb7c34c /usr/bin/sunshine\n/usr/bin/sunshine cap_sys_admin,cap_sys_nice=p\n",
"stderr": ""
}
}

View File

@ -0,0 +1,4 @@
{
"192.168.1.72": "MainPID=42703\nExecStart={ path=/usr/bin/sunshine ; argv[]=/usr/bin/sunshine /home/test2/.config/sunshine/sunshine.conf ; ignore_errors=no ; start_time=[Thu 2026-11-05 12:25:39 CST] ; stop_time=[n/a] ; pid=42703 ; code=(null) ; status=0/0 }\nId=vdi-sunshine.service\nActiveState=active\n\nMainPID=0\nExecStart={ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 /home/test2/vdi-terminal/native-cursor-v1/host.py guard ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }\nId=vdi-native-cursor-guard.service\nActiveState=inactive\n",
"192.168.1.71": "MainPID=193092\nExecStart={ path=/home/test1/vdi-terminal/native-cursor-v1/sunshine ; argv[]=/home/test1/vdi-terminal/native-cursor-v1/sunshine /home/test1/.config/sunshine/sunshine.conf ; ignore_errors=no ; start_time=[Thu 2026-11-05 12:26:14 CST] ; stop_time=[n/a] ; pid=193092 ; code=(null) ; status=0/0 }\nId=vdi-sunshine.service\nActiveState=active\n\nMainPID=193023\nExecStart={ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 /home/test1/vdi-terminal/native-cursor-v1/host.py guard ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }\nId=vdi-native-cursor-guard.service\nActiveState=active\n"
}

View File

@ -0,0 +1,96 @@
"""Run only with the controlled GTK acceptance window filling the stream."""
import ctypes as C
import json
import os
from pathlib import Path
import signal
import statistics
import struct
import subprocess
import time
os.environ.update(DISPLAY=':0', XAUTHORITY='/home/armbian/.Xauthority')
x = C.CDLL('libX11.so.6')
fix = C.CDLL('libXfixes.so.3')
test = C.CDLL('libXtst.so.6')
class Cursor(C.Structure):
_fields_ = [('x', C.c_short), ('y', C.c_short), ('w', C.c_ushort),
('h', C.c_ushort), ('hx', C.c_ushort), ('hy', C.c_ushort),
('serial', C.c_ulong), ('pixels', C.POINTER(C.c_ulong)),
('atom', C.c_ulong), ('name', C.c_char_p)]
x.XOpenDisplay.argtypes = [C.c_char_p]
x.XOpenDisplay.restype = C.c_void_p
x.XDefaultRootWindow.argtypes = [C.c_void_p]
x.XDefaultRootWindow.restype = C.c_ulong
x.XFree.argtypes = [C.c_void_p]
x.XSync.argtypes = [C.c_void_p, C.c_int]
x.XWarpPointer.argtypes = [C.c_void_p, C.c_ulong, C.c_ulong, C.c_int,
C.c_int, C.c_uint, C.c_uint, C.c_int, C.c_int]
x.XGetImage.argtypes = [C.c_void_p, C.c_ulong, C.c_int, C.c_int,
C.c_uint, C.c_uint, C.c_ulong, C.c_int]
x.XGetImage.restype = C.c_void_p
x.XGetPixel.argtypes = [C.c_void_p, C.c_int, C.c_int]
x.XGetPixel.restype = C.c_ulong
x.XDestroyImage.argtypes = [C.c_void_p]
fix.XFixesGetCursorImage.argtypes = [C.c_void_p]
fix.XFixesGetCursorImage.restype = C.POINTER(Cursor)
test.XTestFakeButtonEvent.argtypes = [C.c_void_p, C.c_uint, C.c_int, C.c_ulong]
d = x.XOpenDisplay(None)
assert d
root = x.XDefaultRootWindow(d)
def native():
p = fix.XFixesGetCursorImage(d)
assert p
try:
c = p.contents
return dict(x=c.x, y=c.y, w=c.w, h=c.h, hx=c.hx, hy=c.hy,
pixels=[int(c.pixels[i]) & 0xffffffff for i in range(c.w*c.h)])
finally:
x.XFree(p)
def warp(px, py):
x.XWarpPointer(d, 0, root, 0, 0, 0, 0, px, py)
x.XSync(d, 0)
def decoded_sequence():
im = x.XGetImage(d, root, 40, 1370, 640, 1, 0xffffffff, 2)
assert im
try:
values = [x.XGetPixel(im, i*40+20, 0) & 0xffffff for i in range(16)]
if any(0x202020 <= v <= 0xe0e0e0 for v in values):
return -1
return sum((1 << i) for i, v in enumerate(values) if v > 0xe0e0e0)
finally:
x.XDestroyImage(im)
def flat_video_crop(px, py):
im = x.XGetImage(d, root, px-40, py-40, 100, 100, 0xffffffff, 2)
assert im
try:
pixels = [x.XGetPixel(im, a, b) & 0xffffff for b in range(100) for a in range(100)]
# No baked-in pointer: uniform acceptance-window background at this point.
ref = pixels[0]
bad = sum(any(abs(((v >> s) & 255) - ((ref >> s) & 255)) > 8
for s in (0, 8, 16)) for v in pixels)
return dict(reference=ref, nonuniform_pixels=bad)
finally:
x.XDestroyImage(im)
focus=C.c_ulong();revert=C.c_int()
x.XGetInputFocus.argtypes=[C.c_void_p,C.POINTER(C.c_ulong),C.POINTER(C.c_int)]
x.XSetInputFocus.argtypes=[C.c_void_p,C.c_ulong,C.c_int,C.c_ulong]
x.XGetInputFocus(d,C.byref(focus),C.byref(revert))
before=native()
try:
x.XSetInputFocus(d,0,1,0);x.XSync(d,0);time.sleep(.25);unfocused=native()
finally:
x.XSetInputFocus(d,focus.value,revert.value,0);x.XSync(d,0)
time.sleep(.3);after=native()
print(json.dumps(dict(original_focus=focus.value,unfocused_shape_changed=before['pixels']!=unfocused['pixels'],native_restored=before['pixels']==after['pixels'],position=[after['x'],after['y']])))

View File

@ -0,0 +1,10 @@
{
"192.168.1.71": {
"output": "MainPID=184769\nExecStart={ path=/opt/vdi-sunshine-0.21.0/usr/bin/sunshine ; argv[]=/opt/vdi-sunshine-0.21.0/usr/bin/sunshine /home/test1/.config/sunshine/sunshine.conf ; ignore_errors=no ; start_time=[Thu 2026-11-05 11:33:00 CST] ; stop_time=[n/a] ; pid=184769 ; code=(null) ; status=0/0 }\nId=vdi-sunshine.service\nActiveState=active\n\nMainPID=0\nExecStart={ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 /home/test1/vdi-terminal/native-cursor-v1/host.py guard ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }\nId=vdi-native-cursor-guard.service\nActiveState=inactive\n\nMainPID=0\nId=vdi-native-cursor-source.service\nActiveState=inactive\n",
"stderr": "sha256sum: /usr/bin/sunshine: 没有那个文件或目录\n/usr/bin/sunshine (No such file or directory)\n"
},
"192.168.1.72": {
"output": "MainPID=32278\nExecStart={ path=/usr/bin/sunshine ; argv[]=/usr/bin/sunshine /home/test2/.config/sunshine/sunshine.conf ; ignore_errors=no ; start_time=[Thu 2026-11-05 11:43:42 CST] ; stop_time=[n/a] ; pid=32278 ; code=(null) ; status=0/0 }\nId=vdi-sunshine.service\nActiveState=active\n\nMainPID=0\nExecStart={ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 /home/test2/vdi-terminal/native-cursor-v1/host.py guard ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }\nId=vdi-native-cursor-guard.service\nActiveState=inactive\n\nMainPID=0\nId=vdi-native-cursor-source.service\nActiveState=inactive\n61e1ecbc8db2df786b9760c652aa4b9885dff36c57d4af09616344314cb7c34c /usr/bin/sunshine\n/usr/bin/sunshine cap_sys_admin,cap_sys_nice=p\n",
"stderr": ""
}
}

View File

@ -0,0 +1 @@
{"clicks": [{"seq": 29, "seen": 29, "x": 300, "y": 800}, {"seq": 30, "seen": 30, "x": 1500, "y": 900}, {"seq": 31, "seen": 31, "x": 300, "y": 800}, {"seq": 32, "seen": 32, "x": 1500, "y": 900}, {"seq": 33, "seen": 33, "x": 300, "y": 800}, {"seq": 34, "seen": 34, "x": 1500, "y": 900}, {"seq": 35, "seen": 35, "x": 300, "y": 800}, {"seq": 36, "seen": 36, "x": 1500, "y": 900}, {"seq": 37, "seen": 37, "x": 300, "y": 800}, {"seq": 38, "seen": 38, "x": 1500, "y": 900}, {"seq": 39, "seen": 39, "x": 300, "y": 800}, {"seq": 40, "seen": 40, "x": 1500, "y": 900}, {"seq": 41, "seen": 41, "x": 300, "y": 800}, {"seq": 42, "seen": 42, "x": 1500, "y": 900}, {"seq": 43, "seen": 43, "x": 300, "y": 800}, {"seq": 44, "seen": 44, "x": 1500, "y": 900}], "double_click_start": 44, "double_click_end": 46}

View File

@ -0,0 +1 @@
{"host": "192.168.1.71", "pid": 267646, "shapes": [{"name": "default", "source": {"w": 24, "h": 24, "hx": 4, "hy": 0, "x": 182, "y": 600, "sw": 2560, "sh": 1440}, "local": {"x": 182, "y": 600, "w": 24, "h": 24, "hx": 4, "hy": 0}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 300, "video": {"reference": 15726330, "nonuniform_pixels": 0}}, {"name": "text", "source": {"w": 24, "h": 24, "hx": 11, "hy": 11, "x": 548, "y": 600, "sw": 2560, "sh": 1440}, "local": {"x": 548, "y": 600, "w": 24, "h": 24, "hx": 11, "hy": 11}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 216, "video": {"reference": 15791866, "nonuniform_pixels": 0}}, {"name": "ew-resize", "source": {"w": 24, "h": 24, "hx": 11, "hy": 11, "x": 914, "y": 600, "sw": 2560, "sh": 1440}, "local": {"x": 914, "y": 600, "w": 24, "h": 24, "hx": 11, "hy": 11}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 204, "video": {"reference": 15726330, "nonuniform_pixels": 0}}, {"name": "wait", "source": {"w": 24, "h": 24, "hx": 12, "hy": 12, "x": 1280, "y": 600, "sw": 2560, "sh": 1440}, "local": {"x": 1280, "y": 600, "w": 24, "h": 24, "hx": 12, "hy": 12}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 290, "video": {"reference": 15791866, "nonuniform_pixels": 0}}, {"name": "none", "source": {"w": 1, "h": 1, "hx": 0, "hy": 0, "x": 1645, "y": 600, "sw": 2560, "sh": 1440}, "local": {"x": 1645, "y": 600, "w": 1, "h": 1, "hx": 0, "hy": 0}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 0, "video": {"reference": 15726074, "nonuniform_pixels": 0}}, {"name": "crosshair", "source": {"w": 24, "h": 24, "hx": 11, "hy": 11, "x": 2011, "y": 600, "sw": 2560, "sh": 1440}, "local": {"x": 2011, "y": 600, "w": 24, "h": 24, "hx": 11, "hy": 11}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 252, "video": {"reference": 15726074, "nonuniform_pixels": 0}}, {"name": "custom", "source": {"w": 24, "h": 24, "hx": 7, "hy": 9, "x": 2377, "y": 600, "sw": 2560, "sh": 1440}, "local": {"x": 2377, "y": 600, "w": 24, "h": 24, "hx": 7, "hy": 9}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 576, "video": {"reference": 15726074, "nonuniform_pixels": 0}}], "paused_client": {"position": [350, 700], "elapsed_ms": 249.580297, "same_shape": true, "steps": [{"target": [250, 650], "position": [250, 650], "query_ms": 2.364751}, {"target": [280, 670], "position": [280, 670], "query_ms": 2.234379}, {"target": [300, 690], "position": [300, 690], "query_ms": 2.128216}, {"target": [350, 700], "position": [350, 700], "query_ms": 2.286878}]}, "clicks": [{"seq": 1, "x": 182, "y": 750, "seen": 1, "decoded_ms": 108.930461}, {"seq": 2, "x": 548, "y": 850, "seen": 2, "decoded_ms": 98.691574}, {"seq": 3, "x": 914, "y": 750, "seen": 3, "decoded_ms": 152.320189}, {"seq": 4, "x": 1280, "y": 850, "seen": 4, "decoded_ms": 125.352183}, {"seq": 5, "x": 1645, "y": 750, "seen": 5, "decoded_ms": 135.816524}, {"seq": 6, "x": 2011, "y": 850, "seen": 6, "decoded_ms": 111.517755}, {"seq": 7, "x": 2377, "y": 750, "seen": 7, "decoded_ms": 108.898971}, {"seq": 8, "x": 182, "y": 850, "seen": 8, "decoded_ms": 119.075451}, {"seq": 9, "x": 548, "y": 750, "seen": 9, "decoded_ms": 134.943313}, {"seq": 10, "x": 914, "y": 850, "seen": 10, "decoded_ms": 146.081384}, {"seq": 11, "x": 1280, "y": 750, "seen": 11, "decoded_ms": 117.025403}, {"seq": 12, "x": 1645, "y": 850, "seen": 12, "decoded_ms": 152.719197}, {"seq": 13, "x": 2011, "y": 750, "seen": 13, "decoded_ms": 141.342555}, {"seq": 14, "x": 2377, "y": 850, "seen": 14, "decoded_ms": 130.95113}, {"seq": 15, "x": 182, "y": 750, "seen": 15, "decoded_ms": 143.698269}, {"seq": 16, "x": 548, "y": 850, "seen": 16, "decoded_ms": 114.9634}, {"seq": 17, "x": 914, "y": 750, "seen": 17, "decoded_ms": 159.173858}, {"seq": 18, "x": 1280, "y": 850, "seen": 18, "decoded_ms": 175.329882}, {"seq": 19, "x": 1645, "y": 750, "seen": 19, "decoded_ms": 119.051263}, {"seq": 20, "x": 2011, "y": 850, "seen": 20, "decoded_ms": 124.040341}, {"seq": 21, "x": 2377, "y": 750, "seen": 21, "decoded_ms": 121.588678}, {"seq": 22, "x": 182, "y": 850, "seen": 22, "decoded_ms": 129.876682}, {"seq": 23, "x": 548, "y": 750, "seen": 23, "decoded_ms": 124.467041}, {"seq": 24, "x": 914, "y": 850, "seen": 24, "decoded_ms": 153.052003}, {"seq": 25, "x": 1280, "y": 750, "seen": 25, "decoded_ms": 136.166846}, {"seq": 26, "x": 1645, "y": 850, "seen": 26, "decoded_ms": 168.630841}, {"seq": 27, "x": 2011, "y": 750, "seen": 27, "decoded_ms": 119.541845}, {"seq": 28, "x": 2377, "y": 850, "seen": 28, "decoded_ms": 110.41562}], "p50_ms": 127.61443249999999, "p95_ms": 168.630841, "method": "XTest click-down to unique decoded sequence; excludes USB and scanout"}

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

View File

@ -0,0 +1 @@
{"original_focus": 48234511, "unfocused_shape_changed": false, "native_restored": true, "position": [400, 600]}

View File

@ -0,0 +1 @@
{"pid": 297530, "args": "/home/armbian/vdi-build/rkmpp-experiment/build/moonlight/app/moonlight stream 192.168.1.71 Desktop --resolution 2560x1440 --fps 30 --bitrate 30000 --display-mode fullscreen --video-codec H.264 --video-decoder hardware --absolute-mouse --capture-system-keys always --keep-awake --no-vsync --no-frame-pacing --audio-on-host ", "sha256": "5d4330f703d7f8e053bc3795ca42bdaf231c9e9dd8ebb00a612013adbcccee03", "native": true, "shape": [24, 24, 4, 0]}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 MiB

View File

@ -0,0 +1 @@
{"host": "192.168.1.71", "pid": 297530, "shapes": [{"name": "default", "source": {"w": 24, "h": 24, "hx": 4, "hy": 0, "x": 182, "y": 600, "sw": 2560, "sh": 1440}, "local": {"x": 182, "y": 600, "w": 24, "h": 24, "hx": 4, "hy": 0}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 300, "video": {"reference": 15726330, "nonuniform_pixels": 0}}, {"name": "text", "source": {"w": 24, "h": 24, "hx": 11, "hy": 11, "x": 548, "y": 600, "sw": 2560, "sh": 1440}, "local": {"x": 548, "y": 600, "w": 24, "h": 24, "hx": 11, "hy": 11}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 216, "video": {"reference": 15791866, "nonuniform_pixels": 0}}, {"name": "ew-resize", "source": {"w": 24, "h": 24, "hx": 11, "hy": 11, "x": 914, "y": 600, "sw": 2560, "sh": 1440}, "local": {"x": 914, "y": 600, "w": 24, "h": 24, "hx": 11, "hy": 11}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 204, "video": {"reference": 15726330, "nonuniform_pixels": 0}}, {"name": "wait", "source": {"w": 24, "h": 24, "hx": 12, "hy": 12, "x": 1280, "y": 600, "sw": 2560, "sh": 1440}, "local": {"x": 1280, "y": 600, "w": 24, "h": 24, "hx": 12, "hy": 12}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 290, "video": {"reference": 15791866, "nonuniform_pixels": 0}}, {"name": "none", "source": {"w": 1, "h": 1, "hx": 0, "hy": 0, "x": 1645, "y": 600, "sw": 2560, "sh": 1440}, "local": {"x": 1645, "y": 600, "w": 1, "h": 1, "hx": 0, "hy": 0}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 0, "video": {"reference": 15726074, "nonuniform_pixels": 0}}, {"name": "crosshair", "source": {"w": 24, "h": 24, "hx": 11, "hy": 11, "x": 2011, "y": 600, "sw": 2560, "sh": 1440}, "local": {"x": 2011, "y": 600, "w": 24, "h": 24, "hx": 11, "hy": 11}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 252, "video": {"reference": 15726074, "nonuniform_pixels": 0}}, {"name": "custom", "source": {"w": 24, "h": 24, "hx": 7, "hy": 9, "x": 2377, "y": 600, "sw": 2560, "sh": 1440}, "local": {"x": 2377, "y": 600, "w": 24, "h": 24, "hx": 7, "hy": 9}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 576, "video": {"reference": 15726074, "nonuniform_pixels": 0}}], "paused_client": {"position": [350, 700], "elapsed_ms": 249.614056, "same_shape": true, "steps": [{"target": [250, 650], "position": [250, 650], "query_ms": 2.255936}, {"target": [280, 670], "position": [280, 670], "query_ms": 2.398262}, {"target": [300, 690], "position": [300, 690], "query_ms": 2.188272}, {"target": [350, 700], "position": [350, 700], "query_ms": 2.242227}]}, "clicks": [{"seq": 1, "x": 182, "y": 750, "seen": 1, "decoded_ms": 149.895203}, {"seq": 2, "x": 548, "y": 850, "seen": 2, "decoded_ms": 120.380242}, {"seq": 3, "x": 914, "y": 750, "seen": 3, "decoded_ms": 119.660739}, {"seq": 4, "x": 1280, "y": 850, "seen": 4, "decoded_ms": 147.265671}, {"seq": 5, "x": 1645, "y": 750, "seen": 5, "decoded_ms": 145.663335}, {"seq": 6, "x": 2011, "y": 850, "seen": 6, "decoded_ms": 129.562066}, {"seq": 7, "x": 2377, "y": 750, "seen": 7, "decoded_ms": 134.743571}, {"seq": 8, "x": 182, "y": 850, "seen": 8, "decoded_ms": 140.630877}, {"seq": 9, "x": 548, "y": 750, "seen": 9, "decoded_ms": 130.420116}, {"seq": 10, "x": 914, "y": 850, "seen": 10, "decoded_ms": 107.155271}, {"seq": 11, "x": 1280, "y": 750, "seen": 11, "decoded_ms": 117.124838}, {"seq": 12, "x": 1645, "y": 850, "seen": 12, "decoded_ms": 130.236678}, {"seq": 13, "x": 2011, "y": 750, "seen": 13, "decoded_ms": 111.917383}, {"seq": 14, "x": 2377, "y": 850, "seen": 14, "decoded_ms": 136.811123}, {"seq": 15, "x": 182, "y": 750, "seen": 15, "decoded_ms": 106.746093}, {"seq": 16, "x": 548, "y": 850, "seen": 16, "decoded_ms": 108.595469}, {"seq": 17, "x": 914, "y": 750, "seen": 17, "decoded_ms": 123.440014}, {"seq": 18, "x": 1280, "y": 850, "seen": 18, "decoded_ms": 150.429282}, {"seq": 19, "x": 1645, "y": 750, "seen": 19, "decoded_ms": 117.354684}, {"seq": 20, "x": 2011, "y": 850, "seen": 20, "decoded_ms": 147.688919}, {"seq": 21, "x": 2377, "y": 750, "seen": 21, "decoded_ms": 135.505122}, {"seq": 22, "x": 182, "y": 850, "seen": 22, "decoded_ms": 142.014237}, {"seq": 23, "x": 548, "y": 750, "seen": 23, "decoded_ms": 195.466041}, {"seq": 24, "x": 914, "y": 850, "seen": 24, "decoded_ms": 165.559673}, {"seq": 25, "x": 1280, "y": 750, "seen": 25, "decoded_ms": 142.88512}, {"seq": 26, "x": 1645, "y": 850, "seen": 26, "decoded_ms": 127.731718}, {"seq": 27, "x": 2011, "y": 750, "seen": 27, "decoded_ms": 146.832648}, {"seq": 28, "x": 2377, "y": 850, "seen": 28, "decoded_ms": 133.995845}], "p50_ms": 134.369708, "p95_ms": 165.559673, "method": "XTest click-down to unique decoded sequence; excludes USB and scanout"}

View File

@ -0,0 +1,5 @@
{
"recovered": true,
"seconds": 3.555,
"state": "ExecStart={ path=/opt/vdi-sunshine-0.21.0/usr/bin/sunshine ; argv[]=/opt/vdi-sunshine-0.21.0/usr/bin/sunshine /home/test1/.config/sunshine/sunshine.conf ; ignore_errors=no ; start_time=[Thu 2026-11-05 11:33:00 CST] ; stop_time=[n/a] ; pid=184769 ; code=(null) ; status=0/0 }\nActiveState=active\nScreen 0: minimum 320 x 200, current 2560 x 1440, maximum 8192 x 8192\nVirtual-1 connected primary 2560x1440+0+0 (normal left inverted right x axis y axis) 325mm x 203mm\n 1280x800 74.99 +\n 3840x2160 60.00 50.00 59.94 \n 1920x1440 60.00 \ninactive\n"
}

View File

@ -0,0 +1,9 @@
{
"host": "192.168.1.71",
"target": [
400,
600
],
"readback": "X=400\nY=600\nSCREEN=0\nWINDOW=48234511\n",
"passed": true
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

View File

@ -0,0 +1,12 @@
{
"192.168.1.71": {
"status": "MainPID=186038\nId=vdi-sunshine.service\nActiveState=active\n\nMainPID=185981\nId=vdi-native-cursor-guard.service\nActiveState=active\n\nMainPID=0\nId=vdi-native-cursor-source.service\nActiveState=inactive\nScreen 0: minimum 320 x 200, current 2560 x 1440, maximum 8192 x 8192\nVirtual-1 connected primary 2560x1440+0+0 (normal left inverted right x axis y axis) 325mm x 203mm\n 1280x800 74.99 +\n 3840x2160 60.00 50.00 59.94 \n 1920x1440 60.00 \n'Adwaita'\n24\n'default'\ntrue\n1c3099bf924db3aee759b3d7c05e012569ef8650c400d1479144398795decc71 /opt/vdi-sunshine-0.21.0/usr/bin/sunshine\n",
"stderr": "",
"profile_client_sha": "1da552e4855d1562fdd8d6f04f1553382db4ccd364c66fe7486b1688cc584f15"
},
"192.168.1.72": {
"status": "MainPID=32278\nId=vdi-sunshine.service\nActiveState=active\n\nMainPID=0\nId=vdi-native-cursor-guard.service\nActiveState=inactive\n\nMainPID=0\nId=vdi-native-cursor-source.service\nActiveState=inactive\nScreen 0: minimum 320 x 200, current 2560 x 1440, maximum 8192 x 8192\nVirtual-1 connected primary 2560x1440+0+0 (normal left inverted right x axis y axis) 325mm x 203mm\n 1280x800 74.99 +\n 1920x1440 60.00 \n 2560x1080 50.00 \n'Adwaita'\n24\n'default'\nfalse\n61e1ecbc8db2df786b9760c652aa4b9885dff36c57d4af09616344314cb7c34c /usr/bin/sunshine\n/usr/bin/sunshine cap_sys_admin,cap_sys_nice=p\n",
"stderr": "",
"profile_client_sha": "1da552e4855d1562fdd8d6f04f1553382db4ccd364c66fe7486b1688cc584f15"
}
}

View File

@ -0,0 +1,14 @@
{
"baseline": "de2467e433821664cdd2224aad8c89a625be1ad9",
"patches": [
"0001-vdi-input-and-latest-frame.patch",
"0003-vdi-input-priority.patch",
"0004-vdi-power-key-policy.patch",
"0005-vdi-native-linux-cursor.patch",
"0002-vdi-absolute-click-barrier.patch"
],
"native_patch_sha256": "6a5879901ae0d2986271df7441a38d0f1813c0d7fb3f616af5e1212c75eaaa02",
"returncode": 0,
"stdout": "PATCHES_OK\n",
"stderr": ""
}

View File

@ -0,0 +1 @@
{"patches_apply_cleanly": ["0001-vdi-input-and-latest-frame.patch", "0003-vdi-input-priority.patch", "0004-vdi-power-key-policy.patch", "0005-vdi-native-linux-cursor.patch", "0002-vdi-absolute-click-barrier.patch"], "baseline": "de2467e433821664cdd2224aad8c89a625be1ad9"}

View File

@ -0,0 +1,188 @@
"""Run only with the controlled GTK acceptance window filling the stream."""
import ctypes as C
import json
import os
from pathlib import Path
import signal
import statistics
import struct
import subprocess
import time
os.environ.update(DISPLAY=':0', XAUTHORITY='/home/armbian/.Xauthority')
x = C.CDLL('libX11.so.6')
fix = C.CDLL('libXfixes.so.3')
test = C.CDLL('libXtst.so.6')
class Cursor(C.Structure):
_fields_ = [('x', C.c_short), ('y', C.c_short), ('w', C.c_ushort),
('h', C.c_ushort), ('hx', C.c_ushort), ('hy', C.c_ushort),
('serial', C.c_ulong), ('pixels', C.POINTER(C.c_ulong)),
('atom', C.c_ulong), ('name', C.c_char_p)]
x.XOpenDisplay.argtypes = [C.c_char_p]
x.XOpenDisplay.restype = C.c_void_p
x.XDefaultRootWindow.argtypes = [C.c_void_p]
x.XDefaultRootWindow.restype = C.c_ulong
x.XFree.argtypes = [C.c_void_p]
x.XSync.argtypes = [C.c_void_p, C.c_int]
x.XWarpPointer.argtypes = [C.c_void_p, C.c_ulong, C.c_ulong, C.c_int,
C.c_int, C.c_uint, C.c_uint, C.c_int, C.c_int]
x.XGetImage.argtypes = [C.c_void_p, C.c_ulong, C.c_int, C.c_int,
C.c_uint, C.c_uint, C.c_ulong, C.c_int]
x.XGetImage.restype = C.c_void_p
x.XGetPixel.argtypes = [C.c_void_p, C.c_int, C.c_int]
x.XGetPixel.restype = C.c_ulong
x.XDestroyImage.argtypes = [C.c_void_p]
fix.XFixesGetCursorImage.argtypes = [C.c_void_p]
fix.XFixesGetCursorImage.restype = C.POINTER(Cursor)
test.XTestFakeButtonEvent.argtypes = [C.c_void_p, C.c_uint, C.c_int, C.c_ulong]
d = x.XOpenDisplay(None)
assert d
root = x.XDefaultRootWindow(d)
def native():
p = fix.XFixesGetCursorImage(d)
assert p
try:
c = p.contents
return dict(x=c.x, y=c.y, w=c.w, h=c.h, hx=c.hx, hy=c.hy,
pixels=[int(c.pixels[i]) & 0xffffffff for i in range(c.w*c.h)])
finally:
x.XFree(p)
def warp(px, py):
x.XWarpPointer(d, 0, root, 0, 0, 0, 0, px, py)
x.XSync(d, 0)
def decoded_sequence():
im = x.XGetImage(d, root, 40, 1370, 640, 1, 0xffffffff, 2)
assert im
try:
values = [x.XGetPixel(im, i*40+20, 0) & 0xffffff for i in range(16)]
if any(0x202020 <= v <= 0xe0e0e0 for v in values):
return -1
return sum((1 << i) for i, v in enumerate(values) if v > 0xe0e0e0)
finally:
x.XDestroyImage(im)
def flat_video_crop(px, py):
im = x.XGetImage(d, root, px-40, py-40, 100, 100, 0xffffffff, 2)
assert im
try:
pixels = [x.XGetPixel(im, a, b) & 0xffffff for b in range(100) for a in range(100)]
# No baked-in pointer: uniform acceptance-window background at this point.
ref = pixels[0]
bad = sum(any(abs(((v >> s) & 255) - ((ref >> s) & 255)) > 8
for s in (0, 8, 16)) for v in pixels)
return dict(reference=ref, nonuniform_pixels=bad)
finally:
x.XDestroyImage(im)
host = os.sys.argv[1]
prefix = '/home/armbian/vdi-build/rkmpp-experiment/build/moonlight/app/moonlight stream ' + host + ' '
items = [l.split(None, 1) for l in subprocess.check_output(['ps','-eo','pid,args'], text=True).splitlines()[1:]
if len(l.split(None, 1)) == 2 and l.split(None, 1)[1].startswith(prefix)]
assert len(items) == 1, items
pid = int(items[0][0])
focus = subprocess.check_output(['xdotool','getwindowfocus','getwindowpid'], text=True).strip()
assert focus == str(pid), (focus, pid)
env = dict(item.split('=', 1) for item in Path('/proc/%d/environ' % pid).read_bytes().decode().split('\0') if '=' in item)
statepath = Path(env['VDI_NATIVE_CURSOR_STATE'])
initial_sequence = decoded_sequence()
assert 0 <= initial_sequence < 60000, 'test window not ready'
reference = flat_video_crop(180, 600)['reference']
assert all(abs(((reference >> s) & 255)-v) < 10 for s,v in [(16,240),(8,245),(0,250)]), 'acceptance window not visible'
shapes = []
for i, name in enumerate(['default','text','ew-resize','wait','none','crosshair','custom']):
px = int((i+.5)*2560/7)
warp(px, 600)
time.sleep(.6)
state = statepath.read_bytes()
header = struct.unpack('<8sQQQIIIIiiII', state[:64])
local = native()
source = dict(zip(['w','h','hx','hy','x','y','sw','sh'], header[4:]))
# Convert expected straight RGBA to XRender premultiplied ARGB.
expected = []
for j in range(64, len(state)-8, 4):
r,g,b,a = state[j:j+4]
expected.append((a << 24) | ((r*a+127)//255 << 16) |
((g*a+127)//255 << 8) | ((b*a+127)//255))
same_geometry = all(local[k] == source[k] for k in ['w','h','hx','hy'])
# Busy frames animate; these snapshots can legitimately be adjacent frames.
diff = max((abs(((a >> s) & 255)-((b >> s) & 255))
for a,b in zip(local['pixels'],expected) for s in [0,8,16,24]), default=0)
shapes.append(dict(name=name, source=source,
local={k:v for k,v in local.items() if k != 'pixels'},
geometry_matches=same_geometry, max_pixel_difference=diff,
visible_pixels=sum(p >> 24 != 0 for p in local['pixels']),
video=flat_video_crop(px, 600)))
Path('/tmp/native-%s-shapes.json' % host).write_text(json.dumps(shapes))
samples = []
for i in range(28):
px = int(((i % 7)+.5)*2560/7)
py = 750 if i % 2 == 0 else 850
warp(px, py)
time.sleep(.25)
start = time.monotonic_ns()
test.XTestFakeButtonEvent(d, 1, 1, 0)
x.XSync(d, 0)
expected = initial_sequence+i+1
seen = -1
released = False
try:
while time.monotonic_ns()-start < 3000000000:
if not released and time.monotonic_ns()-start >= 80000000:
test.XTestFakeButtonEvent(d, 1, 0, 0)
x.XSync(d, 0)
released = True
seen = decoded_sequence()
if seen == expected:
break
if seen > expected:
raise RuntimeError('unexpected duplicate click %d instead of %d' % (seen,expected))
time.sleep(.002)
finally:
if not released:
time.sleep(max(0, .08-(time.monotonic_ns()-start)/1e9))
test.XTestFakeButtonEvent(d, 1, 0, 0)
x.XSync(d, 0)
samples.append(dict(seq=expected, x=px, y=py, seen=seen,
decoded_ms=(time.monotonic_ns()-start)/1e6))
if seen != expected:
Path('/tmp/native-%s-failed-clicks.json' % host).write_text(json.dumps(samples))
raise AssertionError(samples[-1])
time.sleep(.1)
times = sorted(s['decoded_ms'] for s in samples)
# A stopped Moonlight cannot capture input, receive video, or draw frames.
# X11's native pointer must still move and keep its shape while it is stopped.
warp(200, 600)
time.sleep(.3)
before = native()
try:
os.kill(pid, signal.SIGSTOP)
start = time.monotonic_ns()
steps = []
for px,py in [(250,650),(280,670),(300,690),(350,700)]:
step_start = time.monotonic_ns()
warp(px, py)
after = native()
steps.append(dict(target=[px,py],position=[after['x'],after['y']],
query_ms=(time.monotonic_ns()-step_start)/1e6))
time.sleep(.06)
paused_ms = (time.monotonic_ns()-start)/1e6
finally:
os.kill(pid, signal.SIGCONT)
pause = dict(position=[after['x'],after['y']], elapsed_ms=paused_ms,
same_shape=before['pixels']==after['pixels'], steps=steps)
assert all(s['target']==s['position'] for s in steps) and pause['same_shape']
time.sleep(.4)
print(json.dumps(dict(host=host,pid=pid,shapes=shapes,paused_client=pause,
clicks=samples,p50_ms=statistics.median(times),
p95_ms=times[int(len(times)*.95)],
method='XTest click-down to unique decoded sequence; excludes USB and scanout')))

View File

@ -0,0 +1,17 @@
{
"client_sha256": "5d4330f703d7f8e053bc3795ca42bdaf231c9e9dd8ebb00a612013adbcccee03",
"ubuntu": {
"measured_clicks": 28,
"matched_source_events": 28,
"max_coordinate_error_pixels": 1.0546875,
"p50_ms": 188.3848435,
"p95_ms": 522.420223
},
"kylin": {
"measured_clicks": 28,
"matched_source_events": 28,
"max_coordinate_error_pixels": 0.82855224609375,
"p50_ms": 134.369708,
"p95_ms": 165.559673
}
}

View File

@ -0,0 +1,53 @@
"""Observe actual deployed state/receiver; keep the test seat awake with motion.
Run on the box only while a controlled native-cursor session is active.
No clicks, protocol injection, or changes to the state producer are made.
"""
import json
import os
from pathlib import Path
import struct
import subprocess
import sys
import time
duration = float(sys.argv[1])
output = Path(sys.argv[2])
pid = int(subprocess.check_output(['pgrep', '-x', 'moonlight']).strip())
proc = Path('/proc') / str(pid)
env = dict(x.split('=', 1) for x in (proc / 'environ').read_bytes().decode().split('\0') if '=' in x)
state = Path(env['VDI_NATIVE_CURSOR_STATE'])
start = time.monotonic()
last_motion = 0
result = dict(pid=pid, requested_seconds=duration, samples=0,
timestamp_after_pre_read_clock=0, timestamp_after_post_read_clock=0,
max_age_ms=0, survived=False)
try:
while time.monotonic() - start < duration:
if not proc.exists() or (proc / 'comm').read_text().strip() != 'moonlight':
raise RuntimeError('receiver exited')
before = time.monotonic_ns()
packet = state.read_bytes()
after = time.monotonic_ns()
stamp = struct.unpack_from('<Q', packet, 24)[0]
result['samples'] += 1
result['timestamp_after_pre_read_clock'] += stamp > before
result['timestamp_after_post_read_clock'] += stamp > after
result['max_age_ms'] = max(result['max_age_ms'], (after - stamp) / 1e6)
result['last_sequence'] = struct.unpack_from('<Q', packet, 16)[0]
if stamp > after or after - stamp > 2_000_000_000:
raise RuntimeError('invalid post-read timestamp')
now = time.monotonic()
if now - last_motion > 10:
px = 1800 + (int(now - start) // 10 % 2) * 50
motion_env = dict(os.environ, DISPLAY=':0', XAUTHORITY='/home/armbian/.Xauthority')
subprocess.run(['xdotool', 'mousemove', str(px), '1100'], env=motion_env, check=True)
last_motion = now
time.sleep(.004)
result['survived'] = True
except Exception as error:
result['error'] = str(error)
finally:
result['elapsed_seconds'] = round(time.monotonic() - start, 3)
output.write_text(json.dumps(result, indent=2) + '\n')
print(json.dumps(result), flush=True)

View File

@ -0,0 +1,92 @@
"""Controlled GTK test window: real native cursors and unique click sequences."""
import gi
import json
import time
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk, GdkPixbuf, GLib
win = Gtk.Window(title='VDI native cursor acceptance')
area = Gtk.DrawingArea()
win.add(area)
area.set_can_focus(True)
area.set_events(Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.BUTTON_PRESS_MASK |
Gdk.EventMask.BUTTON_RELEASE_MASK)
display = Gdk.Display.get_default()
names = ['default', 'text', 'ew-resize', 'wait', 'none', 'crosshair', 'custom']
cursors = {name: Gdk.Cursor.new_from_name(display, name) for name in names[:4] + ['crosshair']}
cursors['none'] = Gdk.Cursor.new_for_display(display, Gdk.CursorType.BLANK_CURSOR)
pix = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 24, 24)
pix.fill(0xff5030ff)
cursors['custom'] = Gdk.Cursor.new_from_pixbuf(display, pix, 7, 9)
current = None
sequence = 0
def report(**kw):
kw['t'] = time.monotonic()
print(json.dumps(kw), flush=True)
def motion(widget, event):
global current
index = min(6, int(event.x // (2560/7)))
name = names[index]
if name != current:
area.get_window().set_cursor(cursors[name])
current = name
report(event='shape', name=name)
return False
def button(widget, event):
global sequence
if event.type in (Gdk.EventType.BUTTON_PRESS, Gdk.EventType.DOUBLE_BUTTON_PRESS,
Gdk.EventType.TRIPLE_BUTTON_PRESS):
# GTK emits an extra double/triple notification, not another input.
if event.type == Gdk.EventType.BUTTON_PRESS:
sequence += 1
area.queue_draw_area(0, 1300, 1000, 140)
report(event=event.type.value_nick, seq=sequence, x=event.x_root,
y=event.y_root, button=event.button)
return False
def draw(widget, cr):
cr.set_source_rgb(.94, .96, .98)
cr.paint()
cr.select_font_face('sans')
cr.set_font_size(25)
for i, name in enumerate(names):
cr.set_source_rgb(.1, .15, .2)
cr.move_to(40 + i*2560/7, 100)
cr.show_text(name)
cr.set_source_rgb(.65, .7, .8)
cr.rectangle(i*2560/7, 120, 2, 1100)
cr.fill()
# Unique monotonic sequence, read from the actual decoded video.
for bit in range(16):
v = 1 if sequence & (1 << bit) else 0
cr.set_source_rgb(v, v, v)
cr.rectangle(40 + bit*40, 1340, 40, 60)
cr.fill()
return False
def key(widget, event):
if event.keyval == Gdk.KEY_Escape:
Gtk.main_quit()
return False
win.connect('destroy', Gtk.main_quit)
win.connect('key-press-event', key)
area.connect('motion-notify-event', motion)
area.connect('button-press-event', button)
area.connect('button-release-event', button)
area.connect('draw', draw)
win.fullscreen()
win.show_all()
win.present()
area.grab_focus()
report(event='ready')
Gtk.main()

View File

@ -0,0 +1,4 @@
{
"sunshine": "1c3099bf924db3aee759b3d7c05e012569ef8650c400d1479144398795decc71",
"capture-no-cursor.so": "cff4b7532aee69f0f205fa42946f45a89c1330486adc6358b90d13d2ccf1a0ea"
}

View File

@ -0,0 +1,302 @@
{
"host": "192.168.1.71",
"ready": true,
"samples": [
{
"w": 16,
"h": 16,
"hx": 8,
"hy": 8,
"x": 1814,
"y": 554,
"sw": 2560,
"sh": 1440,
"shape": 166,
"type": "cursor",
"version": 1,
"seq": 1
},
{
"w": 16,
"h": 16,
"hx": 8,
"hy": 8,
"x": 1814,
"y": 554,
"sw": 2560,
"sh": 1440,
"shape": 166,
"type": "cursor",
"version": 1,
"seq": 2
},
{
"w": 16,
"h": 16,
"hx": 8,
"hy": 8,
"x": 1814,
"y": 554,
"sw": 2560,
"sh": 1440,
"shape": 166,
"type": "cursor",
"version": 1,
"seq": 3
},
{
"w": 16,
"h": 16,
"hx": 8,
"hy": 8,
"x": 1814,
"y": 554,
"sw": 2560,
"sh": 1440,
"shape": 166,
"type": "cursor",
"version": 1,
"seq": 4
},
{
"w": 16,
"h": 16,
"hx": 8,
"hy": 8,
"x": 1814,
"y": 554,
"sw": 2560,
"sh": 1440,
"shape": 166,
"type": "cursor",
"version": 1,
"seq": 5
},
{
"w": 16,
"h": 16,
"hx": 8,
"hy": 8,
"x": 1814,
"y": 554,
"sw": 2560,
"sh": 1440,
"shape": 166,
"type": "cursor",
"version": 1,
"seq": 6
},
{
"w": 16,
"h": 16,
"hx": 8,
"hy": 8,
"x": 1814,
"y": 554,
"sw": 2560,
"sh": 1440,
"shape": 166,
"type": "cursor",
"version": 1,
"seq": 7
},
{
"w": 16,
"h": 16,
"hx": 8,
"hy": 8,
"x": 1814,
"y": 554,
"sw": 2560,
"sh": 1440,
"shape": 166,
"type": "cursor",
"version": 1,
"seq": 8
},
{
"w": 16,
"h": 16,
"hx": 8,
"hy": 8,
"x": 1814,
"y": 554,
"sw": 2560,
"sh": 1440,
"shape": 166,
"type": "cursor",
"version": 1,
"seq": 9
},
{
"w": 16,
"h": 16,
"hx": 8,
"hy": 8,
"x": 1814,
"y": 554,
"sw": 2560,
"sh": 1440,
"shape": 166,
"type": "cursor",
"version": 1,
"seq": 10
},
{
"w": 16,
"h": 16,
"hx": 8,
"hy": 8,
"x": 1814,
"y": 554,
"sw": 2560,
"sh": 1440,
"shape": 166,
"type": "cursor",
"version": 1,
"seq": 11
},
{
"w": 16,
"h": 16,
"hx": 8,
"hy": 8,
"x": 1814,
"y": 554,
"sw": 2560,
"sh": 1440,
"shape": 166,
"type": "cursor",
"version": 1,
"seq": 12
},
{
"w": 16,
"h": 16,
"hx": 8,
"hy": 8,
"x": 1814,
"y": 554,
"sw": 2560,
"sh": 1440,
"shape": 166,
"type": "cursor",
"version": 1,
"seq": 13
},
{
"w": 16,
"h": 16,
"hx": 8,
"hy": 8,
"x": 1814,
"y": 554,
"sw": 2560,
"sh": 1440,
"shape": 166,
"type": "cursor",
"version": 1,
"seq": 14
},
{
"w": 16,
"h": 16,
"hx": 8,
"hy": 8,
"x": 1814,
"y": 554,
"sw": 2560,
"sh": 1440,
"shape": 166,
"type": "cursor",
"version": 1,
"seq": 15
},
{
"w": 16,
"h": 16,
"hx": 8,
"hy": 8,
"x": 1814,
"y": 554,
"sw": 2560,
"sh": 1440,
"shape": 166,
"type": "cursor",
"version": 1,
"seq": 16
},
{
"w": 16,
"h": 16,
"hx": 8,
"hy": 8,
"x": 1814,
"y": 554,
"sw": 2560,
"sh": 1440,
"shape": 166,
"type": "cursor",
"version": 1,
"seq": 17
},
{
"w": 16,
"h": 16,
"hx": 8,
"hy": 8,
"x": 1814,
"y": 554,
"sw": 2560,
"sh": 1440,
"shape": 166,
"type": "cursor",
"version": 1,
"seq": 18
},
{
"w": 16,
"h": 16,
"hx": 8,
"hy": 8,
"x": 1814,
"y": 554,
"sw": 2560,
"sh": 1440,
"shape": 166,
"type": "cursor",
"version": 1,
"seq": 19
},
{
"w": 16,
"h": 16,
"hx": 8,
"hy": 8,
"x": 1814,
"y": 554,
"sw": 2560,
"sh": 1440,
"shape": 166,
"type": "cursor",
"version": 1,
"seq": 20
},
{
"w": 16,
"h": 16,
"hx": 8,
"hy": 8,
"x": 1814,
"y": 554,
"sw": 2560,
"sh": 1440,
"shape": 166,
"type": "cursor",
"version": 1,
"seq": 21
}
],
"stderr": "",
"exit": 0
}

View File

@ -0,0 +1,7 @@
{
"host": "192.168.1.71",
"ready": false,
"samples": [],
"stderr": "RuntimeError: Permission denied by kysec\n",
"exit": 1
}

View File

@ -0,0 +1,16 @@
[
{
"case": "agent-sigkill",
"host": "192.168.1.71",
"recovered": true,
"recovery_seconds": 3.22,
"state": "ExecStart={ path=/opt/vdi-sunshine-0.21.0/usr/bin/sunshine ; argv[]=/opt/vdi-sunshine-0.21.0/usr/bin/sunshine /home/test1/.config/sunshine/sunshine.conf ; ignore_errors=no ; start_time=[Thu 2026-11-05 11:11:57 CST] ; stop_time=[n/a] ; pid=180535 ; code=(null) ; status=0/0 }\nActiveState=active\n"
},
{
"case": "guard-sigkill",
"host": "192.168.1.71",
"recovered": true,
"recovery_seconds": 0.893,
"state": "ExecStart={ path=/opt/vdi-sunshine-0.21.0/usr/bin/sunshine ; argv[]=/opt/vdi-sunshine-0.21.0/usr/bin/sunshine /home/test1/.config/sunshine/sunshine.conf ; ignore_errors=no ; start_time=[Thu 2026-11-05 11:12:00 CST] ; stop_time=[n/a] ; pid=180701 ; code=(null) ; status=0/0 }\nActiveState=active\n"
}
]

View File

@ -0,0 +1,4 @@
{
"sunshine": "61e1ecbc8db2df786b9760c652aa4b9885dff36c57d4af09616344314cb7c34c",
"capture-no-cursor.so": "cff4b7532aee69f0f205fa42946f45a89c1330486adc6358b90d13d2ccf1a0ea"
}

View File

@ -0,0 +1,316 @@
{
"host": "192.168.1.72",
"ready": true,
"samples": [
{
"w": 24,
"h": 24,
"hx": 3,
"hy": 1,
"x": 2548,
"y": 1,
"sw": 2560,
"sh": 1440,
"shape": 124,
"type": "cursor",
"version": 1,
"seq": 1
},
{
"w": 24,
"h": 24,
"hx": 3,
"hy": 1,
"x": 2548,
"y": 1,
"sw": 2560,
"sh": 1440,
"shape": 124,
"type": "cursor",
"version": 1,
"seq": 2
},
{
"w": 24,
"h": 24,
"hx": 3,
"hy": 1,
"x": 2548,
"y": 1,
"sw": 2560,
"sh": 1440,
"shape": 124,
"type": "cursor",
"version": 1,
"seq": 3
},
{
"w": 24,
"h": 24,
"hx": 3,
"hy": 1,
"x": 2548,
"y": 1,
"sw": 2560,
"sh": 1440,
"shape": 124,
"type": "cursor",
"version": 1,
"seq": 4
},
{
"w": 24,
"h": 24,
"hx": 3,
"hy": 1,
"x": 2548,
"y": 1,
"sw": 2560,
"sh": 1440,
"shape": 124,
"type": "cursor",
"version": 1,
"seq": 5
},
{
"w": 24,
"h": 24,
"hx": 3,
"hy": 1,
"x": 2548,
"y": 1,
"sw": 2560,
"sh": 1440,
"shape": 124,
"type": "cursor",
"version": 1,
"seq": 6
},
{
"w": 24,
"h": 24,
"hx": 3,
"hy": 1,
"x": 2548,
"y": 1,
"sw": 2560,
"sh": 1440,
"shape": 124,
"type": "cursor",
"version": 1,
"seq": 7
},
{
"w": 24,
"h": 24,
"hx": 3,
"hy": 1,
"x": 2548,
"y": 1,
"sw": 2560,
"sh": 1440,
"shape": 124,
"type": "cursor",
"version": 1,
"seq": 8
},
{
"w": 24,
"h": 24,
"hx": 3,
"hy": 1,
"x": 2548,
"y": 1,
"sw": 2560,
"sh": 1440,
"shape": 124,
"type": "cursor",
"version": 1,
"seq": 9
},
{
"w": 24,
"h": 24,
"hx": 3,
"hy": 1,
"x": 2548,
"y": 1,
"sw": 2560,
"sh": 1440,
"shape": 124,
"type": "cursor",
"version": 1,
"seq": 10
},
{
"w": 24,
"h": 24,
"hx": 3,
"hy": 1,
"x": 2548,
"y": 1,
"sw": 2560,
"sh": 1440,
"shape": 124,
"type": "cursor",
"version": 1,
"seq": 11
},
{
"w": 24,
"h": 24,
"hx": 3,
"hy": 1,
"x": 2548,
"y": 1,
"sw": 2560,
"sh": 1440,
"shape": 124,
"type": "cursor",
"version": 1,
"seq": 12
},
{
"w": 24,
"h": 24,
"hx": 3,
"hy": 1,
"x": 2548,
"y": 1,
"sw": 2560,
"sh": 1440,
"shape": 124,
"type": "cursor",
"version": 1,
"seq": 13
},
{
"w": 24,
"h": 24,
"hx": 3,
"hy": 1,
"x": 2548,
"y": 1,
"sw": 2560,
"sh": 1440,
"shape": 124,
"type": "cursor",
"version": 1,
"seq": 14
},
{
"w": 24,
"h": 24,
"hx": 3,
"hy": 1,
"x": 2548,
"y": 1,
"sw": 2560,
"sh": 1440,
"shape": 124,
"type": "cursor",
"version": 1,
"seq": 15
},
{
"w": 24,
"h": 24,
"hx": 3,
"hy": 1,
"x": 2548,
"y": 1,
"sw": 2560,
"sh": 1440,
"shape": 124,
"type": "cursor",
"version": 1,
"seq": 16
},
{
"w": 24,
"h": 24,
"hx": 3,
"hy": 1,
"x": 2548,
"y": 1,
"sw": 2560,
"sh": 1440,
"shape": 124,
"type": "cursor",
"version": 1,
"seq": 17
},
{
"w": 24,
"h": 24,
"hx": 3,
"hy": 1,
"x": 2548,
"y": 1,
"sw": 2560,
"sh": 1440,
"shape": 124,
"type": "cursor",
"version": 1,
"seq": 18
},
{
"w": 24,
"h": 24,
"hx": 3,
"hy": 1,
"x": 2548,
"y": 1,
"sw": 2560,
"sh": 1440,
"shape": 124,
"type": "cursor",
"version": 1,
"seq": 19
},
{
"w": 24,
"h": 24,
"hx": 3,
"hy": 1,
"x": 2548,
"y": 1,
"sw": 2560,
"sh": 1440,
"shape": 124,
"type": "cursor",
"version": 1,
"seq": 20
},
{
"w": 24,
"h": 24,
"hx": 3,
"hy": 1,
"x": 2548,
"y": 1,
"sw": 2560,
"sh": 1440,
"shape": 124,
"type": "cursor",
"version": 1,
"seq": 21
},
{
"w": 24,
"h": 24,
"hx": 3,
"hy": 1,
"x": 2548,
"y": 1,
"sw": 2560,
"sh": 1440,
"shape": 124,
"type": "cursor",
"version": 1,
"seq": 22
}
],
"stderr": "",
"exit": 0
}

View File

@ -0,0 +1,7 @@
{
"host": "192.168.1.72",
"ready": false,
"samples": [],
"stderr": "Traceback (most recent call last):\n File \"/home/test2/vdi-terminal/native-cursor-v1/host.py\", line 211, in <module>\n main()\n File \"/home/test2/vdi-terminal/native-cursor-v1/host.py\", line 205, in main\n stream()\n File \"/home/test2/vdi-terminal/native-cursor-v1/host.py\", line 154, in stream\n raise RuntimeError('guard not ready')\nRuntimeError: guard not ready\n",
"exit": 1
}

View File

@ -0,0 +1,16 @@
[
{
"case": "agent-sigkill",
"host": "192.168.1.72",
"recovered": true,
"recovery_seconds": 2.724,
"state": "ExecStart={ path=/usr/bin/sunshine ; argv[]=/usr/bin/sunshine /home/test2/.config/sunshine/sunshine.conf ; ignore_errors=no ; start_time=[Thu 2026-11-05 11:11:56 CST] ; stop_time=[n/a] ; pid=24296 ; code=(null) ; status=0/0 }\nActiveState=active\n"
},
{
"case": "guard-sigkill",
"host": "192.168.1.72",
"recovered": true,
"recovery_seconds": 0.771,
"state": "ExecStart={ path=/usr/bin/sunshine ; argv[]=/usr/bin/sunshine /home/test2/.config/sunshine/sunshine.conf ; ignore_errors=no ; start_time=[Thu 2026-11-05 11:12:14 CST] ; stop_time=[n/a] ; pid=24470 ; code=(null) ; status=0/0 }\nActiveState=active\n"
}
]

View File

@ -0,0 +1,11 @@
{
"pid": 285520,
"requested_seconds": 360.0,
"samples": 65658,
"timestamp_after_pre_read_clock": 0,
"timestamp_after_post_read_clock": 0,
"max_age_ms": 308.103546,
"survived": true,
"last_sequence": 7956,
"elapsed_seconds": 360.005
}

View File

@ -0,0 +1 @@
[{"file": "_usr_bin_sunshine.1000.crash", "ProblemType": "Crash", "Date": "Thu Nov 5 11:12:07 2026", "ExecutablePath": "/usr/bin/sunshine", "Package": "sunshine 2026.914.233613-1+ubuntu24.04 [origin: unknown]", "Signal": "5"}]

View File

@ -0,0 +1 @@
{"clicks": [{"seq": 29, "seen": 29, "x": 300, "y": 800}, {"seq": 30, "seen": 30, "x": 1500, "y": 900}, {"seq": 31, "seen": 31, "x": 300, "y": 800}, {"seq": 32, "seen": 32, "x": 1500, "y": 900}, {"seq": 33, "seen": 33, "x": 300, "y": 800}, {"seq": 34, "seen": 34, "x": 1500, "y": 900}, {"seq": 35, "seen": 35, "x": 300, "y": 800}, {"seq": 36, "seen": 36, "x": 1500, "y": 900}, {"seq": 37, "seen": 37, "x": 300, "y": 800}, {"seq": 38, "seen": 38, "x": 1500, "y": 900}, {"seq": 39, "seen": 39, "x": 300, "y": 800}, {"seq": 40, "seen": 40, "x": 1500, "y": 900}, {"seq": 41, "seen": 41, "x": 300, "y": 800}, {"seq": 42, "seen": 42, "x": 1500, "y": 900}, {"seq": 43, "seen": 43, "x": 300, "y": 800}, {"seq": 44, "seen": 44, "x": 1500, "y": 900}], "double_click_start": 44, "double_click_end": 46}

View File

@ -0,0 +1 @@
{"host": "192.168.1.72", "pid": 263384, "shapes": [{"name": "default", "source": {"w": 24, "h": 24, "hx": 3, "hy": 1, "x": 181, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 182, "y": 600, "w": 24, "h": 24, "hx": 3, "hy": 1}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 254, "video": {"reference": 15726330, "nonuniform_pixels": 0}}, {"name": "text", "source": {"w": 24, "h": 24, "hx": 11, "hy": 12, "x": 547, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 548, "y": 600, "w": 24, "h": 24, "hx": 11, "hy": 12}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 240, "video": {"reference": 15791866, "nonuniform_pixels": 0}}, {"name": "ew-resize", "source": {"w": 24, "h": 24, "hx": 12, "hy": 12, "x": 913, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 914, "y": 600, "w": 24, "h": 24, "hx": 12, "hy": 12}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 301, "video": {"reference": 15726330, "nonuniform_pixels": 0}}, {"name": "wait", "source": {"w": 24, "h": 24, "hx": 11, "hy": 11, "x": 1280, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 1280, "y": 600, "w": 24, "h": 24, "hx": 11, "hy": 11}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 433, "video": {"reference": 15791866, "nonuniform_pixels": 0}}, {"name": "none", "source": {"w": 1, "h": 1, "hx": 0, "hy": 0, "x": 1645, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 1645, "y": 600, "w": 1, "h": 1, "hx": 0, "hy": 0}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 0, "video": {"reference": 15726074, "nonuniform_pixels": 0}}, {"name": "crosshair", "source": {"w": 24, "h": 24, "hx": 11, "hy": 11, "x": 2011, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 2011, "y": 600, "w": 24, "h": 24, "hx": 11, "hy": 11}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 281, "video": {"reference": 15726074, "nonuniform_pixels": 0}}, {"name": "custom", "source": {"w": 24, "h": 24, "hx": 7, "hy": 9, "x": 2377, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 2377, "y": 600, "w": 24, "h": 24, "hx": 7, "hy": 9}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 576, "video": {"reference": 15726074, "nonuniform_pixels": 0}}], "paused_client": {"position": [250, 650], "elapsed_ms": 2.232537, "same_shape": true}, "clicks": [{"seq": 1, "x": 182, "y": 750, "seen": 1, "decoded_ms": 183.136301}, {"seq": 2, "x": 548, "y": 850, "seen": 2, "decoded_ms": 150.601919}, {"seq": 3, "x": 914, "y": 750, "seen": 3, "decoded_ms": 162.979614}, {"seq": 4, "x": 1280, "y": 850, "seen": 4, "decoded_ms": 562.228218}, {"seq": 5, "x": 1645, "y": 750, "seen": 5, "decoded_ms": 149.661983}, {"seq": 6, "x": 2011, "y": 850, "seen": 6, "decoded_ms": 187.689807}, {"seq": 7, "x": 2377, "y": 750, "seen": 7, "decoded_ms": 186.617722}, {"seq": 8, "x": 182, "y": 850, "seen": 8, "decoded_ms": 167.201514}, {"seq": 9, "x": 548, "y": 750, "seen": 9, "decoded_ms": 143.805796}, {"seq": 10, "x": 914, "y": 850, "seen": 10, "decoded_ms": 145.803285}, {"seq": 11, "x": 1280, "y": 750, "seen": 11, "decoded_ms": 505.147227}, {"seq": 12, "x": 1645, "y": 850, "seen": 12, "decoded_ms": 156.874419}, {"seq": 13, "x": 2011, "y": 750, "seen": 13, "decoded_ms": 164.724633}, {"seq": 14, "x": 2377, "y": 850, "seen": 14, "decoded_ms": 172.592036}, {"seq": 15, "x": 182, "y": 750, "seen": 15, "decoded_ms": 195.775758}, {"seq": 16, "x": 548, "y": 850, "seen": 16, "decoded_ms": 151.145679}, {"seq": 17, "x": 914, "y": 750, "seen": 17, "decoded_ms": 173.941806}, {"seq": 18, "x": 1280, "y": 850, "seen": 18, "decoded_ms": 352.426864}, {"seq": 19, "x": 1645, "y": 750, "seen": 19, "decoded_ms": 156.050885}, {"seq": 20, "x": 2011, "y": 850, "seen": 20, "decoded_ms": 158.266234}, {"seq": 21, "x": 2377, "y": 750, "seen": 21, "decoded_ms": 126.999009}, {"seq": 22, "x": 182, "y": 850, "seen": 22, "decoded_ms": 194.209712}, {"seq": 23, "x": 548, "y": 750, "seen": 23, "decoded_ms": 183.157837}, {"seq": 24, "x": 914, "y": 850, "seen": 24, "decoded_ms": 186.545894}, {"seq": 25, "x": 1280, "y": 750, "seen": 25, "decoded_ms": 506.013562}, {"seq": 26, "x": 1645, "y": 850, "seen": 26, "decoded_ms": 164.698513}, {"seq": 27, "x": 2011, "y": 750, "seen": 27, "decoded_ms": 177.684307}, {"seq": 28, "x": 2377, "y": 850, "seen": 28, "decoded_ms": 174.644202}], "p50_ms": 173.26692100000002, "p95_ms": 506.013562, "method": "XTest click-down to unique decoded sequence; excludes USB and scanout"}

View File

@ -0,0 +1,11 @@
{
"pid": 293859,
"requested_seconds": 360.0,
"samples": 65960,
"timestamp_after_pre_read_clock": 1,
"timestamp_after_post_read_clock": 0,
"max_age_ms": 1109.787402,
"survived": true,
"last_sequence": 6538,
"elapsed_seconds": 360.003
}

View File

@ -0,0 +1 @@
{"pid": 293859, "worker": 293861, "pause_seconds": 2.6, "exited": true, "check_seconds": 2.9042484689998673}

Binary file not shown.

After

Width:  |  Height:  |  Size: 804 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

View File

@ -0,0 +1 @@
{"pid": 299860, "ppid": 235482, "args": "/home/armbian/vdi-build/rkmpp-experiment/build/moonlight/app/moonlight stream 192.168.1.72 Desktop --resolution 2560x1440 --fps 30 --bitrate 30000 --display-mode fullscreen --video-codec H.264 --video-decoder hardware --absolute-mouse --capture-system-keys always --keep-awake --no-vsync --no-frame-pacing --audio-on-host ", "sha256": "5d4330f703d7f8e053bc3795ca42bdaf231c9e9dd8ebb00a612013adbcccee03", "native": true, "shape": [24, 24, 3, 1]}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

View File

@ -0,0 +1 @@
{"host": "192.168.1.72", "pid": 256179, "shapes": [{"name": "default", "source": {"w": 24, "h": 24, "hx": 3, "hy": 1, "x": 181, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 182, "y": 600, "w": 24, "h": 24, "hx": 3, "hy": 1}, "geometry_matches": true, "max_pixel_difference": 162, "visible_pixels": 254, "video": {"reference": 15726330, "nonuniform_pixels": 0}}, {"name": "text", "source": {"w": 24, "h": 24, "hx": 11, "hy": 12, "x": 547, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 548, "y": 600, "w": 24, "h": 24, "hx": 11, "hy": 12}, "geometry_matches": true, "max_pixel_difference": 101, "visible_pixels": 240, "video": {"reference": 15791866, "nonuniform_pixels": 0}}, {"name": "ew-resize", "source": {"w": 24, "h": 24, "hx": 12, "hy": 12, "x": 913, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 914, "y": 600, "w": 24, "h": 24, "hx": 12, "hy": 12}, "geometry_matches": true, "max_pixel_difference": 175, "visible_pixels": 301, "video": {"reference": 15726330, "nonuniform_pixels": 0}}, {"name": "wait", "source": {"w": 24, "h": 24, "hx": 11, "hy": 11, "x": 1280, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 1280, "y": 600, "w": 24, "h": 24, "hx": 11, "hy": 11}, "geometry_matches": true, "max_pixel_difference": 129, "visible_pixels": 433, "video": {"reference": 15791866, "nonuniform_pixels": 0}}, {"name": "none", "source": {"w": 1, "h": 1, "hx": 0, "hy": 0, "x": 1645, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 1645, "y": 600, "w": 1, "h": 1, "hx": 0, "hy": 0}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 0, "video": {"reference": 15726074, "nonuniform_pixels": 0}}, {"name": "crosshair", "source": {"w": 24, "h": 24, "hx": 11, "hy": 11, "x": 2011, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 2011, "y": 600, "w": 24, "h": 24, "hx": 11, "hy": 11}, "geometry_matches": true, "max_pixel_difference": 78, "visible_pixels": 281, "video": {"reference": 15726074, "nonuniform_pixels": 0}}, {"name": "custom", "source": {"w": 24, "h": 24, "hx": 7, "hy": 9, "x": 2377, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 2377, "y": 600, "w": 24, "h": 24, "hx": 7, "hy": 9}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 576, "video": {"reference": 15726074, "nonuniform_pixels": 0}}], "paused_client": {"position": [250, 650], "elapsed_ms": 2.727055, "same_shape": true}, "clicks": [{"seq": 3, "x": 182, "y": 750, "seen": 3, "decoded_ms": 177.207219}, {"seq": 4, "x": 548, "y": 850, "seen": 4, "decoded_ms": 177.766631}, {"seq": 5, "x": 914, "y": 750, "seen": 5, "decoded_ms": 199.373737}, {"seq": 6, "x": 1280, "y": 850, "seen": 6, "decoded_ms": 182.446665}, {"seq": 7, "x": 1645, "y": 750, "seen": 7, "decoded_ms": 174.159044}, {"seq": 8, "x": 2011, "y": 850, "seen": 8, "decoded_ms": 211.839356}, {"seq": 9, "x": 2377, "y": 750, "seen": 9, "decoded_ms": 172.112732}, {"seq": 10, "x": 182, "y": 850, "seen": 10, "decoded_ms": 218.076291}, {"seq": 11, "x": 548, "y": 750, "seen": 11, "decoded_ms": 158.319669}, {"seq": 12, "x": 914, "y": 850, "seen": 12, "decoded_ms": 190.78387}, {"seq": 13, "x": 1280, "y": 750, "seen": 13, "decoded_ms": 475.373962}, {"seq": 14, "x": 1645, "y": 850, "seen": 14, "decoded_ms": 183.265657}, {"seq": 15, "x": 2011, "y": 750, "seen": 15, "decoded_ms": 190.493082}, {"seq": 16, "x": 2377, "y": 850, "seen": 16, "decoded_ms": 174.658874}, {"seq": 17, "x": 182, "y": 750, "seen": 17, "decoded_ms": 202.290292}, {"seq": 18, "x": 548, "y": 850, "seen": 18, "decoded_ms": 201.035264}, {"seq": 19, "x": 914, "y": 750, "seen": 19, "decoded_ms": 169.113849}, {"seq": 20, "x": 1280, "y": 850, "seen": 20, "decoded_ms": 389.791156}, {"seq": 21, "x": 1645, "y": 750, "seen": 21, "decoded_ms": 145.709303}, {"seq": 22, "x": 2011, "y": 850, "seen": 22, "decoded_ms": 142.136716}, {"seq": 23, "x": 2377, "y": 750, "seen": 23, "decoded_ms": 150.834416}, {"seq": 24, "x": 182, "y": 850, "seen": 24, "decoded_ms": 218.919785}, {"seq": 25, "x": 548, "y": 750, "seen": 25, "decoded_ms": 145.115185}, {"seq": 26, "x": 914, "y": 850, "seen": 26, "decoded_ms": 174.238963}, {"seq": 27, "x": 1280, "y": 750, "seen": 27, "decoded_ms": 476.883703}, {"seq": 28, "x": 1645, "y": 850, "seen": 28, "decoded_ms": 165.254265}, {"seq": 29, "x": 2011, "y": 750, "seen": 29, "decoded_ms": 182.507335}, {"seq": 30, "x": 2377, "y": 850, "seen": 30, "decoded_ms": 168.10207}], "p50_ms": 180.106648, "p95_ms": 475.373962, "method": "XTest click-down to unique decoded sequence; excludes USB and scanout"}

View File

@ -0,0 +1 @@
{"host": "192.168.1.72", "pid": 293859, "shapes": [{"name": "default", "source": {"w": 24, "h": 24, "hx": 3, "hy": 1, "x": 181, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 182, "y": 600, "w": 24, "h": 24, "hx": 3, "hy": 1}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 254, "video": {"reference": 15726330, "nonuniform_pixels": 0}}, {"name": "text", "source": {"w": 24, "h": 24, "hx": 11, "hy": 12, "x": 547, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 548, "y": 600, "w": 24, "h": 24, "hx": 11, "hy": 12}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 240, "video": {"reference": 15791866, "nonuniform_pixels": 0}}, {"name": "ew-resize", "source": {"w": 24, "h": 24, "hx": 12, "hy": 12, "x": 913, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 914, "y": 600, "w": 24, "h": 24, "hx": 12, "hy": 12}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 301, "video": {"reference": 15726330, "nonuniform_pixels": 0}}, {"name": "wait", "source": {"w": 24, "h": 24, "hx": 11, "hy": 11, "x": 1280, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 1280, "y": 600, "w": 24, "h": 24, "hx": 11, "hy": 11}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 433, "video": {"reference": 15791866, "nonuniform_pixels": 0}}, {"name": "none", "source": {"w": 1, "h": 1, "hx": 0, "hy": 0, "x": 1645, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 1645, "y": 600, "w": 1, "h": 1, "hx": 0, "hy": 0}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 0, "video": {"reference": 15726074, "nonuniform_pixels": 0}}, {"name": "crosshair", "source": {"w": 24, "h": 24, "hx": 11, "hy": 11, "x": 2011, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 2011, "y": 600, "w": 24, "h": 24, "hx": 11, "hy": 11}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 281, "video": {"reference": 15726074, "nonuniform_pixels": 0}}, {"name": "custom", "source": {"w": 24, "h": 24, "hx": 7, "hy": 9, "x": 2377, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 2377, "y": 600, "w": 24, "h": 24, "hx": 7, "hy": 9}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 576, "video": {"reference": 15726074, "nonuniform_pixels": 0}}], "paused_client": {"position": [350, 700], "elapsed_ms": 249.623897, "same_shape": true, "steps": [{"target": [250, 650], "position": [250, 650], "query_ms": 2.255624}, {"target": [280, 670], "position": [280, 670], "query_ms": 2.353619}, {"target": [300, 690], "position": [300, 690], "query_ms": 2.202252}, {"target": [350, 700], "position": [350, 700], "query_ms": 2.288873}]}, "clicks": [{"seq": 1, "x": 182, "y": 750, "seen": 1, "decoded_ms": 186.428878}, {"seq": 2, "x": 548, "y": 850, "seen": 2, "decoded_ms": 181.712898}, {"seq": 3, "x": 914, "y": 750, "seen": 3, "decoded_ms": 207.490698}, {"seq": 4, "x": 1280, "y": 850, "seen": 4, "decoded_ms": 533.830025}, {"seq": 5, "x": 1645, "y": 750, "seen": 5, "decoded_ms": 190.340809}, {"seq": 6, "x": 2011, "y": 850, "seen": 6, "decoded_ms": 204.401567}, {"seq": 7, "x": 2377, "y": 750, "seen": 7, "decoded_ms": 166.595545}, {"seq": 8, "x": 182, "y": 850, "seen": 8, "decoded_ms": 195.011611}, {"seq": 9, "x": 548, "y": 750, "seen": 9, "decoded_ms": 181.070161}, {"seq": 10, "x": 914, "y": 850, "seen": 10, "decoded_ms": 191.989545}, {"seq": 11, "x": 1280, "y": 750, "seen": 11, "decoded_ms": 450.587655}, {"seq": 12, "x": 1645, "y": 850, "seen": 12, "decoded_ms": 166.558247}, {"seq": 13, "x": 2011, "y": 750, "seen": 13, "decoded_ms": 174.993944}, {"seq": 14, "x": 2377, "y": 850, "seen": 14, "decoded_ms": 195.413266}, {"seq": 15, "x": 182, "y": 750, "seen": 15, "decoded_ms": 242.226344}, {"seq": 16, "x": 548, "y": 850, "seen": 16, "decoded_ms": 206.124429}, {"seq": 17, "x": 914, "y": 750, "seen": 17, "decoded_ms": 181.78767}, {"seq": 18, "x": 1280, "y": 850, "seen": 18, "decoded_ms": 463.825494}, {"seq": 19, "x": 1645, "y": 750, "seen": 19, "decoded_ms": 194.360157}, {"seq": 20, "x": 2011, "y": 850, "seen": 20, "decoded_ms": 177.975533}, {"seq": 21, "x": 2377, "y": 750, "seen": 21, "decoded_ms": 229.660945}, {"seq": 22, "x": 182, "y": 850, "seen": 22, "decoded_ms": 159.611781}, {"seq": 23, "x": 548, "y": 750, "seen": 23, "decoded_ms": 149.18704}, {"seq": 24, "x": 914, "y": 850, "seen": 24, "decoded_ms": 179.366438}, {"seq": 25, "x": 1280, "y": 750, "seen": 25, "decoded_ms": 522.420223}, {"seq": 26, "x": 1645, "y": 850, "seen": 26, "decoded_ms": 154.151825}, {"seq": 27, "x": 2011, "y": 750, "seen": 27, "decoded_ms": 154.669796}, {"seq": 28, "x": 2377, "y": 850, "seen": 28, "decoded_ms": 145.580813}], "p50_ms": 188.3848435, "p95_ms": 522.420223, "method": "XTest click-down to unique decoded sequence; excludes USB and scanout"}

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

View File

@ -0,0 +1,7 @@
{
"agent": 39181,
"client": 293859,
"pause_seconds": 1.1,
"local_pointer": "x:650 y:900 screen:0 window:48234511",
"survived": true
}

View File

@ -0,0 +1,5 @@
{
"bridge_frozen_seconds": 1.2,
"checked_after_seconds": 3.289,
"remaining_clients": []
}

View File

@ -0,0 +1 @@
{"host": "192.168.1.72", "pid": 272099, "shapes": [{"name": "default", "source": {"w": 24, "h": 24, "hx": 3, "hy": 1, "x": 181, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 182, "y": 600, "w": 24, "h": 24, "hx": 3, "hy": 1}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 254, "video": {"reference": 15726330, "nonuniform_pixels": 0}}, {"name": "text", "source": {"w": 24, "h": 24, "hx": 11, "hy": 12, "x": 547, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 548, "y": 600, "w": 24, "h": 24, "hx": 11, "hy": 12}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 240, "video": {"reference": 15791866, "nonuniform_pixels": 0}}, {"name": "ew-resize", "source": {"w": 24, "h": 24, "hx": 12, "hy": 12, "x": 913, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 914, "y": 600, "w": 24, "h": 24, "hx": 12, "hy": 12}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 301, "video": {"reference": 15726330, "nonuniform_pixels": 0}}, {"name": "wait", "source": {"w": 24, "h": 24, "hx": 11, "hy": 11, "x": 1280, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 1280, "y": 600, "w": 24, "h": 24, "hx": 11, "hy": 11}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 433, "video": {"reference": 15791866, "nonuniform_pixels": 0}}, {"name": "none", "source": {"w": 1, "h": 1, "hx": 0, "hy": 0, "x": 1645, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 1645, "y": 600, "w": 1, "h": 1, "hx": 0, "hy": 0}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 0, "video": {"reference": 15726074, "nonuniform_pixels": 0}}, {"name": "crosshair", "source": {"w": 24, "h": 24, "hx": 11, "hy": 11, "x": 2011, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 2011, "y": 600, "w": 24, "h": 24, "hx": 11, "hy": 11}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 281, "video": {"reference": 15726074, "nonuniform_pixels": 0}}, {"name": "custom", "source": {"w": 24, "h": 24, "hx": 7, "hy": 9, "x": 2377, "y": 599, "sw": 2560, "sh": 1440}, "local": {"x": 2377, "y": 600, "w": 24, "h": 24, "hx": 7, "hy": 9}, "geometry_matches": true, "max_pixel_difference": 0, "visible_pixels": 576, "video": {"reference": 15726074, "nonuniform_pixels": 0}}], "paused_client": {"position": [350, 700], "elapsed_ms": 263.611753, "same_shape": true, "steps": [{"target": [250, 650], "position": [250, 650], "query_ms": 16.220678}, {"target": [280, 670], "position": [280, 670], "query_ms": 2.214575}, {"target": [300, 690], "position": [300, 690], "query_ms": 2.215451}, {"target": [350, 700], "position": [350, 700], "query_ms": 2.380822}]}, "clicks": [{"seq": 2, "x": 182, "y": 750, "seen": 2, "decoded_ms": 192.980398}, {"seq": 3, "x": 548, "y": 850, "seen": 3, "decoded_ms": 249.189423}, {"seq": 4, "x": 914, "y": 750, "seen": 4, "decoded_ms": 193.088898}, {"seq": 5, "x": 1280, "y": 850, "seen": 5, "decoded_ms": 374.099277}, {"seq": 6, "x": 1645, "y": 750, "seen": 6, "decoded_ms": 166.521582}, {"seq": 7, "x": 2011, "y": 850, "seen": 7, "decoded_ms": 207.861192}, {"seq": 8, "x": 2377, "y": 750, "seen": 8, "decoded_ms": 246.000709}, {"seq": 9, "x": 182, "y": 850, "seen": 9, "decoded_ms": 181.998527}, {"seq": 10, "x": 548, "y": 750, "seen": 10, "decoded_ms": 181.410831}, {"seq": 11, "x": 914, "y": 850, "seen": 11, "decoded_ms": 221.952754}, {"seq": 12, "x": 1280, "y": 750, "seen": 12, "decoded_ms": 507.168335}, {"seq": 13, "x": 1645, "y": 850, "seen": 13, "decoded_ms": 182.568433}, {"seq": 14, "x": 2011, "y": 750, "seen": 14, "decoded_ms": 164.879833}, {"seq": 15, "x": 2377, "y": 850, "seen": 15, "decoded_ms": 212.375805}, {"seq": 16, "x": 182, "y": 750, "seen": 16, "decoded_ms": 188.116394}, {"seq": 17, "x": 548, "y": 850, "seen": 17, "decoded_ms": 203.54084}, {"seq": 18, "x": 914, "y": 750, "seen": 18, "decoded_ms": 183.044427}, {"seq": 19, "x": 1280, "y": 850, "seen": 19, "decoded_ms": 316.917585}, {"seq": 20, "x": 1645, "y": 750, "seen": 20, "decoded_ms": 161.788239}, {"seq": 21, "x": 2011, "y": 850, "seen": 21, "decoded_ms": 180.879436}, {"seq": 22, "x": 2377, "y": 750, "seen": 22, "decoded_ms": 172.71762}, {"seq": 23, "x": 182, "y": 850, "seen": 23, "decoded_ms": 175.79901}, {"seq": 24, "x": 548, "y": 750, "seen": 24, "decoded_ms": 185.907366}, {"seq": 25, "x": 914, "y": 850, "seen": 25, "decoded_ms": 207.759418}, {"seq": 26, "x": 1280, "y": 750, "seen": 26, "decoded_ms": 468.920931}, {"seq": 27, "x": 1645, "y": 850, "seen": 27, "decoded_ms": 189.784407}, {"seq": 28, "x": 2011, "y": 750, "seen": 28, "decoded_ms": 186.12174}, {"seq": 29, "x": 2377, "y": 850, "seen": 29, "decoded_ms": 182.798273}], "p50_ms": 188.9504005, "p95_ms": 468.920931, "method": "XTest click-down to unique decoded sequence; excludes USB and scanout"}

View File

@ -0,0 +1,9 @@
{
"host": "192.168.1.72",
"target": [
400,
600
],
"readback": "X=400\nY=600\nSCREEN=0\nWINDOW=48234511\n",
"passed": true
}

View File

@ -0,0 +1,8 @@
{
"host": "192.168.1.72",
"target": [
400,
600
],
"readback": "X=1500\nY=900\nSCREEN=0\nWINDOW=48234511\n"
}

View File

@ -0,0 +1 @@
{"pid": 299142, "args": "/home/armbian/vdi-build/rkmpp-experiment/build/moonlight/app/moonlight stream 192.168.1.70 Desktop --resolution 2560x1440 --fps 45 --bitrate 30000 --display-mode fullscreen --video-codec H.264 --video-decoder hardware --absolute-mouse --capture-system-keys always --keep-awake --no-vsync --no-frame-pacing --audio-on-host ", "sha256": "5d4330f703d7f8e053bc3795ca42bdaf231c9e9dd8ebb00a612013adbcccee03", "native": false}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

View File

@ -0,0 +1,9 @@
盒子过夜观察汇总
记录启用时间:2026-11-04T19:35:05+08:00
最近记录时间:2026-11-04T19:40:14+08:00
记录启用后重启次数:0
当前启动编号:afb6a02f-ba7c-478a-8704-c78a993d23c6
当前开机时长(秒):38110.05
最近一次重启判断:观察期间尚未发现重启
详细数据见同目录 overnight-health-YYYYMMDD.log;每分钟更新。
服务重启不计为盒子重启;无故障证据时不推断具体断电原因。

View File

@ -0,0 +1,15 @@
backup=/home/armbian/vdi-terminal/backups/overnight-observer-20261104-193449
active
enabled
盒子过夜观察汇总
记录启用时间:2026-11-04T19:35:05+08:00
最近记录时间:2026-11-04T19:35:05+08:00
记录启用后重启次数:0
当前启动编号:afb6a02f-ba7c-478a-8704-c78a993d23c6
当前开机时长(秒):37801.74
最近一次重启判断:观察期间尚未发现重启
详细数据见同目录 overnight-health-YYYYMMDD.log;每分钟更新。
服务重启不计为盒子重启;无故障证据时不推断具体断电原因。
11月 04 19:35:06 rk3528pro-ddr4 sshd[17776]: error: connect_to 127.0.0.1 port 40001: failed.
11月 04 19:35:07 rk3528pro-ddr4 sudo[147206]: armbian : PWD=/home/armbian ; USER=root ; COMMAND=/usr/bin/journalctl --directory /var/log/journal -n 3 --no-pager
11月 04 19:35:07 rk3528pro-ddr4 sudo[147206]: pam_unix(sudo:session): session opened for user root(uid=0) by armbian(uid=1000)

View File

@ -0,0 +1,15 @@
backup=/home/armbian/vdi-terminal/backups/overnight-observer-20261104-193726
active
enabled
盒子过夜观察汇总
记录启用时间:2026-11-04T19:35:05+08:00
最近记录时间:2026-11-04T19:37:45+08:00
记录启用后重启次数:0
当前启动编号:afb6a02f-ba7c-478a-8704-c78a993d23c6
当前开机时长(秒):37961.73
最近一次重启判断:观察期间尚未发现重启
详细数据见同目录 overnight-health-YYYYMMDD.log;每分钟更新。
服务重启不计为盒子重启;无故障证据时不推断具体断电原因。
11月 04 19:37:46 rk3528pro-ddr4 sshd[17776]: error: connect_to 127.0.0.1 port 40001: failed.
11月 04 19:37:47 rk3528pro-ddr4 sudo[149828]: armbian : PWD=/home/armbian ; USER=root ; COMMAND=/usr/bin/journalctl --directory /var/log/journal -n 3 --no-pager
11月 04 19:37:47 rk3528pro-ddr4 sudo[149828]: pam_unix(sudo:session): session opened for user root(uid=0) by armbian(uid=1000)

View File

@ -0,0 +1 @@
backup=/home/armbian/vdi-terminal/backups/overnight-observer-20261104-193329

View File

@ -0,0 +1,24 @@
NRestarts=0
MemoryCurrent=8458240
CPUUsageNSec=1036254000
ActiveState=active
SubState=running
UnitFileState=enabled
盒子过夜观察汇总
记录启用时间:2026-11-04T19:35:05+08:00
最近记录时间:2026-11-04T19:40:14+08:00
记录启用后重启次数:0
当前启动编号:afb6a02f-ba7c-478a-8704-c78a993d23c6
当前开机时长(秒):38110.05
最近一次重启判断:观察期间尚未发现重启
详细数据见同目录 overnight-health-YYYYMMDD.log;每分钟更新。
服务重启不计为盒子重启;无故障证据时不推断具体断电原因。
{"time": "2026-11-04T19:40:14+08:00", "event": "boot_evidence", "kernel": "6.1.115-vendor-rk35xx", "journal": {"code": 0, "text": "IDX BOOT ID FIRST ENTRY LAST ENTRY\n 0 afb6a02fba7c478a8704c78a993d23c6 Wed 2026-11-04 16:23:46 CST Wed 2026-11-04 19:40:13 CST\n", "error": ""}, "pstore": {"captured_at": "2026-11-04T19:40:13.613122+08:00", "boot_id": "afb6a02f-ba7c-478a-8704-c78a993d23c6", "sources": {"/sys/fs/pstore": {}, "/var/lib/systemd/pstore": {"console-ramoops-0": {"mtime": 1751465072.0266666, "text": "[ 2674.563324] reboot: Restarting system\n", "truncated": false}}}}, "watchdog_bootstatus": {}}
{"time": "2026-11-04T19:40:14+08:00", "event": "sample", "boot_id": "afb6a02f-ba7c-478a-8704-c78a993d23c6", "reboots": 0, "uptime_seconds": 38110.05, "load": ["1.52", "1.34", "1.21"], "memory": {"MemTotal": "4014636 kB", "MemAvailable": "3039748 kB", "SwapFree": "2007316 kB"}, "temperatures_c": {"thermal_zone0": 62.704}, "processes": [{"pid": 2162, "name": "vdi-kiosk-monitor"}, {"pid": 92843, "name": "kiosk-shell"}, {"pid": 137139, "name": "moonlight", "host": "192.168.1.70", "resolution": "2560x1440", "fps": "45"}], "display": {"code": 0, "text": "Screen 0: minimum 320 x 200, current 2560 x 1440, maximum 16384 x 16384\nHDMI-1 disconnected primary 2560x1440+0+0 (normal left inverted right x axis y axis) 0mm x 0mm", "error": ""}, "network": {"wlan0": {"operstate": "up", "rx_errors": "0", "tx_errors": "0"}, "end0": {"operstate": "down", "rx_errors": "0", "tx_errors": "0"}}, "root_available_mb": 22944}
137139 /home/armbian/vdi-build/rkmpp-experiment/build/moonlight/app/moonlight stream 192.168.1.70 Desktop --resolution 2560x1440 --fps 45 --bitrate 30000 --display-mode fullscreen --video-codec H.264 --video-decoder hardware --absolute-mouse --keep-awake --no-vsync --no-frame-pacing --audio-on-host
active
root:root 755 /usr/local/libexec/vdi-observer-pstore
root:systemd-journal 640 /var/lib/vdi-observer/pstore.json
armbian:armbian 600 /home/armbian/vdi-terminal/state/overnight-state.json
TARGET SOURCE FSTYPE OPTIONS
/var/log.hdd /dev/mmcblk1p2[/var/log] ext4 rw,relatime,errors=remount-ro,commit=120

View File

@ -0,0 +1,16 @@
test_baseline_zero_reboots (test_overnight_observer.RebootEvidence.test_baseline_zero_reboots) ... ok
test_boot_change_preserves_last_heartbeat (test_overnight_observer.RebootEvidence.test_boot_change_preserves_last_heartbeat) ... ok
test_daily_rollover_uses_each_event_date (test_overnight_observer.RebootEvidence.test_daily_rollover_uses_each_event_date) ... ok
test_durable_state_and_chinese_report (test_overnight_observer.RebootEvidence.test_durable_state_and_chinese_report) ... ok
test_invalid_state_preserved (test_overnight_observer.RebootEvidence.test_invalid_state_preserved) ... ok
test_multiple_boots_and_history_bound (test_overnight_observer.RebootEvidence.test_multiple_boots_and_history_bound) ... ok
test_only_changed_pstore_is_a_new_clue (test_overnight_observer.RebootEvidence.test_only_changed_pstore_is_a_new_clue) ... ok
test_oom_is_a_clue_not_a_proven_reboot_cause (test_overnight_observer.RebootEvidence.test_oom_is_a_clue_not_a_proven_reboot_cause) ... ok
test_orderly_shutdown_requires_real_markers (test_overnight_observer.RebootEvidence.test_orderly_shutdown_requires_real_markers) ... ok
test_service_restart_is_not_box_reboot (test_overnight_observer.RebootEvidence.test_service_restart_is_not_box_reboot) ... ok
test_unknown_reason_is_not_reported_as_power_loss (test_overnight_observer.RebootEvidence.test_unknown_reason_is_not_reported_as_power_loss) ... ok
----------------------------------------------------------------------
Ran 11 tests in 0.053s
OK

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

View File

@ -0,0 +1,66 @@
# To display the perf.data header info, please use --header/--header-only options.
#
#
# Total Lost Samples: 0
#
# Samples: 870 of event 'cpu-clock'
# Event count (approx.): 8787878700
#
# Overhead Command Shared Object Symbol IPC [IPC Coverage]
# ........ ............... ................. ........................................... ....................
#
4.48% Xorg libc.so.6 [.] __memmove_avx_unaligned_erms - -
|
---__memmove_avx_unaligned_erms
0x74d4c87b443d
0x74d4c880cc9a
0x74d4c87b4d39
0x74d4c87b50d4
0x74d4cb12577a
0x74d4cb1178b1
0x59b1b67f953d
0x59b1b675babf
0x59b1b675fed9
__libc_start_call_main
__libc_start_main_impl (inlined)
_start
4.37% session::video libc.so.6 [.] __memmove_avx_unaligned_erms - -
|
---__memmove_avx_unaligned_erms
|
--4.25%--0x556749141015
0x556749141d3c
0x556749129542
0x556749129747
0x55674905a9fc
0x55674905b4b4
0x556748d841f8
0x556748d89a5f
0x556748d8a838
0x556748d8aeed
0x556748d717dc
0x55674a019223
start_thread
__clone3 (inlined)
3.56% video::capture libc.so.6 [.] __memmove_avx_unaligned_erms - -
2.99% session::video sunshine [.] 0x000000000065ff08 - -
|
--1.49%--0x556749090f08
0x55674905dd70
0x55674905907f
0x55674905a5b3
0x55674905b86c
0x556749156dbd
0x55674905abca
0x55674905b51c
0x556748d841f8
0x556748d89a5f
0x556748d8a838
0x556748d8aeed
0x556748d717dc
0x55674a019223
start_thread
__clone3 (inlined)

View File

@ -0,0 +1,457 @@
{
"host": "192.168.1.72",
"pid": 40222,
"shapes": [
{
"name": "default",
"source": {
"w": 24,
"h": 24,
"hx": 3,
"hy": 1,
"x": 181,
"y": 599,
"sw": 2560,
"sh": 1440
},
"local": {
"x": 182,
"y": 600,
"w": 24,
"h": 24,
"hx": 3,
"hy": 1
},
"geometry_matches": true,
"max_pixel_difference": 0,
"visible_pixels": 254,
"video": {
"reference": 15726330,
"nonuniform_pixels": 0
}
},
{
"name": "text",
"source": {
"w": 24,
"h": 24,
"hx": 11,
"hy": 12,
"x": 547,
"y": 599,
"sw": 2560,
"sh": 1440
},
"local": {
"x": 548,
"y": 600,
"w": 24,
"h": 24,
"hx": 11,
"hy": 12
},
"geometry_matches": true,
"max_pixel_difference": 0,
"visible_pixels": 240,
"video": {
"reference": 15791866,
"nonuniform_pixels": 0
}
},
{
"name": "ew-resize",
"source": {
"w": 24,
"h": 24,
"hx": 12,
"hy": 12,
"x": 913,
"y": 599,
"sw": 2560,
"sh": 1440
},
"local": {
"x": 914,
"y": 600,
"w": 24,
"h": 24,
"hx": 12,
"hy": 12
},
"geometry_matches": true,
"max_pixel_difference": 0,
"visible_pixels": 301,
"video": {
"reference": 15726330,
"nonuniform_pixels": 0
}
},
{
"name": "wait",
"source": {
"w": 24,
"h": 24,
"hx": 11,
"hy": 11,
"x": 1280,
"y": 599,
"sw": 2560,
"sh": 1440
},
"local": {
"x": 1280,
"y": 600,
"w": 24,
"h": 24,
"hx": 11,
"hy": 11
},
"geometry_matches": true,
"max_pixel_difference": 0,
"visible_pixels": 433,
"video": {
"reference": 15791866,
"nonuniform_pixels": 0
}
},
{
"name": "none",
"source": {
"w": 1,
"h": 1,
"hx": 0,
"hy": 0,
"x": 1645,
"y": 599,
"sw": 2560,
"sh": 1440
},
"local": {
"x": 1645,
"y": 600,
"w": 1,
"h": 1,
"hx": 0,
"hy": 0
},
"geometry_matches": true,
"max_pixel_difference": 0,
"visible_pixels": 0,
"video": {
"reference": 15726074,
"nonuniform_pixels": 0
}
},
{
"name": "crosshair",
"source": {
"w": 24,
"h": 24,
"hx": 11,
"hy": 11,
"x": 2011,
"y": 599,
"sw": 2560,
"sh": 1440
},
"local": {
"x": 2011,
"y": 600,
"w": 24,
"h": 24,
"hx": 11,
"hy": 11
},
"geometry_matches": true,
"max_pixel_difference": 0,
"visible_pixels": 281,
"video": {
"reference": 15726074,
"nonuniform_pixels": 0
}
},
{
"name": "custom",
"source": {
"w": 24,
"h": 24,
"hx": 7,
"hy": 9,
"x": 2377,
"y": 599,
"sw": 2560,
"sh": 1440
},
"local": {
"x": 2377,
"y": 600,
"w": 24,
"h": 24,
"hx": 7,
"hy": 9
},
"geometry_matches": true,
"max_pixel_difference": 0,
"visible_pixels": 576,
"video": {
"reference": 15726074,
"nonuniform_pixels": 0
}
}
],
"paused_client": {
"position": [
350,
700
],
"elapsed_ms": 255.453621,
"same_shape": true,
"steps": [
{
"target": [
250,
650
],
"position": [
250,
650
],
"query_ms": 8.327664
},
{
"target": [
280,
670
],
"position": [
280,
670
],
"query_ms": 2.16409
},
{
"target": [
300,
690
],
"position": [
300,
690
],
"query_ms": 2.175173
},
{
"target": [
350,
700
],
"position": [
350,
700
],
"query_ms": 2.244587
}
]
},
"clicks": [
{
"seq": 1,
"x": 182,
"y": 750,
"seen": 1,
"decoded_ms": 160.545435
},
{
"seq": 2,
"x": 548,
"y": 850,
"seen": 2,
"decoded_ms": 135.850311
},
{
"seq": 3,
"x": 914,
"y": 750,
"seen": 3,
"decoded_ms": 138.104231
},
{
"seq": 4,
"x": 1280,
"y": 850,
"seen": 4,
"decoded_ms": 160.524437
},
{
"seq": 5,
"x": 1645,
"y": 750,
"seen": 5,
"decoded_ms": 151.550171
},
{
"seq": 6,
"x": 2011,
"y": 850,
"seen": 6,
"decoded_ms": 133.429855
},
{
"seq": 7,
"x": 2377,
"y": 750,
"seen": 7,
"decoded_ms": 131.276556
},
{
"seq": 8,
"x": 182,
"y": 850,
"seen": 8,
"decoded_ms": 132.176608
},
{
"seq": 9,
"x": 548,
"y": 750,
"seen": 9,
"decoded_ms": 119.835754
},
{
"seq": 10,
"x": 914,
"y": 850,
"seen": 10,
"decoded_ms": 146.008994
},
{
"seq": 11,
"x": 1280,
"y": 750,
"seen": 11,
"decoded_ms": 147.967174
},
{
"seq": 12,
"x": 1645,
"y": 850,
"seen": 12,
"decoded_ms": 153.74022
},
{
"seq": 13,
"x": 2011,
"y": 750,
"seen": 13,
"decoded_ms": 122.392997
},
{
"seq": 14,
"x": 2377,
"y": 850,
"seen": 14,
"decoded_ms": 211.141978
},
{
"seq": 15,
"x": 182,
"y": 750,
"seen": 15,
"decoded_ms": 161.193497
},
{
"seq": 16,
"x": 548,
"y": 850,
"seen": 16,
"decoded_ms": 204.8912
},
{
"seq": 17,
"x": 914,
"y": 750,
"seen": 17,
"decoded_ms": 135.677069
},
{
"seq": 18,
"x": 1280,
"y": 850,
"seen": 18,
"decoded_ms": 210.982152
},
{
"seq": 19,
"x": 1645,
"y": 750,
"seen": 19,
"decoded_ms": 126.295068
},
{
"seq": 20,
"x": 2011,
"y": 850,
"seen": 20,
"decoded_ms": 164.353012
},
{
"seq": 21,
"x": 2377,
"y": 750,
"seen": 21,
"decoded_ms": 201.544444
},
{
"seq": 22,
"x": 182,
"y": 850,
"seen": 22,
"decoded_ms": 201.614734
},
{
"seq": 23,
"x": 548,
"y": 750,
"seen": 23,
"decoded_ms": 181.206665
},
{
"seq": 24,
"x": 914,
"y": 850,
"seen": 24,
"decoded_ms": 208.485283
},
{
"seq": 25,
"x": 1280,
"y": 750,
"seen": 25,
"decoded_ms": 159.208195
},
{
"seq": 26,
"x": 1645,
"y": 850,
"seen": 26,
"decoded_ms": 164.559797
},
{
"seq": 27,
"x": 2011,
"y": 750,
"seen": 27,
"decoded_ms": 177.386552
},
{
"seq": 28,
"x": 2377,
"y": 850,
"seen": 28,
"decoded_ms": 156.205302
}
],
"p50_ms": 157.7067485,
"p95_ms": 210.982152,
"method": "XTest click-down to unique decoded sequence; excludes USB and scanout"
}

View File

@ -0,0 +1,351 @@
{
"pid": 333281,
"sent": 300,
"elapsed": 6.029666734000784,
"frames": [
{
"seq": 0,
"t": 104512.239431477,
"age_ms": null
},
{
"seq": 1,
"t": 104512.383192034,
"age_ms": 144.5594520046143
},
{
"seq": 4,
"t": 104512.466121068,
"age_ms": 177.34973100596108
},
{
"seq": 7,
"t": 104512.566346951,
"age_ms": 227.791242999956
},
{
"seq": 13,
"t": 104512.599408487,
"age_ms": 160.80744100327138
},
{
"seq": 16,
"t": 104512.699652746,
"age_ms": 210.9896559995832
},
{
"seq": 21,
"t": 104512.767006974,
"age_ms": 194.81691799592227
},
{
"seq": 24,
"t": 104512.799459786,
"age_ms": 177.2593119967496
},
{
"seq": 31,
"t": 104512.933637389,
"age_ms": 167.96715700183995
},
{
"seq": 35,
"t": 104513.017511149,
"age_ms": 212.23217499209568
},
{
"seq": 38,
"t": 104513.077507896,
"age_ms": 222.03037499275524
},
{
"seq": 42,
"t": 104513.132969697,
"age_ms": 195.8896810101578
},
{
"seq": 52,
"t": 104513.260996184,
"age_ms": 172.20925701258238
},
{
"seq": 55,
"t": 104513.366535776,
"age_ms": 227.11804301070515
},
{
"seq": 63,
"t": 104513.465344117,
"age_ms": 193.3882849989459
},
{
"seq": 66,
"t": 104513.516390558,
"age_ms": 194.36976799624972
},
{
"seq": 70,
"t": 104513.54974114,
"age_ms": 161.18718999496195
},
{
"seq": 71,
"t": 104513.599913142,
"age_ms": 194.61827399209142
},
{
"seq": 73,
"t": 104513.716206753,
"age_ms": 233.85862799477763
},
{
"seq": 81,
"t": 104513.819435121,
"age_ms": 247.10120899544563
},
{
"seq": 84,
"t": 104513.85580132,
"age_ms": 206.37856698886026
},
{
"seq": 91,
"t": 104513.967067338,
"age_ms": 228.50377700524405
},
{
"seq": 96,
"t": 104513.99077197,
"age_ms": 153.5435719997622
},
{
"seq": 99,
"t": 104514.04972977,
"age_ms": 177.30712000047788
},
{
"seq": 102,
"t": 104514.099714514,
"age_ms": 177.70408900105394
},
{
"seq": 105,
"t": 104514.149824094,
"age_ms": 177.65946200233884
},
{
"seq": 107,
"t": 104514.216565505,
"age_ms": 211.3130910001928
},
{
"seq": 111,
"t": 104514.299878954,
"age_ms": 227.67745799501427
},
{
"seq": 117,
"t": 104514.34970561,
"age_ms": 177.40133100596722
},
{
"seq": 120,
"t": 104514.433450736,
"age_ms": 210.84291400620714
},
{
"seq": 125,
"t": 104514.499795178,
"age_ms": 194.53979899117257
},
{
"seq": 131,
"t": 104514.599880169,
"age_ms": 194.1547900059959
},
{
"seq": 134,
"t": 104514.633181748,
"age_ms": 177.9598869907204
},
{
"seq": 137,
"t": 104514.683211993,
"age_ms": 177.33920500904787
},
{
"seq": 139,
"t": 104514.766731654,
"age_ms": 228.18322000966873
},
{
"seq": 146,
"t": 104514.8164396,
"age_ms": 161.06146700622048
},
{
"seq": 148,
"t": 104514.916416666,
"age_ms": 227.66141100146342
},
{
"seq": 154,
"t": 104514.967151008,
"age_ms": 177.8076239861548
},
{
"seq": 156,
"t": 104515.050657538,
"age_ms": 228.57900700182654
},
{
"seq": 162,
"t": 104515.133192794,
"age_ms": 211.316576009267
},
{
"seq": 167,
"t": 104515.233260569,
"age_ms": 227.95861400663853
},
{
"seq": 173,
"t": 104515.333358094,
"age_ms": 227.58614699705504
},
{
"seq": 181,
"t": 104515.481023841,
"age_ms": 242.47522400401067
},
{
"seq": 187,
"t": 104515.516803771,
"age_ms": 177.49932099832222
},
{
"seq": 190,
"t": 104515.586970887,
"age_ms": 198.40358999499585
},
{
"seq": 195,
"t": 104515.666858619,
"age_ms": 183.13621100969613
},
{
"seq": 198,
"t": 104515.749984223,
"age_ms": 228.0977430054918
},
{
"seq": 204,
"t": 104515.799814376,
"age_ms": 177.78516100952402
},
{
"seq": 206,
"t": 104515.902322874,
"age_ms": 234.46643899660558
},
{
"seq": 212,
"t": 104515.933265681,
"age_ms": 177.80323899933137
},
{
"seq": 218,
"t": 104516.050162448,
"age_ms": 194.68852499267086
},
{
"seq": 221,
"t": 104516.20082805,
"age_ms": 295.25534600543324
},
{
"seq": 227,
"t": 104516.233473358,
"age_ms": 228.16218600200955
},
{
"seq": 232,
"t": 104516.266585927,
"age_ms": 177.10263100161683
},
{
"seq": 234,
"t": 104516.383193354,
"age_ms": 261.2750469997991
},
{
"seq": 244,
"t": 104516.489367314,
"age_ms": 190.34345900581684
},
{
"seq": 248,
"t": 104516.549978313,
"age_ms": 194.10167701425962
},
{
"seq": 251,
"t": 104516.70027524,
"age_ms": 295.0441739958478
},
{
"seq": 258,
"t": 104516.733220096,
"age_ms": 210.86271599051543
},
{
"seq": 261,
"t": 104516.866613062,
"age_ms": 294.4065740011865
},
{
"seq": 268,
"t": 104516.95033221,
"age_ms": 251.20849900122266
},
{
"seq": 277,
"t": 104517.049994544,
"age_ms": 210.87874499789905
},
{
"seq": 279,
"t": 104517.241374306,
"age_ms": 369.3924030085327
},
{
"seq": 290,
"t": 104517.340214702,
"age_ms": 284.98286299873143
},
{
"seq": 296,
"t": 104517.37882853,
"age_ms": 223.49597098946106
},
{
"seq": 300,
"t": 104517.463400824,
"age_ms": 241.15040600008797
}
],
"fresh_video_updates_per_second": 12.4,
"motion_to_decoded_marker_ms": {
"p50": 206.37856698886026,
"p95": 294.4065740011865,
"maximum": 369.3924030085327
},
"frame_gap_ms": {
"p50": 83.12560399645008,
"p95": 147.66574700479396,
"maximum": 191.3797620072728
},
"last_motion_seen": 300,
"release_visible": true,
"method": "60Hz XTest held drag to first observed unique decoded marker; no USB/scanout"
}

View File

@ -0,0 +1,421 @@
{
"pid": 354371,
"sent": 300,
"elapsed": 5.965802310995059,
"frames": [
{
"seq": 0,
"t": 106125.563317136,
"age_ms": null
},
{
"seq": 1,
"t": 106125.714375512,
"age_ms": 151.8925330019556
},
{
"seq": 4,
"t": 106125.749306594,
"age_ms": 136.80098700569943
},
{
"seq": 6,
"t": 106125.821857897,
"age_ms": 176.10760599200148
},
{
"seq": 10,
"t": 106125.878653244,
"age_ms": 163.65532200143207
},
{
"seq": 14,
"t": 106125.941070989,
"age_ms": 161.94938200351316
},
{
"seq": 15,
"t": 106125.973142894,
"age_ms": 177.1826769981999
},
{
"seq": 19,
"t": 106126.037015165,
"age_ms": 174.32379099773243
},
{
"seq": 23,
"t": 106126.091339831,
"age_ms": 161.95229899312835
},
{
"seq": 27,
"t": 106126.161715324,
"age_ms": 165.82442399521824
},
{
"seq": 30,
"t": 106126.243443236,
"age_ms": 197.618082005647
},
{
"seq": 35,
"t": 106126.292928912,
"age_ms": 163.7372799887089
},
{
"seq": 38,
"t": 106126.393147834,
"age_ms": 214.06423900043592
},
{
"seq": 40,
"t": 106126.460498776,
"age_ms": 246.99188499653246
},
{
"seq": 45,
"t": 106126.506483739,
"age_ms": 210.74756600137334
},
{
"seq": 49,
"t": 106126.558515346,
"age_ms": 195.6083539989777
},
{
"seq": 54,
"t": 106126.611094405,
"age_ms": 165.05193199554924
},
{
"seq": 56,
"t": 106126.660565498,
"age_ms": 180.8705959992949
},
{
"seq": 60,
"t": 106126.757307082,
"age_ms": 211.40385000035167
},
{
"seq": 65,
"t": 106126.816025658,
"age_ms": 186.94115499965847
},
{
"seq": 70,
"t": 106126.877746619,
"age_ms": 165.35134500009008
},
{
"seq": 71,
"t": 106126.921906811,
"age_ms": 192.67438499082346
},
{
"seq": 74,
"t": 106126.96888068,
"age_ms": 189.77524900401477
},
{
"seq": 77,
"t": 106127.017848945,
"age_ms": 188.69784400158096
},
{
"seq": 81,
"t": 106127.074083131,
"age_ms": 178.1332079990534
},
{
"seq": 84,
"t": 106127.171377709,
"age_ms": 225.33719999773894
},
{
"seq": 90,
"t": 106127.218476994,
"age_ms": 172.71351600356866
},
{
"seq": 94,
"t": 106127.282473805,
"age_ms": 169.98646200227086
},
{
"seq": 98,
"t": 106127.368655127,
"age_ms": 189.55737599753775
},
{
"seq": 102,
"t": 106127.432980935,
"age_ms": 187.2170679998817
},
{
"seq": 106,
"t": 106127.515914292,
"age_ms": 203.32652000070084
},
{
"seq": 111,
"t": 106127.567239198,
"age_ms": 171.3380310102366
},
{
"seq": 115,
"t": 106127.631536423,
"age_ms": 169.0268889942672
},
{
"seq": 120,
"t": 106127.707620062,
"age_ms": 161.641385013354
},
{
"seq": 127,
"t": 106127.815789315,
"age_ms": 153.22135100723244
},
{
"seq": 130,
"t": 106127.874282727,
"age_ms": 161.84380000049714
},
{
"seq": 133,
"t": 106127.931842816,
"age_ms": 169.38884400587995
},
{
"seq": 138,
"t": 106128.013466603,
"age_ms": 167.70273601287045
},
{
"seq": 141,
"t": 106128.044233606,
"age_ms": 148.4322359901853
},
{
"seq": 145,
"t": 106128.137089648,
"age_ms": 174.65745299705304
},
{
"seq": 149,
"t": 106128.197354332,
"age_ms": 168.1769810093101
},
{
"seq": 153,
"t": 106128.277546344,
"age_ms": 181.73671000113245
},
{
"seq": 154,
"t": 106128.331110642,
"age_ms": 218.22410900495015
},
{
"seq": 160,
"t": 106128.405224969,
"age_ms": 192.82984000165015
},
{
"seq": 164,
"t": 106128.511843363,
"age_ms": 232.710953001515
},
{
"seq": 165,
"t": 106128.549592498,
"age_ms": 253.84868300170638
},
{
"seq": 171,
"t": 106128.594834178,
"age_ms": 198.86777600913774
},
{
"seq": 177,
"t": 106128.66914042,
"age_ms": 173.21013599575963
},
{
"seq": 180,
"t": 106128.731889494,
"age_ms": 185.88008199003525
},
{
"seq": 183,
"t": 106128.790431905,
"age_ms": 194.43107300321572
},
{
"seq": 187,
"t": 106128.853490435,
"age_ms": 190.642948000459
},
{
"seq": 191,
"t": 106128.922401651,
"age_ms": 192.91196500125807
},
{
"seq": 192,
"t": 106129.000728766,
"age_ms": 254.81375599338207
},
{
"seq": 197,
"t": 106129.046423399,
"age_ms": 216.86658200633246
},
{
"seq": 201,
"t": 106129.163282474,
"age_ms": 267.04729099583346
},
{
"seq": 207,
"t": 106129.245888292,
"age_ms": 249.72814400098287
},
{
"seq": 210,
"t": 106129.277642284,
"age_ms": 230.3109369968297
},
{
"seq": 213,
"t": 106129.322393093,
"age_ms": 226.60680899571162
},
{
"seq": 218,
"t": 106129.408518708,
"age_ms": 229.4254459993681
},
{
"seq": 224,
"t": 106129.495256232,
"age_ms": 216.1567969887983
},
{
"seq": 228,
"t": 106129.536706286,
"age_ms": 190.93461100419518
},
{
"seq": 230,
"t": 106129.586514541,
"age_ms": 207.26135199947748
},
{
"seq": 235,
"t": 106129.648752037,
"age_ms": 186.0731630004011
},
{
"seq": 238,
"t": 106129.708485019,
"age_ms": 195.9757230069954
},
{
"seq": 243,
"t": 106129.772917867,
"age_ms": 177.09225999715272
},
{
"seq": 246,
"t": 106129.827104283,
"age_ms": 181.23534000187647
},
{
"seq": 250,
"t": 106129.91438226,
"age_ms": 201.94811699911952
},
{
"seq": 256,
"t": 106129.970676528,
"age_ms": 158.1014629919082
},
{
"seq": 258,
"t": 106130.02146594,
"age_ms": 175.6849829980638
},
{
"seq": 262,
"t": 106130.103489306,
"age_ms": 190.86286099627614
},
{
"seq": 263,
"t": 106130.151932284,
"age_ms": 222.61918500589672
},
{
"seq": 270,
"t": 106130.214829523,
"age_ms": 169.0382619999582
},
{
"seq": 273,
"t": 106130.266302302,
"age_ms": 162.1599609934492
},
{
"seq": 276,
"t": 106130.326758901,
"age_ms": 180.80601100518834
},
{
"seq": 281,
"t": 106130.390516547,
"age_ms": 161.41096901264973
},
{
"seq": 284,
"t": 106130.443561976,
"age_ms": 164.49706100684125
},
{
"seq": 289,
"t": 106130.503064543,
"age_ms": 140.13586498913355
},
{
"seq": 292,
"t": 106130.579826008,
"age_ms": 167.37519700836856
},
{
"seq": 295,
"t": 106130.61713619,
"age_ms": 154.48571099841502
},
{
"seq": 300,
"t": 106130.723035424,
"age_ms": 177.01467699953355
}
],
"fresh_video_updates_per_second": 15.4,
"motion_to_decoded_marker_ms": {
"p50": 181.23534000187647,
"p95": 249.72814400098287,
"maximum": 267.04729099583346
},
"frame_gap_ms": {
"p50": 61.72096099180635,
"p95": 106.61839399836026,
"maximum": 151.05837601004168
},
"last_motion_seen": 300,
"release_visible": true,
"method": "60Hz XTest held drag to first observed unique decoded marker; no USB/scanout"
}

View File

@ -0,0 +1,391 @@
{
"pid": 34534,
"sent": 300,
"elapsed": 6.0406107769999835,
"frames": [
{
"seq": 0,
"t": 3431.244445763,
"age_ms": null
},
{
"seq": 4,
"t": 3431.461263847,
"age_ms": 172.3552179996659
},
{
"seq": 6,
"t": 3431.493808798,
"age_ms": 172.23155600004247
},
{
"seq": 9,
"t": 3431.577781054,
"age_ms": 206.21495099976528
},
{
"seq": 14,
"t": 3431.602662177,
"age_ms": 140.2410420000706
},
{
"seq": 18,
"t": 3431.710441389,
"age_ms": 188.83929000003263
},
{
"seq": 23,
"t": 3431.793798835,
"age_ms": 182.29074999999284
},
{
"seq": 27,
"t": 3431.860748916,
"age_ms": 189.01282399974662
},
{
"seq": 31,
"t": 3431.943923787,
"age_ms": 205.59285100034685
},
{
"seq": 36,
"t": 3431.990334328,
"age_ms": 168.25775099960083
},
{
"seq": 39,
"t": 3432.077464922,
"age_ms": 205.77047000006132
},
{
"seq": 45,
"t": 3432.143944271,
"age_ms": 171.88419499962038
},
{
"seq": 46,
"t": 3432.193929341,
"age_ms": 201.2387290001243
},
{
"seq": 51,
"t": 3432.277223499,
"age_ms": 198.89731899957042
},
{
"seq": 56,
"t": 3432.326931788,
"age_ms": 171.98773299969616
},
{
"seq": 60,
"t": 3432.443708278,
"age_ms": 222.12767100018027
},
{
"seq": 61,
"t": 3432.493954963,
"age_ms": 255.37493000001632
},
{
"seq": 67,
"t": 3432.523106796,
"age_ms": 184.65374399966095
},
{
"seq": 71,
"t": 3432.593761192,
"age_ms": 188.33385199968689
},
{
"seq": 73,
"t": 3432.644055417,
"age_ms": 199.60400099989783
},
{
"seq": 76,
"t": 3432.710660178,
"age_ms": 215.88566300033563
},
{
"seq": 80,
"t": 3432.777038614,
"age_ms": 222.14312899996003
},
{
"seq": 83,
"t": 3432.843847534,
"age_ms": 238.76107099977162
},
{
"seq": 87,
"t": 3432.894341543,
"age_ms": 222.06788299990876
},
{
"seq": 91,
"t": 3432.944063248,
"age_ms": 205.58497799993347
},
{
"seq": 95,
"t": 3432.976939229,
"age_ms": 171.92502799980502
},
{
"seq": 98,
"t": 3433.060685162,
"age_ms": 205.7812630000626
},
{
"seq": 101,
"t": 3433.144084025,
"age_ms": 239.19068100030927
},
{
"seq": 107,
"t": 3433.194192174,
"age_ms": 189.06940799979566
},
{
"seq": 112,
"t": 3433.277305798,
"age_ms": 189.0250759997798
},
{
"seq": 116,
"t": 3433.343900936,
"age_ms": 188.48463999984233
},
{
"seq": 120,
"t": 3433.394165412,
"age_ms": 172.6255849998779
},
{
"seq": 125,
"t": 3433.493910977,
"age_ms": 188.51992999998402
},
{
"seq": 130,
"t": 3433.577120848,
"age_ms": 181.59982199995284
},
{
"seq": 131,
"t": 3433.610360523,
"age_ms": 183.59445299984145
},
{
"seq": 138,
"t": 3433.693979586,
"age_ms": 172.39284399965982
},
{
"seq": 142,
"t": 3433.794087387,
"age_ms": 205.4382760002227
},
{
"seq": 146,
"t": 3433.860823978,
"age_ms": 205.23615999991307
},
{
"seq": 152,
"t": 3433.944030349,
"age_ms": 189.14144800010035
},
{
"seq": 156,
"t": 3433.993801053,
"age_ms": 172.22631000004185
},
{
"seq": 161,
"t": 3434.060665388,
"age_ms": 155.32808699981615
},
{
"seq": 164,
"t": 3434.160480952,
"age_ms": 204.94625599985739
},
{
"seq": 168,
"t": 3434.227263041,
"age_ms": 205.68851899997753
},
{
"seq": 172,
"t": 3434.310492745,
"age_ms": 222.25396299973
},
{
"seq": 175,
"t": 3434.377123464,
"age_ms": 215.89412399998764
},
{
"seq": 182,
"t": 3434.477372428,
"age_ms": 222.4764959996719
},
{
"seq": 187,
"t": 3434.560593674,
"age_ms": 222.19475699967006
},
{
"seq": 192,
"t": 3434.6106537,
"age_ms": 189.07553500002905
},
{
"seq": 197,
"t": 3434.710504554,
"age_ms": 205.62785500032987
},
{
"seq": 198,
"t": 3434.760702824,
"age_ms": 238.46066999976756
},
{
"seq": 202,
"t": 3434.827379917,
"age_ms": 217.65514000026087
},
{
"seq": 209,
"t": 3434.933724479,
"age_ms": 222.29071099991415
},
{
"seq": 213,
"t": 3435.027398947,
"age_ms": 255.79841900025713
},
{
"seq": 217,
"t": 3435.077319854,
"age_ms": 239.01306700008718
},
{
"seq": 223,
"t": 3435.144122359,
"age_ms": 199.344432000089
},
{
"seq": 229,
"t": 3435.260626155,
"age_ms": 222.42049999977098
},
{
"seq": 232,
"t": 3435.294209983,
"age_ms": 205.85418000018763
},
{
"seq": 237,
"t": 3435.394271997,
"age_ms": 222.29362999996738
},
{
"seq": 241,
"t": 3435.443899206,
"age_ms": 184.16872499983583
},
{
"seq": 246,
"t": 3435.527625017,
"age_ms": 205.94575999984954
},
{
"seq": 247,
"t": 3435.547092141,
"age_ms": 208.79844199998843
},
{
"seq": 253,
"t": 3435.660602676,
"age_ms": 215.84337800004505
},
{
"seq": 256,
"t": 3435.727331976,
"age_ms": 238.4364640001877
},
{
"seq": 258,
"t": 3435.777296048,
"age_ms": 248.30200099995636
},
{
"seq": 264,
"t": 3435.827309993,
"age_ms": 205.18891500023528
},
{
"seq": 266,
"t": 3435.927812406,
"age_ms": 266.4240100002644
},
{
"seq": 268,
"t": 3435.977364952,
"age_ms": 288.6516519997713
},
{
"seq": 277,
"t": 3436.027469019,
"age_ms": 188.94575100011934
},
{
"seq": 280,
"t": 3436.110579437,
"age_ms": 221.74765199997637
},
{
"seq": 286,
"t": 3436.177311071,
"age_ms": 188.751800999853
},
{
"seq": 290,
"t": 3436.244002164,
"age_ms": 188.9267930000642
},
{
"seq": 295,
"t": 3436.287856347,
"age_ms": 149.54923000004783
},
{
"seq": 297,
"t": 3436.367445318,
"age_ms": 189.14145200005805
},
{
"seq": 300,
"t": 3436.473359398,
"age_ms": 230.2628239999649
}
],
"fresh_video_updates_per_second": 14.0,
"motion_to_decoded_marker_ms": {
"p50": 205.23615999991307,
"p95": 255.37493000001632,
"maximum": 288.6516519997713
},
"frame_gap_ms": {
"p50": 66.78208899984384,
"p95": 113.51053499993213,
"maximum": 216.81808399989677
},
"last_motion_seen": 300,
"release_visible": true,
"method": "60Hz XTest held drag to first observed unique decoded marker; no USB/scanout"
}

View File

@ -0,0 +1,391 @@
{
"pid": 36868,
"sent": 300,
"elapsed": 5.9589984410004035,
"frames": [
{
"seq": 0,
"t": 3640.386110834,
"age_ms": null
},
{
"seq": 1,
"t": 3640.519373332,
"age_ms": 134.4022890002634
},
{
"seq": 3,
"t": 3640.602775811,
"age_ms": 180.1231290000942
},
{
"seq": 7,
"t": 3640.686827223,
"age_ms": 202.1667660001185
},
{
"seq": 12,
"t": 3640.719559755,
"age_ms": 151.21741299981295
},
{
"seq": 16,
"t": 3640.886160553,
"age_ms": 251.06752900001084
},
{
"seq": 21,
"t": 3640.952684036,
"age_ms": 232.05332099996667
},
{
"seq": 28,
"t": 3641.019270224,
"age_ms": 184.72633300007146
},
{
"seq": 31,
"t": 3641.08601974,
"age_ms": 197.41423599998598
},
{
"seq": 33,
"t": 3641.136477653,
"age_ms": 218.50386699998126
},
{
"seq": 39,
"t": 3641.253744581,
"age_ms": 233.55622400003995
},
{
"seq": 44,
"t": 3641.302773964,
"age_ms": 201.0841410001376
},
{
"seq": 48,
"t": 3641.352620567,
"age_ms": 184.09052300012263
},
{
"seq": 54,
"t": 3641.419806983,
"age_ms": 151.48398700011967
},
{
"seq": 58,
"t": 3641.469275309,
"age_ms": 134.2054219999227
},
{
"seq": 61,
"t": 3641.550360582,
"age_ms": 165.7757049997599
},
{
"seq": 66,
"t": 3641.602734675,
"age_ms": 132.61152300037793
},
{
"seq": 68,
"t": 3641.669524731,
"age_ms": 168.2404889997997
},
{
"seq": 72,
"t": 3641.735955758,
"age_ms": 168.02757899995413
},
{
"seq": 76,
"t": 3641.825930701,
"age_ms": 191.08063799967567
},
{
"seq": 80,
"t": 3641.886014715,
"age_ms": 184.69220999986646
},
{
"seq": 84,
"t": 3641.942853183,
"age_ms": 174.62308499989376
},
{
"seq": 88,
"t": 3642.01955662,
"age_ms": 180.3497470000366
},
{
"seq": 92,
"t": 3642.069425098,
"age_ms": 168.1019530001322
},
{
"seq": 97,
"t": 3642.151479252,
"age_ms": 166.5138860003026
},
{
"seq": 102,
"t": 3642.236618834,
"age_ms": 166.25868800019816
},
{
"seq": 104,
"t": 3642.303523803,
"age_ms": 202.06527200025448
},
{
"seq": 110,
"t": 3642.383756275,
"age_ms": 181.81065099997795
},
{
"seq": 114,
"t": 3642.452824163,
"age_ms": 184.7937060001641
},
{
"seq": 115,
"t": 3642.502808136,
"age_ms": 200.88727400025164
},
{
"seq": 122,
"t": 3642.56962765,
"age_ms": 168.23873899966202
},
{
"seq": 126,
"t": 3642.636211214,
"age_ms": 168.06987100017068
},
{
"seq": 130,
"t": 3642.736057248,
"age_ms": 201.29267600032108
},
{
"seq": 133,
"t": 3642.786491538,
"age_ms": 201.8608220000715
},
{
"seq": 138,
"t": 3642.869465575,
"age_ms": 201.49245999982668
},
{
"seq": 142,
"t": 3642.936706531,
"age_ms": 199.6734029999061
},
{
"seq": 147,
"t": 3642.970636602,
"age_ms": 152.74627400003737
},
{
"seq": 151,
"t": 3643.103158296,
"age_ms": 218.58144999987417
},
{
"seq": 155,
"t": 3643.186588192,
"age_ms": 217.62627699990844
},
{
"seq": 161,
"t": 3643.219949826,
"age_ms": 168.2127830003992
},
{
"seq": 166,
"t": 3643.386168849,
"age_ms": 248.8666980002563
},
{
"seq": 167,
"t": 3643.419431903,
"age_ms": 267.89432299983673
},
{
"seq": 172,
"t": 3643.469876985,
"age_ms": 235.0979190000544
},
{
"seq": 174,
"t": 3643.536069147,
"age_ms": 264.59336400012035
},
{
"seq": 181,
"t": 3643.586186115,
"age_ms": 199.1352990003179
},
{
"seq": 184,
"t": 3643.652388194,
"age_ms": 217.85114400017846
},
{
"seq": 188,
"t": 3643.719702647,
"age_ms": 218.2440039996436
},
{
"seq": 191,
"t": 3643.769954944,
"age_ms": 218.46157999971183
},
{
"seq": 196,
"t": 3643.836222937,
"age_ms": 201.32009300004938
},
{
"seq": 201,
"t": 3643.90293833,
"age_ms": 182.37821499997153
},
{
"seq": 206,
"t": 3643.969618141,
"age_ms": 167.77938299992456
},
{
"seq": 210,
"t": 3644.069398845,
"age_ms": 201.0048139995888
},
{
"seq": 214,
"t": 3644.13643331,
"age_ms": 201.597750000019
},
{
"seq": 220,
"t": 3644.252838979,
"age_ms": 218.2553799998459
},
{
"seq": 227,
"t": 3644.319017434,
"age_ms": 167.78171700025268
},
{
"seq": 228,
"t": 3644.386198309,
"age_ms": 217.88031100004446
},
{
"seq": 231,
"t": 3644.486060386,
"age_ms": 268.07806900023934
},
{
"seq": 234,
"t": 3644.536142939,
"age_ms": 233.4952709998106
},
{
"seq": 242,
"t": 3644.569764438,
"age_ms": 168.36531900025875
},
{
"seq": 245,
"t": 3644.653021966,
"age_ms": 201.83865799981504
},
{
"seq": 247,
"t": 3644.703262597,
"age_ms": 216.3491179999255
},
{
"seq": 250,
"t": 3644.722097729,
"age_ms": 185.04074099973877
},
{
"seq": 251,
"t": 3644.836617552,
"age_ms": 267.9818219999106
},
{
"seq": 258,
"t": 3644.953858233,
"age_ms": 285.3023870002289
},
{
"seq": 263,
"t": 3644.98666922,
"age_ms": 235.29682999969737
},
{
"seq": 267,
"t": 3645.036247501,
"age_ms": 198.78414699996938
},
{
"seq": 270,
"t": 3645.069559845,
"age_ms": 201.00598099998024
},
{
"seq": 274,
"t": 3645.136220116,
"age_ms": 184.05027900007553
},
{
"seq": 279,
"t": 3645.219745967,
"age_ms": 184.3165600002976
},
{
"seq": 283,
"t": 3645.26959578,
"age_ms": 185.01186799994684
},
{
"seq": 288,
"t": 3645.353489409,
"age_ms": 185.59401299989986
},
{
"seq": 292,
"t": 3645.412158018,
"age_ms": 177.5848520001091
},
{
"seq": 296,
"t": 3645.48232895,
"age_ms": 180.9187710000515
},
{
"seq": 300,
"t": 3645.539078755,
"age_ms": 171.13896699993347
}
],
"fresh_video_updates_per_second": 14.2,
"motion_to_decoded_marker_ms": {
"p50": 197.41423599998598,
"p95": 267.89432299983673,
"maximum": 285.3023870002289
},
"frame_gap_ms": {
"p50": 66.67981100008546,
"p95": 132.52169399993363,
"maximum": 166.60079800021776
},
"last_motion_seen": 300,
"release_visible": true,
"method": "60Hz XTest held drag to first observed unique decoded marker; no USB/scanout"
}

View File

@ -0,0 +1,441 @@
{
"pid": 35562,
"sent": 300,
"elapsed": 6.017804186000376,
"frames": [
{
"seq": 0,
"t": 3536.620144655,
"age_ms": null
},
{
"seq": 1,
"t": 3536.814883409,
"age_ms": 196.04478799965364
},
{
"seq": 5,
"t": 3536.865073259,
"age_ms": 167.73844199997257
},
{
"seq": 10,
"t": 3536.948258403,
"age_ms": 179.12438700022904
},
{
"seq": 13,
"t": 3537.015249368,
"age_ms": 196.2264909998339
},
{
"seq": 17,
"t": 3537.097523087,
"age_ms": 211.9371039998441
},
{
"seq": 21,
"t": 3537.164810374,
"age_ms": 212.40958599992155
},
{
"seq": 26,
"t": 3537.220110615,
"age_ms": 184.36631500026124
},
{
"seq": 28,
"t": 3537.281839237,
"age_ms": 212.57670500017412
},
{
"seq": 31,
"t": 3537.365558111,
"age_ms": 246.66220700009944
},
{
"seq": 35,
"t": 3537.415416932,
"age_ms": 229.73451400002887
},
{
"seq": 36,
"t": 3537.449159155,
"age_ms": 246.3244699997631
},
{
"seq": 42,
"t": 3537.481623052,
"age_ms": 178.97855999990497
},
{
"seq": 43,
"t": 3537.531908274,
"age_ms": 212.8173220003191
},
{
"seq": 46,
"t": 3537.598891364,
"age_ms": 229.01879199980613
},
{
"seq": 48,
"t": 3537.631467839,
"age_ms": 215.03536199998052
},
{
"seq": 53,
"t": 3537.681592942,
"age_ms": 195.88962799980436
},
{
"seq": 57,
"t": 3537.748287293,
"age_ms": 195.9409589999268
},
{
"seq": 62,
"t": 3537.798581557,
"age_ms": 162.83571299982214
},
{
"seq": 66,
"t": 3537.949134193,
"age_ms": 246.6181670001788
},
{
"seq": 71,
"t": 3537.981714752,
"age_ms": 184.30827599968325
},
{
"seq": 72,
"t": 3538.031659029,
"age_ms": 229.41952700011825
},
{
"seq": 78,
"t": 3538.082010749,
"age_ms": 178.810859999885
},
{
"seq": 82,
"t": 3538.148348114,
"age_ms": 167.53107799968348
},
{
"seq": 84,
"t": 3538.215343745,
"age_ms": 212.66187000037462
},
{
"seq": 85,
"t": 3538.298310148,
"age_ms": 267.565459999787
},
{
"seq": 90,
"t": 3538.331726008,
"age_ms": 229.3749039999966
},
{
"seq": 93,
"t": 3538.381578122,
"age_ms": 228.9849610001511
},
{
"seq": 94,
"t": 3538.431567022,
"age_ms": 262.6405619998877
},
{
"seq": 99,
"t": 3538.481737916,
"age_ms": 228.9499620001152
},
{
"seq": 104,
"t": 3538.532109468,
"age_ms": 195.71026099993105
},
{
"seq": 107,
"t": 3538.598420876,
"age_ms": 212.85611300027085
},
{
"seq": 110,
"t": 3538.666771831,
"age_ms": 231.00555100018028
},
{
"seq": 114,
"t": 3538.698401884,
"age_ms": 195.13919899964094
},
{
"seq": 120,
"t": 3538.764949533,
"age_ms": 162.70388500015542
},
{
"seq": 121,
"t": 3538.815146675,
"age_ms": 196.05733100024736
},
{
"seq": 125,
"t": 3538.848538912,
"age_ms": 151.06507600012264
},
{
"seq": 127,
"t": 3538.898356027,
"age_ms": 179.4002950000504
},
{
"seq": 129,
"t": 3538.948557836,
"age_ms": 184.40189800003282
},
{
"seq": 134,
"t": 3539.015454889,
"age_ms": 168.0350599999656
},
{
"seq": 137,
"t": 3539.081556305,
"age_ms": 184.1154930002631
},
{
"seq": 142,
"t": 3539.131946232,
"age_ms": 162.97366799972224
},
{
"seq": 143,
"t": 3539.164969233,
"age_ms": 178.9348140000584
},
{
"seq": 146,
"t": 3539.231701208,
"age_ms": 196.0328339996522
},
{
"seq": 151,
"t": 3539.28183652,
"age_ms": 150.95570599987695
},
{
"seq": 152,
"t": 3539.36490821,
"age_ms": 228.91642300010062
},
{
"seq": 156,
"t": 3539.403856195,
"age_ms": 201.30859200025952
},
{
"seq": 159,
"t": 3539.465066838,
"age_ms": 212.45683799998005
},
{
"seq": 163,
"t": 3539.521298919,
"age_ms": 202.32530400016913
},
{
"seq": 167,
"t": 3539.564986016,
"age_ms": 178.99314500027685
},
{
"seq": 174,
"t": 3539.631711867,
"age_ms": 129.02699400001438
},
{
"seq": 177,
"t": 3539.715022132,
"age_ms": 150.9297479997258
},
{
"seq": 180,
"t": 3539.78181623,
"age_ms": 178.8400260002163
},
{
"seq": 184,
"t": 3539.837261716,
"age_ms": 156.23292299960667
},
{
"seq": 188,
"t": 3539.915345804,
"age_ms": 179.68466100001024
},
{
"seq": 193,
"t": 3540.065381629,
"age_ms": 245.27509700010341
},
{
"seq": 196,
"t": 3540.164939738,
"age_ms": 296.0185110000566
},
{
"seq": 204,
"t": 3540.198514843,
"age_ms": 196.2652839997645
},
{
"seq": 209,
"t": 3540.299446067,
"age_ms": 212.7537440001106
},
{
"seq": 214,
"t": 3540.331958088,
"age_ms": 161.82571300032578
},
{
"seq": 216,
"t": 3540.398769686,
"age_ms": 196.42248799982553
},
{
"seq": 220,
"t": 3540.448549469,
"age_ms": 178.3809610001299
},
{
"seq": 221,
"t": 3540.482114366,
"age_ms": 184.0417050002543
},
{
"seq": 225,
"t": 3540.548644517,
"age_ms": 196.15066400001524
},
{
"seq": 231,
"t": 3540.629612204,
"age_ms": 175.98646799979178
},
{
"seq": 234,
"t": 3540.698265899,
"age_ms": 195.91996400004064
},
{
"seq": 238,
"t": 3540.764972501,
"age_ms": 195.91938100029438
},
{
"seq": 240,
"t": 3540.799238538,
"age_ms": 196.48665099975915
},
{
"seq": 243,
"t": 3540.831778557,
"age_ms": 179.49158499959594
},
{
"seq": 247,
"t": 3540.915131988,
"age_ms": 196.2151200000335
},
{
"seq": 252,
"t": 3540.94839823,
"age_ms": 146.04568499999004
},
{
"seq": 256,
"t": 3541.031627416,
"age_ms": 162.32473599984587
},
{
"seq": 258,
"t": 3541.109307562,
"age_ms": 193.32685600011246
},
{
"seq": 263,
"t": 3541.165125784,
"age_ms": 179.53125199983333
},
{
"seq": 267,
"t": 3541.231790388,
"age_ms": 179.26876199999242
},
{
"seq": 270,
"t": 3541.298284373,
"age_ms": 182.62805099993784
},
{
"seq": 275,
"t": 3541.348325189,
"age_ms": 162.70272200017644
},
{
"seq": 279,
"t": 3541.415016334,
"age_ms": 162.76163700013058
},
{
"seq": 282,
"t": 3541.480711474,
"age_ms": 178.45212600013838
},
{
"seq": 287,
"t": 3541.564962622,
"age_ms": 178.97010700016835
},
{
"seq": 290,
"t": 3541.63167564,
"age_ms": 195.87796700034232
},
{
"seq": 294,
"t": 3541.707457108,
"age_ms": 204.93854200003625
},
{
"seq": 299,
"t": 3541.778955904,
"age_ms": 193.3583540003383
},
{
"seq": 300,
"t": 3541.832077187,
"age_ms": 201.21118299994123
}
],
"fresh_video_updates_per_second": 16.0,
"motion_to_decoded_marker_ms": {
"p50": 195.87796700034232,
"p95": 246.6181670001788,
"maximum": 296.0185110000566
},
"frame_gap_ms": {
"p50": 65.69514000011623,
"p95": 99.55810900009965,
"maximum": 194.73875399989993
},
"last_motion_seen": 300,
"release_visible": true,
"method": "60Hz XTest held drag to first observed unique decoded marker; no USB/scanout"
}

View File

@ -0,0 +1,426 @@
{
"pid": 352658,
"sent": 300,
"elapsed": 5.995556267997017,
"frames": [
{
"seq": 0,
"t": 105822.364914285,
"age_ms": null
},
{
"seq": 1,
"t": 105822.585777361,
"age_ms": 222.01077300996985
},
{
"seq": 2,
"t": 105822.633395286,
"age_ms": 252.87143999594264
},
{
"seq": 7,
"t": 105822.689622253,
"age_ms": 226.022027010913
},
{
"seq": 10,
"t": 105822.742185339,
"age_ms": 228.2570469978964
},
{
"seq": 16,
"t": 105822.79771698,
"age_ms": 183.7351360009052
},
{
"seq": 21,
"t": 105822.861982205,
"age_ms": 164.93943899695296
},
{
"seq": 23,
"t": 105822.950869113,
"age_ms": 220.40866300812922
},
{
"seq": 28,
"t": 105823.019618087,
"age_ms": 205.75517599354498
},
{
"seq": 33,
"t": 105823.121072793,
"age_ms": 224.04250300314743
},
{
"seq": 37,
"t": 105823.175335695,
"age_ms": 211.7217440099921
},
{
"seq": 40,
"t": 105823.237644438,
"age_ms": 223.70738101017196
},
{
"seq": 42,
"t": 105823.324132994,
"age_ms": 277.0209180016536
},
{
"seq": 45,
"t": 105823.382827147,
"age_ms": 285.76791899104137
},
{
"seq": 51,
"t": 105823.455156878,
"age_ms": 258.1867209955817
},
{
"seq": 57,
"t": 105823.514103903,
"age_ms": 216.88186199753545
},
{
"seq": 60,
"t": 105823.561138791,
"age_ms": 214.07255600206554
},
{
"seq": 63,
"t": 105823.605551037,
"age_ms": 208.5913160117343
},
{
"seq": 67,
"t": 105823.659636816,
"age_ms": 196.04647599044256
},
{
"seq": 73,
"t": 105823.753416386,
"age_ms": 189.77045199426357
},
{
"seq": 76,
"t": 105823.803806576,
"age_ms": 190.11899099859875
},
{
"seq": 79,
"t": 105823.869725451,
"age_ms": 205.90471600007731
},
{
"seq": 83,
"t": 105823.95639163,
"age_ms": 225.8787350001512
},
{
"seq": 87,
"t": 105824.013852919,
"age_ms": 216.4352410036372
},
{
"seq": 92,
"t": 105824.094019076,
"age_ms": 213.65897500072606
},
{
"seq": 97,
"t": 105824.13580518,
"age_ms": 172.12632700102404
},
{
"seq": 98,
"t": 105824.193087387,
"age_ms": 212.82773300481495
},
{
"seq": 101,
"t": 105824.254351098,
"age_ms": 224.0923759964062
},
{
"seq": 104,
"t": 105824.286978663,
"age_ms": 206.35425200453028
},
{
"seq": 110,
"t": 105824.342255098,
"age_ms": 161.75242500321474
},
{
"seq": 114,
"t": 105824.421301557,
"age_ms": 174.21901499619707
},
{
"seq": 117,
"t": 105824.498500034,
"age_ms": 201.53275699703954
},
{
"seq": 121,
"t": 105824.540304513,
"age_ms": 176.58061899419408
},
{
"seq": 125,
"t": 105824.61779757,
"age_ms": 187.53464000474196
},
{
"seq": 130,
"t": 105824.683076618,
"age_ms": 169.4389360054629
},
{
"seq": 131,
"t": 105824.726741037,
"age_ms": 196.3230559922522
},
{
"seq": 134,
"t": 105824.773524511,
"age_ms": 193.21187799505424
},
{
"seq": 136,
"t": 105824.822325131,
"age_ms": 208.38627500052098
},
{
"seq": 139,
"t": 105824.870169386,
"age_ms": 206.38254401274025
},
{
"seq": 142,
"t": 105824.917264065,
"age_ms": 203.22382400627248
},
{
"seq": 145,
"t": 105824.98236753,
"age_ms": 218.49155299423728
},
{
"seq": 148,
"t": 105825.0198443,
"age_ms": 205.89196399669163
},
{
"seq": 151,
"t": 105825.071297604,
"age_ms": 207.4841579888016
},
{
"seq": 155,
"t": 105825.137494809,
"age_ms": 207.23215899488423
},
{
"seq": 159,
"t": 105825.178862375,
"age_ms": 181.62698599917348
},
{
"seq": 160,
"t": 105825.244621502,
"age_ms": 230.6874790083384
},
{
"seq": 163,
"t": 105825.306028419,
"age_ms": 242.21345300611574
},
{
"seq": 169,
"t": 105825.375719467,
"age_ms": 211.78678300930187
},
{
"seq": 175,
"t": 105825.477803874,
"age_ms": 214.2023440101184
},
{
"seq": 179,
"t": 105825.526652619,
"age_ms": 196.3563049939694
},
{
"seq": 181,
"t": 105825.608244429,
"age_ms": 244.46072398859542
},
{
"seq": 186,
"t": 105825.680501243,
"age_ms": 233.48074399109464
},
{
"seq": 189,
"t": 105825.728851535,
"age_ms": 231.71705300046597
},
{
"seq": 192,
"t": 105825.786867276,
"age_ms": 239.71972599974833
},
{
"seq": 195,
"t": 105825.858277224,
"age_ms": 261.23618900601286
},
{
"seq": 200,
"t": 105825.918178281,
"age_ms": 236.96246100007556
},
{
"seq": 202,
"t": 105825.991665917,
"age_ms": 277.66999100276735
},
{
"seq": 206,
"t": 105826.046724269,
"age_ms": 266.1855160113191
},
{
"seq": 211,
"t": 105826.100238761,
"age_ms": 236.50946401176043
},
{
"seq": 215,
"t": 105826.147476938,
"age_ms": 217.01610699528828
},
{
"seq": 217,
"t": 105826.203798987,
"age_ms": 239.63930900208652
},
{
"seq": 220,
"t": 105826.257033774,
"age_ms": 243.18652600049973
},
{
"seq": 226,
"t": 105826.303624165,
"age_ms": 190.02428000385407
},
{
"seq": 231,
"t": 105826.405311617,
"age_ms": 208.14740000059828
},
{
"seq": 235,
"t": 105826.485612813,
"age_ms": 222.0297260064399
},
{
"seq": 240,
"t": 105826.542371191,
"age_ms": 195.36727099330164
},
{
"seq": 244,
"t": 105826.595525478,
"age_ms": 181.71944200003054
},
{
"seq": 248,
"t": 105826.685236336,
"age_ms": 198.72986499103718
},
{
"seq": 253,
"t": 105826.741214221,
"age_ms": 177.6253559946781
},
{
"seq": 256,
"t": 105826.804943658,
"age_ms": 191.22826900274958
},
{
"seq": 260,
"t": 105826.869890208,
"age_ms": 183.9346290071262
},
{
"seq": 264,
"t": 105826.929818681,
"age_ms": 182.7495990000898
},
{
"seq": 268,
"t": 105827.003753437,
"age_ms": 190.08757000847254
},
{
"seq": 271,
"t": 105827.057522552,
"age_ms": 193.68845300050452
},
{
"seq": 275,
"t": 105827.141712794,
"age_ms": 211.24341098766308
},
{
"seq": 280,
"t": 105827.180840381,
"age_ms": 167.17212100047618
},
{
"seq": 284,
"t": 105827.248257616,
"age_ms": 167.93278099794406
},
{
"seq": 287,
"t": 105827.309382202,
"age_ms": 178.86346799787134
},
{
"seq": 291,
"t": 105827.381741682,
"age_ms": 184.77957899449393
},
{
"seq": 296,
"t": 105827.456995634,
"age_ms": 176.64273899572436
},
{
"seq": 300,
"t": 105827.554913621,
"age_ms": 207.49961299588904
}
],
"fresh_video_updates_per_second": 15.6,
"motion_to_decoded_marker_ms": {
"p50": 207.82350649824366,
"p95": 266.1855160113191,
"maximum": 285.76791899104137
},
"frame_gap_ms": {
"p50": 59.91476499912096,
"p95": 101.45470600400586,
"maximum": 220.8630759996595
},
"last_motion_seen": 300,
"release_visible": true,
"method": "60Hz XTest held drag to first observed unique decoded marker; no USB/scanout"
}

Some files were not shown because too many files have changed in this diff Show More