李先静的专栏

欢迎大家加入Linux Mobile Research,本圈子主要致力于基于linux的嵌入式系统的学习和研究,包括内核、驱动、GUI、MMI、软件设计方法和软件优化等方面,欢迎大家加入,无论是高手还是新手,一起学习共同进步。

李先静ID:absurd
981484次访问,排名26好友141人,关注者147
Only those who attempt the absurd can achieve the impossible.
absurd的文章
原创 376 篇
翻译 1 篇
转载 55 篇
评论 1485 篇
李先静的公告
Broncho linux手机平台是构建在linux 2.6 之上,采用GTK+作为GUI的手机平台。欢迎大家到broncho.cn上交流,网站还在建设之中,近期我们会陆续把整理好的文档和代码更新到上去。
最近评论
dig_ge:absurd,你好,冒昧打扰,不知您能不能说明一下,为什么param_gen_call 和 param_gen_call_on 要用两个脚本实现,而不直接放在 gen_framework.sh 中,用函数实现呢?
xiaobaixu:你好 我在编译 splash 时 ttf.c出问题不知道是少什么库
"TTF_FONT" has no member named "current"
unailbobo:谢谢
unailbobo:关于1,我查看源码没有看到gdk_events_init里有关于mainloop的任何代码???
phrsea:恭喜恭喜!小宝宝好可爱啊。
呵呵,为了一句"恭喜",还得专门注册一个帐号啊。
文章分类
收藏
相册
1.个人相册
2.设计备忘录用图
3.设计本质论用图
4.scim架构用图
6.临时文件
7.其它文件
8.研究笔记用图
marvell-linux
1.友情链接
aimself@CSDN(RSS)
directfb中文网站(RSS)
Eric's Little Hut
eye_of_back的专栏(RSS)
Linux Mobile Research
Phoenix@上海(RSS)
segments的专栏(RSS)
study's Blog(RSS)
tracestudio
伐木丁丁鸟鸣嘤嘤(RSS)
会飞的鱼的专栏(RSS)
创系的技术博客
小四的BLOG(RSS)
小马哥的博客(RSS)
开源电信(RSS)
御风剑客
新奇的BLOG
易军军的网络家
李吉群的专栏(RSS)
2.亲情链接
凤凰的幸福蓄水池(RSS)
我的相册
3.软界高手
Donald E. Knuth (RSS)
孟岩(RSS)
透明(RSS)
4.LinuxMobile
celinuxforum(RSS)
GPE(RSS)
maemo.org(RSS)
opensource.motorola
palowireless
5.XWindow
Jserv's blog(RSS)
Keith Packard(RSS)
6.技术资源
7.开源项目
freedesktop(RSS)
GNU(RSS)
GTK+(RSS)
matchbox(RSS)
pxa27x-linux/
8.我的BLOG镜像
absurd@chinaunix
absurd@msn
My English BLOG(RSS)
存档
订阅我的博客
XML聚合  FeedSky

原创 GTK+/DFB优化收藏

新一篇: GTK/DFB中的WaitCursor | 旧一篇: 在Win32下建立GTK开发环境

GTK+/DFB优化(续)

转载时请注明出处和作者联系方式
作者联系方式:李先静 <xianjimli at hotmail dot com>


在前一篇GTK优化的BLOG中,我介绍我当时知道的优化方法,这段时间又有一些新的体会,写出来和大家分享吧:

1) 固化DirectFB的配置。由于DirectFB的配置基本上都是固定的,通常没有必要使用配置文件,直接把配置固化到代码里好了,即省了配置文件的解析,又省了某些插件目录的扫描。

2) 去掉DirectFB中不必要的插件。每个input driver都会创建一个线程,图形加速的插件很多,加载进来要浪费不少空间去容纳.data/.bss的全局数据,而且这些数据每个进程都有一份独立的拷贝,造成大量时间/空间的浪费。

3) 去掉GTK中不必要的pixbuf loader和immodules,有些pixbuf loader和immodule永远不会用到或者很少用到,可以去掉它们,省了空间又加快起动速度。这只要修改$prefix/etc/gtk-2.0中的配置文件即可。

4) 去掉_gdk_visual_init中的检测。这个函数比较费时,由于它的检测结果总是固定的,可以直接把结果写到代码里。对broncho说,把整个循环注释掉就行了。

5) 预先加载常用动态库。以前我用过这个办法,却得到的相反的结论,速度反而变慢了!后来发现是因为dlopen是以LAZY方式打开的,改用NOW方式之后速度有显著提高,起动时间差不多减少一半。

6) 尽早显示窗口。在创建窗口完成后,马上显示出来,然后再加载数据,避免让用户等得太久。由于gtk_widget_show是异步的,在show之后再调用while(gtk_events_pending())  gtk_main_iteration(),可以让窗口立即显示。

7) 预先创建窗口。由于DirectFB只要0.2秒就能完成初始化,而GTK则至少要1秒多钟,一个比较狠的方法就是在DirectFB初始化完成时,马上创建一个窗口并显示出来,GTK真正创建窗口时直接重用这个创建好的窗口。

8) 单窗口机制。考虑到手机应用的特殊性-窗口独占工作区。一个应用程序可以只用一个窗口,打开新窗口时,只是增加这个窗口的引用计数,并把新窗口的内容显示到上面, destroy时减少它的引用计数,并把原来的内容显示上去,引用计数为0时才真正destroy。

GTK优化没有什么好的方法,只能从一点一滴做起,欢迎交流。

发表于 @ 2008年07月16日 21:36:00|评论(loading...)|编辑|收藏

新一篇: GTK/DFB中的WaitCursor | 旧一篇: 在Win32下建立GTK开发环境

评论

#pondra 发表于2008-07-17 10:43:13  IP: 218.24.167.*
收获不小,谢谢分享!
#weimecky 发表于2008-07-23 09:33:08  IP: 10.75.56.*
"预先加载常用动态库。以前我用过这个办法,却得到的相反的结论,速度反而变慢了!后来发现是因为dlopen是以LAZY方式打开的,改用NOW方式之后速度有显著提高,起动时间差不多减少一半。"

请问这个优化措施有没有什么论据支持啊?我在网上查找很多资料都没有发现这个优化措施有任何的证据证明,请absurd大哥给点提示,谢谢!
2008-07-23 21:21:09作者回复
你看看ALP的文档吧
#weimecky 发表于2008-07-23 09:35:22  IP: 10.75.56.*
"去掉_gdk_visual_init中的检测。这个函数比较费时,由于它的检测结果总是固定的,可以直接把结果写到代码里。对broncho说,把整个循环注释掉就行了。"

这一条经过我在手机上(PXA270 312 Mhz)的cpu上打印时间发现只用了1ms而已,并没有发现有如此大的差异? 不过我测试的版本是 gtk 1.2.10(我对比了2.6和1.2的差异,好像这个函数差异不大),请absurd大哥能否说明一下,谢谢!
2008-07-23 21:20:12作者回复
我在gtk+2.6/DFB上试的,PXA300上约花200ms。
#weimecky 发表于2008-07-23 09:40:38  IP: 10.75.56.*
" 6) 尽早显示窗口。在创建窗口完成后,马上显示出来,然后再加载数据,避免让用户等得太久。由于gtk_widget_show是异步的,在show之后再调用while(gtk_events_pending()) gtk_main_iteration(),可以让窗口立即显示。"

这一条,我想说的是: gtk_widget_show之后加while(gtk_events_pending()) gtk_main_iteration()应该是没有效果的,因为此时main loop还没有转起来,是无法立即显示窗口的,真的的绘制是在
gdk_window_invalidate_rect-->
gdk_window_invalidate_region-->
gdk_window_invalidate_maybe_recurse-->
gdk_window_schedule_update -->
g_idle_add_full->
gdk_window_process_all_updates-->
gdk_window_process_updates_internal-->
_gdk_event_func 这个调用关系中绘制的,也就是idle状态进行绘制的
2008-07-23 21:19:07作者回复
你可以试一下。<br />在gtk_init里mainloop就创建好了,在创建窗口的时候肯定可以用了。
#liufeiqq 发表于2008-07-29 19:18:45  IP: 218.75.120.*
我的基于DirectFB的Gtk+程序,输出到Fbdev上没什么问题,可是直接把Directfbrc里面的system改为system=x11后,程序起来只是一个空白的窗口。。。。:(
请absurd大哥和路过的各位大侠能否指点一下,谢谢!
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © 李先静