目前gnome和kde的wayland实现都存在输入延时的问题
他们采用的都是串行的事件处理模型,通过epoll等待一系统的事件发生。这种模型的好处是不会有竞争问题,数据同步开销小,缺点就是当某个操作比较耗时时,会导致整个系统性能下降,当Server端处理渲染时,一个键盘或鼠标事件产生了,这个事件只能阻塞直到渲染操作完成。
这个问题早期在Xorg上也出现过,Xorg采用select串行模型,和上述情况一模一样。后来Xorg将键盘鼠标事件改为sigio信号驱动,这样当有键盘和鼠标事件产生时,系统就会发出sigio信号,然后执行事先编写好的信号处理函数,将事件及时的发送到client。但信号驱动也也有它的问题,需要调用可重入函数和尽快返回。于是xorg-server 1.19.0又引入了多线程,单独增加了一个线程来处理输入事件。
不知道gnome和kde最终会采用怎么方法来解决这个问题。简单地考虑也可以学习xorg-server直接增加一个线程,但肯定要增加互斥锁,而且把输入相关的函数抠出来也要费点事。kde目前提出了在事件增加优先级的想法,将键盘和鼠标事件设置很高的优先级时,我们可以认为键盘和鼠标事件是“实时”的。gnome怎么解决怎么问题还不清楚。