陈飞(绍兴文理学院元培学院,杭州312000)
摘要:图形用户界面是当前人机交互界面的主流,广泛应用于各种类型的计算机的系统软件和应用软件。当前各类图形用户界面的共同特点是以窗口管理系统为核心,使用键盘和鼠标器作为输入设备。本文阐述了嵌入式图形系统性能优化的过程和思想,然后介绍了嵌入式图形系统性能优化的实现方法,最后总结全文,嵌入式图形系统性能优化具有非常重要的意义。
关键词:嵌入式;图形系统;性能优化;实现方法中图分类号:TP335+.3文献标识码:A文章编号:1007-9599(2010)05-0000-02
EmbeddedGraphicsSystemPerformanceOptimization
FeiChen
(YuanPeiInstituteofShaoxingUniversity,Hangzhou312000,China)
Abstract:Thegraphicaluserinterfaceiscurrentlythemainstreamofhuman-machineinterface,itiswidelyusedinvarioustypesofcomputersystemsoftwareandapplicationsoftware.Atpresentallthecommonfeaturesofagraphicaluserinterfaceisthewindowmanagementsystemasthecore,usethekeyboardandmouseasinputdevices.Thispaperdescribestheembeddedprocessofperformanceoptimizationofgraphicsandideas,thenintroducestheperformanceoptimizationofembeddedgraphicssystemrealizationmethod,concludedthefulltext,embeddedgraphicsoptimizationperformanceofgreatimportance.
Keywords:Embedded;Graphicssystem;Performanceoptimization;Implementation
嵌入式图形系统下对GUI基本要求更高,GUI要满足轻型、占用资源少、高性能、高可靠性和可配置的要求,与通用的GUI系统不同。嵌入式GUI就是在嵌入式图形系统中为特定的硬件设备或环境而设计的图形用户界面系统。嵌入式GUI不但要具有以上有关GUI的特征,而且在实际应用中,嵌入式图形系统还要满足如下的基本要求:轻型,占用资源少;高可靠性;高性能;可配置。
一、使用局部图像刷新
在对于图像处理中,由于嵌入式图形系统中,资源较少,如果每次都刷新整张图像,那么会白白造成资源的浪费。在图像截取显示的过程中,如果把图像分割成一块一块小的部分,当某些区域需要改变时,对应的一块或几块小的部分进行重新载入刷新,而对于其他的部分暂不进行处理,这样,就能大大节约cpu的工作量,也节省了非常多内存不需要的消耗从而加快程序运行速度,优化程序。二、合理运用双缓冲
双缓冲是首先把需要绘制的控件保存到一个图像中,然后,再把图像复制到需要绘制的控件上。双缓冲技术是GUI编程中常用的技术,在Qt的一些早期版本中,为了使得用户界面更加清爽,经常用双缓冲技术来消除闪烁。在Qt4中的QWidget具有了能够自动处理闪烁的功能,因此我们不用再担心消除闪烁的问题。尽管QWidget具有了能够自动处理闪烁的功能,但是双缓冲技术对于绘制复杂且需要经常刷新的控件的情况还是非常有用的。我们可以让控件做好下一次绘制事件的到来的随时准备,把它永久保存在一个图像中,当接到一个控件的绘制事件时,就把图片复制到控件上。这个技术对于小范围的修改更有用。例如,如果我们要做的只是绘制一条直线或者一个圆,就没有必要刷新整个控件了。
双缓冲在Qt/Embedded中的作用是形成闪烁的动画,但是动画并不是时时刻刻都需要存在的,在画面较为静止的情况下为了防止界面闪烁,所有的窗体并不直接写屏幕,而是先写入一个buffer,然后由QT负责将其写入硬件显示缓冲区。
关闭双缓冲有两种方式:
(一)为每一个QWidget设置Qt:WA_PaintOnScreen属性。
(二)使用QDirectPainter。
当需要使用的时候,再开启双缓冲,从而起到了对内存合理的运用,从而优化系统。
三、配置configure参数
使用Qt提供的源代码编译前的选项配置,可以在生成的库文件中剔除不需要的功能。通常情况下,只有少数一个或者几个程序运行在嵌入式设备上,这些程序并不会覆盖Qt的所有功能。./configure可以带上"-no-feature-<指定要剔除的功能项>就可以关闭某项功能,比如
./configure-no-feature-thread
关于qt支持的功能列表可以参考./src/corelib/global/qfeatures.txt
合理选择配置参数,在程序编译和运行时同样也能起到优化性能的效果。
四、Qt本身绘图引擎的优化
下面是一些Widget在4.4和4.5的benchmark,如图1。图1Widget在4.4和4.5的benchmark
五、建立一个静态编译
通过在编译时采用-static参数,可以将Qt编译成为一个静态库:即./configure–static。应当尽可能地在main()函数中使用最少的代码量,设计各个应用作为单独的控件(或者控件集),以便将应用程序套装并建立为一个一体化的应用。然后,设计一个可以提高其他应用程序之间交互的方法的独立的应用程序。QtExtendedplatform就是采用典型的实例:它既可以作为一个静态的单独的独立的应用程序,也可以使用一系列动态链接执行创建。
六、替换内存分配方式
一些运用C++编译的库,在一些平台上使用“new”和“delete”操作方面时,具有非常低的性能。可以通过以下的功能函数替代实现来改善内存分配的性能:void*operatornew[](size_tsize)
{
returnmalloc(size);
}
void*operatornew(size_tsize)
{
returnmalloc(size);
}
voidoperatordelete[](void*ptr)
{
free(ptr);
}
voidoperatordelete[](void*ptr,size_t)
{
free(ptr);
}
voidoperatordelete(void*ptr)
{
free(ptr);
}
voidoperatordelete(void*ptr,size_t)
{
free(ptr);
}
上述这些实例显示了采用C的内存分配的必要的代码,替换内存分配方式提高了嵌入式图形系统的性能。
参考文献:
[1]李凡.QtEmbedded在嵌入式Linux系统下的移植与应用[J].黑龙江科技信息,2008,(27)[2]唐飞,李玉文,刘孙东.基于嵌入式Linux的图形用户界面移植与开发[J].深圳信息职业技术学院学报,2008,(02)
[3]张方辉,王建群.QtEmbedded在嵌入式Linux上的移植[J].计算机技术与发展,2006,(07)
[4]王存健,张建正.嵌入式Linux下QtEmbedded的应用[J].计算机技术与发展,2006,(11)
[5]刘小春,张有为,向伟.嵌入式Linux下QtEmbedded应用关键技术研究[J].微计算机信息,2007,(35)
作者简介:陈飞(1987-),男,汉,浙江省杭州市江干区,学生,本科,计算机