android游戏模式的240Hz触控到底有啥效果?

182 阅读2分钟

大部分手机的触控都是120Hz的,但是顶级旗舰都配有游戏模式,可以主动开启240Hz的触控(驱动)。直觉上觉得240Hz肯定是要更好的,但真是这样吗?

input事件分三类:down,up,move

down和up的处理都是在主线程的looper中进行handler处理,这是通过android原生的消息通信机制实现的,只要主线程上没任务,就执行处理这个down事件或者up事件,进行层层转发。

而move事件默认是有进行性能优化的,而这个性能优化刚好和vsync节奏相关(刷帧),叫做批处理。顾名思义,将多个move事件一起处理。

在源码中,会将一个vsync(屏幕刷新率是60hz那就是16.6ms,120hz就是8.3ms)间隔的move事件,合并为一个事件,在一帧中刷下去。

也就是说,触控那边开了240Hz,move事件频繁上报到应用的主线程,节奏依旧会被主线程的vsync(目前顶级旗舰也只有120Hz的屏幕)节奏给限流控制住。因此,从这个角度来看,240Hz的触控对move移动这类行为似乎是没起作用的。那么对于down和up呢?

前文写了down和up是直接在looper中处理,不会跟随vsync的节奏。那么down和up的节奏和什么有关呢? 和触控的频率有关。首先理清楚down和up是如何上报的。屏幕以一定的频率扫描,发现手指的触碰,这个频率原先是120hz,在游戏模式下变成240hz,屏幕将扫描到的触碰通过中断上报到驱动,这个驱动会被监听着(epoll),一旦监听到有事件上报就会进行读取(inputReader),然后分发(inputDispatcher)给需要的app,app则在主线程中进行处理接下来的逻辑(例如,触发技能等)。因此,down和up在游戏模式下会被处理得更快,提速大约4.16ms,大概半帧。

这半帧时间有多大的作用呢?对于csgo的职业选手而言,反应时间大约在200ms。。。