日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

在嵌入式Linux系統(tǒng)中應(yīng)用的GTK+和X分析( 三 )



還可以使用一個(gè)更好的方法來完善字體管理系統(tǒng),即包裝GtkStyle,這樣開發(fā)者就可以通過屬性來獲得一個(gè)窗口的字體,這比直接使用 X 系統(tǒng)字體的名字要更靈活 。比如要顯示一個(gè)比基本字體要大一號(hào),并且是黑體字就可以調(diào)用:

gtk_widget_set_font_bold (widget, TRUE);
gtk_widget_set_font_enlarge (widget, 1);

這是通過在 GtkWidget 結(jié)構(gòu)中加入一個(gè) GdkFont * font 來實(shí)現(xiàn)的,GtkWidget 是所有窗口類的父類 。如果設(shè)置widget->font 那么就使用它,否則就使用widget->style->font 。

窗口管理

在嵌入系統(tǒng)GUI中,還需要建立一個(gè)窗口管理器 。我們可以選擇一個(gè)開放代碼的,輕量級(jí)的X管理器,Aewm 。在嵌入系統(tǒng)中,我們會(huì)將最上層的窗口設(shè)置為獲得焦點(diǎn),并且只有對(duì)話框能移動(dòng),能顯示其標(biāo)題欄 。
窗口管理器是一個(gè)交互端,它可以管理內(nèi)部與外部的應(yīng)用程序的窗口 。每一個(gè)應(yīng)用程序的窗口,都會(huì)建立一個(gè) socket 連接,并取一個(gè)名字 。一個(gè)應(yīng)用可以把請(qǐng)求將自己放在窗口堆棧的最下面,或者將一個(gè)命名的應(yīng)用往上移 。如果一個(gè)對(duì)話框要在最上層的窗口上打開,那么窗口管理器就將告訴這個(gè)最上層的窗口它將不再獲得焦點(diǎn),而新對(duì)話框?qū)@得焦點(diǎn) 。

整體尺寸大小
經(jīng)過一系列的改進(jìn)后,我們就得到了一個(gè)穩(wěn)定的,功能和性能都能滿足嵌入系統(tǒng)要求的GUI了 。在ARM系統(tǒng)下,得到的尺寸大小為:
其中 GTK里面仍然還有不需要的代碼,可以將其再去除 。如果再簡(jiǎn)化一下的話,GTK可以做到850KB,總體大小可以到 2.8M 。

運(yùn)行性能

將修改過的 GUI 運(yùn)行在一個(gè) ARM7 的系統(tǒng)上,CPU 為 100MHZ,運(yùn)行時(shí)的效果還不錯(cuò),窗口響應(yīng)用戶操作的速度很迅速,新的畫面創(chuàng)建與顯示的速度都能接受 。
但是,啟動(dòng)時(shí)的時(shí)間卻有些問題,比較慢 。在這個(gè) CPU 上,應(yīng)用程序畫面加載與顯示的時(shí)間需要 2.4秒,其中 1.5 秒是花在了建立與顯示 UI 上 。
在較慢的 CPU 上,這樣的啟動(dòng)速度是 GTK運(yùn)行在 X,X 再寫到 framebuffer 上導(dǎo)致的 。我們需要分析具體的瓶頸在什么地方 。在深入的調(diào)試中,當(dāng)使用PC機(jī)來運(yùn)行我們的應(yīng)用,而在ARM設(shè)備上顯示時(shí),初始化和顯示的時(shí)間幾乎可以忽略不計(jì) 。同樣,將應(yīng)用運(yùn)行在ARM設(shè)備上,而在PC機(jī)上顯示時(shí),性能也很好 。所以數(shù)據(jù)包的傳輸,framebuffer上的顯示及GTK 的運(yùn)算速度都不是問題所在 。速度慢的原因可能是這幾個(gè)因素的先后順序引起的 。而且內(nèi)存的占用上也存在問題 。在初始階段,GTK 構(gòu)造了大量的對(duì)象,GTK 和X是使用共享內(nèi)存來通訊的,X寫到framebuffer,framebuffer也是不變地寫到顯存上 。這些都是發(fā)生在一個(gè)較窄總線上相同的內(nèi)存空間里,這個(gè)就會(huì)引起速度慢 。

現(xiàn)在知道了X在啟動(dòng)時(shí)比較花費(fèi)時(shí)間 。在客戶模式下的GTK 的應(yīng)用,需要連接到X server,通過了認(rèn)證,得到位深及其他資源 。當(dāng)然,使用X系統(tǒng)的好處要遠(yuǎn)大于它的不足 。X系統(tǒng)提供了一個(gè)靈活的client/server模型,這樣更有利于應(yīng)用的靈活加入 。你可以在同一時(shí)間顯示不用的應(yīng)用窗口,而像GTK /Fb等其他的GUI方式無法做到這一點(diǎn),當(dāng)然QPE是個(gè)例外 。
2.4秒的延時(shí),也并不能完全否定一切 。在一個(gè)700MHZ的windows系統(tǒng)的PC上,Microsoft Word, Excel and IE幾乎都需要2秒的時(shí)間來啟動(dòng) 。KEdit, 一個(gè)KDE的應(yīng)用程序,在500MHZ的PIII上,加載的時(shí)間也需要1.37秒 。
對(duì)于啟動(dòng)時(shí)間,需要采用其他的辦法來加以改善 。一個(gè)策略就是在用戶等待的時(shí)候,顯示一些東西來表示系統(tǒng)正在工作,這樣會(huì)使用戶忽略掉啟動(dòng)時(shí)間的緩慢 。另一個(gè)策略就是可以預(yù)先在背后啟動(dòng)一些通用的程序,來有效減少集中啟動(dòng)的時(shí)間 。這也是通常嵌入系統(tǒng)所慣用的做法 。

推薦閱讀