X Server 的优化

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

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

KAA
Xserver源码中,文件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 和 offscreenframebuffer。KAA框架中的内存管理程序(koffscreen.c)实现将一个区域拷贝到framebuffer之上,并按一定算法将过期的区域移出。

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

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

交叉编译libx加GTK+2.1时候用到库各个库文件的集合,不用花费时间网上一个一个下载,已经经过本人亲测试实测,还可以编译GTK+directFB 1.1 libs_for_gtk Dir: atk-1.25.2.tar.gz atk-1.26.0.tar.gz bigreqsproto-1.1.2.tar.bz2 cairo-1.8.6.tar.gz CPAN-1.94.tar.gz DirectFB-1.1.1.tar.gz expat-2.0.1.tar.gz expat-2.1.0.tar.gz ExtUtils-MakeMaker-6.20.tar.gz fontconfig-2.4.2.tar.gz fontconfig-2.6.0.tar.gz fontconfig-2.7.3.tar.gz freetype-2.3.5.tar.bz2 freetype-doc-2.3.6.tar.bz2 glib-2.12.1.tar.bz2 glib-2.14.4.tar.gz glib-2.18.2.tar.bz2 glibc-2.2.5.tar.bz2 gtk+-2.10.14.tar.bz2 gtk+-2.10.7.tar.bz2 gtk+-2.12.12.tar.bz2 inputproto-2.2.tar.bz2 jpegsrc.v6b.rar jpegsrc.v6b.tar.gz kbproto-1.0.6.tar.bz2 libpng-1.2.10.tar.bz2 libpng-1.2.32.tar.lzma libpthread-stubs_0.1.orig.tar.gz libtool-1.5.22.tar.gz libtool-2.4.2.tar.xz libX11-1.0.3.tar.bz2 libX11-1.2.2.tar.bz2 libX11-1.3.2.tar.gz libX11-1.5.0.tar.bz2 libXau-1.0.7.tar.bz2 libXau-1.0.8.tar.bz2 libxcb-1.3.tar.bz2 libxcb-1.4.tar.bz2 libxcb-1.8.1.tar.bz2 libXdmcp-1.0.3.tar.gz libXdmcp-1.1.2.tar.bz2 libXext-1.0.1.tar.bz2 libXfont-1.4.4.tar.bz2 libXft-2.1.12.tar.bz2 libXft-2.1.13.tar.bz2 libxml2-2.6.30.tar.gz libxml2-2.6.32.tar.gz libxslt-1.1.29.tar.gz libXt-1.0.6.tar.bz2 pango-1.16.4.tar.bz2 pango-1.18.2.tar.gz pango-1.22.1.tar.bz2 pango-1.24.4.tar.bz2 pixman-0.24.0.tar.bz2 poky-pinky-3.1.1.tgz stubs-soft.h tiff-3.8.2.tar.gz tiff-4.0.7.tar.gz tslib-1.4.tar.gz xcb-proto-1.7.1.tar.bz2 xcmiscproto-1.1.2.tar.bz2 xcmiscproto-1.2.2.tar.bz2 xextproto-7.2.1.tar.bz2 xorg-server-1.3.0.0.tar.bz2 xorg-server-1.4.2.tar.bz2 xproto-7.0.23.tar.bz2 xtrans-1.2.7.tar.bz2 zlib-1.2.3.rar zlib-1.2.3.tar.gz zlib-1.2.5.tar.gz
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值