用自制的鼠标采样率测试程序测了触控板和无线鼠标,一测吓一跳

2022-12-17 10:01:52 +08:00
 fuweichin
测试报告:

```txt
笔记本内置触控板( Dell Precision 7520 触控板)
采样率峰值:100Hz
平均采样间隔:10ms (抖动稳定在±2.5ms )

无线鼠标( Dell WM514 无线鼠标)
采样率峰值:125Hz
平均采样间隔:8ms (最小间隔低至 1ms~3ms ,最大间隔通常低至 12ms~14ms )
```

看着测试结果,我表示有些难受:

1. 无线鼠标的电脑端收到的采样间隔抖动很严重
鼠标发送端应该是以均匀的间隔发送采样的,有线鼠标应该像触控板一样不至于间隔抖动成这样。
2. 采样率配置不了
鼠标 /触控板采样率与屏幕刷新率不一致,而且 Windows 系统无法设置。若不对鼠标移动事件的处理函数进行 throttle 则对 60Hz 刷新率的屏幕而言会造成多余的运算,若对其进行 throttle 则造成些许延迟和屏幕丢帧。

原测试程序采用 HTML+JavaScript 编写,无线鼠标的采样间隔抖动我不敢相信。为了排除 Chrome 浏览器从中作祟的可能,我又用 C#/WinForms 写了一版,测试结果还是那样。

不测不知道,一测吓一跳!

求分享 可配置的 mousemove 采样率的鼠标驱动。
求推荐 采样间隔平稳的有线鼠标。
2806 次点击
所在节点    程序员
9 条回复
llr8031
2022-12-17 10:04:58 +08:00
罗技游戏鼠标,全系列 1000Hz 起步回报率
nekota
2022-12-17 10:12:40 +08:00
你无线鼠标是蓝牙的? 100Hz 左右的刷新率基本是蓝牙的极限了。有 stutter 可能是旁边有干扰源,或者单纯鼠标不行。要提升就像楼上说的上罗技游戏系列,走 2.4g ,回报率 1000+hz
fuweichin
2022-12-17 10:17:23 +08:00
我期待的鼠标是其采样率与显示器刷新率一致(即支持 60Hz, 120Hz, 144Hz 之类的采样率)且可以像切换显示器刷新率一样切换鼠标采样率。

P.S. 采样率高非我所需,最好是能刚好喂饱显示器,还得保证接受端的间隔抖动小。

反面教材: https://appuals.com/mouse-lagging-windows-11/
LuxChen
2022-12-17 10:22:01 +08:00
现在的游戏鼠标驱动里面轮询率好像可以 1-1000 随意设置
maggch97
2022-12-17 11:01:03 +08:00
1000hz 之后,根本没有什么间隔抖动的问题。买一个用一下再看看你的需求是不是还那么奇葩吧。

金锄头肯定是不存在的
cnbatch
2022-12-17 21:53:29 +08:00
游戏鼠标直接自带采样率按钮
systemcall
2022-12-18 00:45:36 +08:00
@fuweichin #3
一般的情况下,没什么设备这么设计
就和手机的触控采样率,一般好点的手机都会做成刷新率的几倍
fuweichin
2022-12-19 04:55:14 +08:00
鼠标在使用高采样率(或称轮询率,回报率)时
1. 能以更低的延迟及触发 click(mousedown+mouseup)事件,有助于 FPS 游戏点击的响应速度
2. 能以更高的频率触发 mousemove / drag 事件,
有助于提高鼠标手写 /绘画的笔触采样密度,但是对于即时渲染显示来说则没有必要,会触发大量无助于显示输出帧率的计算,更费电。

所以我能想到的解决方法是:必要时,给 mousemove 事件作 throttle 处理,或交由操作系统 /鼠标驱动来做,或交由应用框架来做,或由对采样率有明确需求应用程序来做。

其实 Firefox 浏览器默认就会对 mousemove 进行 throttle 处理,使得 mousemove 事件触发频率不高于屏幕刷新率。但是万一某些应用程序期望使用高采样率呢?

我们需要一套 Spec 和一套 API ,比如:规定浏览器默认对 mousemove 事件进行 throttle 使其出发频率不超过屏幕刷新率,并提供 API 让应用程序可以配置偏好的 mousemove 采样频率及区间。当然也可反过来,规定浏览器对 mousemove 事件默认要按原始采样率触发…

Web 规范完成后,其它应用框架可能会跟进。

我只是发现问题,期望有人到 WICG 发起提议,编写规范或参与讨论。
fuweichin
2022-12-19 04:56:28 +08:00
手机触控的采样率我也测了,与屏幕刷新率设置是同步的。相对屏幕刷新率事实标准 60Hz ,Android 手机如果开启高刷新率 120Hz ,那么触控的峰值采样率可升到 120Hz ; iOS 手机如果开启低电量模式,那么屏幕刷新率会降到 30Hz ,触控峰值采样率也会降到 30Hz 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/903097

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX