一种应用于嵌入式开发平台图形函数的优化实现方法

文档序号:6573503阅读:509来源:国知局
专利名称:一种应用于嵌入式开发平台图形函数的优化实现方法
技术领域
本发明涉及嵌入式软件开发图形函数领域,更具体的说,是涉及一种应用于嵌入式开发平台图形函数的优化实现方法。
背景技术
目前,嵌入式开发平台图形函数中的画图方法主要是QGfxRaster提供给Qt基本的画图函数,是所有的画图函数类的父辈,所有的画图事件最终都会导致一个QGfxRaster函数调用[2],这些函数包括drawText、drawPointUnclipped、drawPoint、drawLine、 vline、drawThickPolyline、hline 、hlineUnclipped、hImageLineUnclipped、hAlphaLineUnclipped、fillRect、drawPolyLine、drawPolygon、scroll、blt、stretchBlt、tiledBlt等。
Qtopia在PC平台上表现良好,但是Qtopia在Intel XScale PXA 255上的成绩就不是那么好了。经过实验,整个Qtopia启动大约花了28秒。Qtopia启动时间是指Application::exec调用发生之前的时间。根据前人的经验,在经过优化之后,预计可以得到40%左右的性能提升。
对于画线函数drawLine,传统的算法是对于任意一条要求画的线,都将分为三种情况去讨论最后选择用A、B、C种的一种方法实现画线操作。三种情况分别是判断dashedline,判断gfx_storyLine,判断以AB连线为矩形的形状,从而使用三种画线函数。
可以认为,画线请求的分布应该是平均的。即修改前,A、B、C都大约被执行了1/3,这种情况下,A、B、C在执行的时候仍然需要大量的判断,浪费了很多时间,效率不高。同时由于三种情况判断的时候没有规律,Cache和TLB的命中率比较低。

发明内容
为了获得更好的启动时间,提高画图函数的画图效率,本发明的目的在于提供一种应用于嵌入式开发平台图形函数的优化设计方法。
为解决技术问题,本发明通过以下的技术方案实现。
1、一种应用于嵌入式开发平台图形函数的优化实现方法,提供一种画线方法,包括以下步骤(1)判断选用画线函数首先对两个点A(x1,y1)和B(x2,y2)进行初始化,计算A点和B点的横坐标和纵坐标之间的距离ax=|x2-x1|和ay=|y2-y1|,然后判断A点和B点是否在矩形以内;(2)判断A点和B点的横坐标的大小,根据两种结果,可以分为两种情况以B点的横坐标x2>x1的情况进行讨论;对于B点的横坐标x2<x1的情况,将其标记为1,它的处理同x2>x1的情况的处理过程;(3)判断A点和B点的纵坐标的大小,分两种情况,分析A点和B点的y2>y1情况;对A点和B点的y2<y1的情况,将其标记为2。
(4)判断A点的横坐标ax和A点的纵坐标ay的大小,分两种情况,分析A点的横坐标ax>ay的情况;对A点的横坐标ax<ay情况,将其标记为3。
(5)根据步骤(1)~(4)的各种情况,根据坐标点的位置反馈值进行判断,采用画线函数完成画线。与现有技术相比,本发明的有益效果是首先,保证了跳转时的循环不变性,即代码有很高的对称性,这可以提高命中率;其次,画线操作的实现比优化前更有效率,省去了很多循环和跳转;由于画线操作的平均分布,所以这个效率的提高可以抵消二层判断带来的额外系统消耗。


图1是现有技术中画线函数的实现过程示意图;图2是本发明中画线函数的实现过程示意图。
具体实施例方式
结合附图,下面对本发明进行详细说明。
本发明按照上述画图流程对画图算法进行修改,在每个步骤进行一次判断,有一个分支,然后根据不同的分支,采用16种具体画线函数当中的一个进行画线。包括以下步骤(1)判断使用哪种画线函数由附图2,我们可以看到,首先要对两个点A(x1,y1)和B(x2,y2)进行初始化,计算A和B两点的横坐标和纵坐标之间的距离,也就是计算ax=|x2-x1|,ay=|y2-y1|,然后判断A和B两点是否在举行以内。
初始化完成以后,判断A和B两点的横坐标的大小,根据两种结果,可以分为两种路径。两种路径接下去也要做同样的判断,我们以B的横坐标大的情况,也就是x2>x1的情况进行讨论,对于另一种情况,我们标记1,它的处理同x2>x1的情况是一样的。
之后判断A和B两点的纵坐标的大小,同样的,也分两种对等的情况。我们按照附图2的内容,只看y2>y1,对另一种情况标记2。
第三个是判断ax和ay的大小,分两种对等的情况。我们看ax>ay的情况,对另一种情况标记3。
最后我们根据dashedline的值,选择16种画线函数中的一种。
(2)实现16种画线函数我们采用的新的具体的画线函数,与原来的函数并没有很大的变化,只是根据不同的情况进行具体的画线,更加有针对性,跳转更少。可以看附图2。
为了检验的新的画图函数的效果,使用修改过的QTopia图形函数库进行实验。我们使用的目标平台是Intel XScale的开发板,使用的操作系统是ARMLinux。本次实验所得的数据都是在这个平台上获得。
以下是我们的平台详细参数

以下是本发明实施例使用的其中一个画图函数intdi=0;intdc=dashes
;d=ay-(ax>>1);for(;;){if(!cr.contains(x,y))inside=inClip(x,y,&cr);if)inside&&(di&0x01)==0)drawPointUnclipped(x,scanLine(y));if(x==x2){//-----------draw work done,break the loop and return;GFX_ENDreturn;}if(--dc<=0){if(++di>=numDashes)di=0;dc=dashes[di];}if(d>=0){y++;d=d-ax;}
x++;d=d+ay;改动算法,编译通过之后使用QtopiaQtopia-phone 2.0.0中自带了一个benchmark工具叫做qtperf,这是一个标准的Qtopia的应用程序。在本实验中将其重新编译之后放在$QPEDIR/src/tools/目录下,在需要使用时可以通过命令行启动qtperf,以获得所需的相关数据。但是,因为Qtopia free2.1.1缺省不能编译qtperf,所以我们需要手动配置qtperf到Qtopia free2.1.1中。方法是在$QPEDIR/src/general.pti的APP_PROJECTS宏定义中加入tools/qtperf。
经过以上优化之后得到的结果如下启动时间约为25秒,性能获得了约11%的提升。使用了qtperf,可以得到

可以看到,整体性能有显著的提升。
最后,还需要注意的是,以上列举的仅是本发明的一个具体实施例。显然,本发明不限于以上实施例,还可以有许多变形。本领域的普通技术人员能从本发明公开的内容直接导出或联想到的所有变形,均应认为是本发明的保护范围。
权利要求
1.一种应用于嵌入式开发平台图形函数的优化实现方法,其特征在于,提供一种画线方法,包括以下步骤(1)判断选用画线函数首先对两个点A(x1,y1)和B(x2,y2)进行初始化,计算A点和B点的横坐标和纵坐标之间的距离ax=|x2-x1|和ay=|y2-y1|,然后判断A点和B点是否在矩形以内;(2)判断A点和B点的横坐标的大小,根据两种结果,可以分为两种情况以B点的横坐标x2>x1的情况进行讨论;对于B点的横坐标x2<x1的情况,将其标记为1,它的处理同x2>x1的情况的处理过程;(3)判断A点和B点的纵坐标的大小,分两种情况,分析A点和B点的y2>y1情况;对A点和B点的y2<y1的情况,将其标记为2。(4)判断A点的横坐标ax和A点的纵坐标ay的大小,分两种情况,分析A点的横坐标ax>ay的情况;对A点的横坐标ax<ay情况,将其标记为3。(5)根据步骤(1)~(4)的各种情况,根据坐标点的位置反馈值进行判断,采用画线函数完成画线。
全文摘要
本发明涉及嵌入式软件开发图形函数领域,旨在一种应用于嵌入式开发平台图形函数的优化实现方法。该方法包括以下步骤(1)判断选用画线函数首先计算A点和B点的横坐标和纵坐标之间的距离,判断A点和B点是否在矩形以内;(2)判断A点和B点的横坐标的大小,对不同结果进行分析;(3)判断A点和B点的纵坐标的大小,对不同情况进行分析;(4)判断A点的横坐标和纵坐标的大小,对不同情况进行分析;(5)根据坐标点的位置反馈值进行判断,采用画线函数完成画线。该方法保证跳转时的循环不变性,提高命中率;画线操作的实现比优化前更有效率,省去了很多循环和跳转;由于画线操作的平均分布,抵消二层判断带来的额外系统消耗。
文档编号G06F9/44GK101013367SQ200710067158
公开日2007年8月8日 申请日期2007年2月2日 优先权日2007年2月2日
发明者陈天洲, 张楠, 黄江伟, 郑臻炜 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1