X Server 的优化

X Server是一个广泛使用的图形引擎,提供用户界面绘画的基础图形原语以及用户事件的截获和发布功能。X server的图形操作可以由软件实现,然而,很多的显卡提供了硬件加速功能。如果利用这些硬件加速功能来实现X server的一些图形操作,将可以极大的提高X server的性能。

目前,嵌入式上X server 使用kdrive (tinyX) 的较多,但也有逐渐向Xorg server迁移的趋势。对这两种X server,分别有一个对应的硬件加速架构: KAA 和 EXA。KAA 和EXA非常类似,kdrive 也可以使用exa架构。如果要更好的了解如何实现kaa和exa,可以参考openmoko 的Xserver: git://git.openmoko.org/git/xglamo

KAA
X server源码中,文件src/hw/kdrive/kdrive.h中的_KaaScreenInfo描述了可以使用硬件加速来实现的函数,主要有四 组:Solid, Copy, Blend和Composite。Solid组函数对屏幕上某块区域进行颜色填充;Copy组函数将屏幕上一个矩形区域拷贝到另一个位置。Blend组函 数将两块矩形区域alpha混合;Composite组函数更复杂,先将一块区域进行掩码操作,再和另一块区域alpha混合,可能还有填充,旋转能操 作。Blend函数可看作Composite的一个特例。

每组函数都有三个函数(Composite是四个), 如PrepareSolid, Solid, DoneSolid。PrepareXXX判断硬件能不能进行对应的加速操作,不能的话则仍然使用软件实现。XXX(如Solid)进行真正的硬件加速操作。DoneXXX一般不用实现。

在对某个矩形区域加速之前,这块区域需要位于显卡的framebuffer之上,包括onscreen 和 offscreen framebuffer。KAA框架中的内存管理程序(koffscreen.c)实现将一个区域拷贝到framebuffer之上,并按一定算法将过期的区域移出。

可以使用gtkperf或x11perf来测试X server的性能是否提高。

值得注意的是当需要加速的区域太小时,使用软件实现反而更快。这个时候可以再加上判断,当区域太小时,就不要移入framebuffer。如对Copy操作,在kaa.c的kaaCopyNtoN中加上判断即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值