问题背景:FDE在鼠标操作过程中发现光标显示不流畅给人以系统卡顿的感觉。为了提升用户对FDE的使用体验,决定对FDE光标显示进行优化。
FDE光标显示原始方案是使用Android光标作为FDE的光标进行显示,weston光标和x11光标均被隐藏。如下图所示:
...
原始方案中的缺点:FDE光标在Android client渲染,而后经历了hwcomposer、weston compositor、XServer composite三个阶段的合成,整个流程很长,时间延迟较大。
优化方案介绍:缩短FDE光标的渲染合成流程,减少延迟的时间,把FDE的光标层提到xserver端更早地渲染出来。而不是先作为作为Android client渲染再去参与后续的三次图形合成流程平白增加了延迟的时间。
在实际优化过程中,此问题分为了两个阶段的优化。
第一阶段:将Android光标内容提取出来,然后创建weston光标,将提取的Android光标的内容贴到新创建的weston光标上,然后隐藏掉Android光标和x11光标,让weston光标来代替Android光标作为FDE的光标进行显示。如下图所示:
...
第二阶段:第一阶段优化后,FDE光标不需要经过Android端的hwcomposer进行合成,直接在weston compositor参与合成,渲染合成的流程缩短了,光标流畅度有在AMD显卡上有明显提升。因为后续的测试中在景嘉微显卡上运行时,FDE光标显示的流畅度虽有所提升,但仍然比较慢, compositor参与合成,渲染合成的流程缩短了,光标流畅度有在AMD显卡上有明显提升。因为后续的测试中在景嘉微显卡上运行时,FDE光标显示的流畅度虽有所提升,但仍然比较慢, 是因为weston的gl_renderer_repaint_output函数和在AMD显卡相比,在景嘉微显卡上运行很慢。为了进一步提升操作体验,在第一阶段的基础上继续进行优化,首先在景嘉微显卡上对比测试麒麟桌面应用操作光标比较流畅。output函数和在AMD显卡相比,在景嘉微显卡上运行很慢。为了进一步提升操作体验,在第一阶段的基础上继续进行优化,首先在景嘉微显卡上对比测试麒麟桌面应用操作光标比较流畅。
而FDE的weston窗口是运行在麒麟系统之上的,所以考虑为weston窗口创建自定义的x11光标,将weston client的光标内容提取出来并给到新创建的x11光标,然后隐藏Android光标和weston client光标,让x11光标作为FDE的光标进行显示。如下图所示:
...