做过一个指针设备回报率在线检测工具Pointer Report Rate Checker,我发现:一个 1000Hz 回报率的鼠标随便动动就能造成 20%的 CPU 使用率( CPU:Core i7-7920HQ )。
像 Chrome 、Firefox 浏览器默认会对鼠标移动事件作 vsync 处理,使得鼠标事件的触发频率不高于显示器刷新率,初步省去了事件处理不过来麻烦,尽管有些开发者可能还会对鼠标事件进一步作 throttle 处理来提高应用程序的流畅性。
想开发一个筛选驱动程序,试图对指针设备高回报率的报告进行降频处理,从而减少不必要的 CPU 消耗。
参考了 Windows 驱动开发指南,还不确定通过Filter Drivers能否实现上述构想。
1
GeekGao 361 天前
看了下文档 https://learn.microsoft.com/en-us/windows-hardware/drivers/hid/keyboard-and-mouse-hid-client-drivers
https://learn.microsoft.com/en-us/windows-hardware/drivers/hid/3rd-party-filter-drivers https://learn.microsoft.com/en-us/previous-versions/ff542379(v=vs.85) 需要实现一个 MouFilter_IsrHook 回调函数,这个函数会在鼠标中断服务例程( ISR )被调用时被调用。 可以在这个函数中修改,例如,你可以让函数每隔一段时间只处理一次中断,而忽略其他的中断。这可以通过在函数中添加一个计时器,并在每次处理中断时重置计时器来实现。 理论上能实现,但是细节会很复杂。 但是我怀疑你这是 X-Y Problem 啊,话说你提到的 “一个 1000Hz 回报率的鼠标随便动动就能造成 20%的 CPU 使用率( CPU:Core i7-7920HQ ” 你确定系统版本、厂商驱动什么的都很正常吗?或者其他什么原因? |
2
GeekGao 361 天前
|
3
murmur 361 天前
你学驱动开发不如买个新电脑,至少也得是 12 代 i5 以上的吧
|
4
112211aabbcc 361 天前
没有开发过鼠标相关驱动,能否实现不评价
但是要提醒一下,不知道是自用还是商用。 如果是商用,开发出来的驱动想要安装在 Windows 上,还需要找微软帮你签名才能正常安装不报错,当然这个签名是要成为微软会员然后才会给你签的。 如果是自用的话,关闭驱动强制校验签名也是可行的,但是目前没有永久关闭的方法,也就是说每次电脑重启开机就会要重新关签名校验,重新安装驱动。。。。。。 |
5
112211aabbcc 361 天前
@112211aabbcc #4 更正一下 好像有永久关闭驱动强制校验签名的方法
|
6
laqow 361 天前
这 CPU 不是 canvas 绘图占的吗?在 C 甚至 AHK 下处理鼠标事件也这个 CPU 占用?
|
7
fuweichin OP 最近买了个 Surface Precision Mouse 测试平滑滚动,实测 BLE 连接回报率 133Hz 左右,USB 连接回报率 1000Hz 。
|
8
fuweichin OP 实测通过[usbhidf]( https://github.com/LordOfMice/hidusbf)可以在驱动层面实现降低回报率,虽然只支持降到 125*2<sup>n</sup>Hz (其中 n 为整数)。
|