2010年4月21日星期三

Firefox 3.6.4 未來的關鍵 OOPP

Mozilla 在 2010/5 月釋出新版本的 Firefox 3.6.4, 此版本將會有重大改變, 過去外掛(plugin)程序惱人的異常狀態下崩潰掛掉整個 Firefox 程式的問題, 在新版加入 Lorentz 的功能 Out of Process Plugins(OOPP)中可以解決了(排除沒有 bug 的話), OOPP 將外掛程式以獨立程序(process)中執行, 一但程序異常崩潰時會顯示程序提示頁面, 不會拖垮整個 Firefox 程式。

不過, 當然新功能 OOPP 應用時仍有不小的臭蟲(bug), 甚至異常的 crash, 而自行編譯的社群版(Linux)也有兼容性問題的個別情況。

Firefox 3.6.4 編譯設定加入了兩處異同條件如下:
--disable-ipc Disable IPC supports for tabs and plugins
--enable-ipdl-tests Enable expensive IPDL tests

一個是 IPC(Inter-process communication) 的支援, NSPR 的 API 下開發 OOPP 的應用
另一個是 IPDL(IPC Protocol Definition Language) 的驗測

參考:
https://developer.mozilla.org/en/IPDL
https://developer.mozilla.org/en/Configuring_Build_Options

編譯 Firefox 3.6.4(Linux) 時預設自動加入新增 IPC 功能(OOPP), 編譯的問體如下:

1. 當預設編譯時會使用系統 nspr 而編譯錯誤
In file included from nsXPComInit.cpp:41:
./../ipc/chromium/src/base/basictypes.h:22:26: error: nspr/prtypes.h: No such file or directory
./../ipc/chromium/src/base/basictypes.h:34:36: error: nspr/obsolete/protypes.h: No such file or directory
./../ipc/chromium/src/base/basictypes.h:96: error: 'uint32' does not name a type
./../ipc/chromium/src/base/basictypes.h:102: error: 'int32' does not name a type
./../ipc/chromium/src/base/basictypes.h:103: error: 'int32' does not name a type
./../ipc/chromium/src/base/basictypes.h:302: error: 'uint32' does not name a type

make[5]: *** [nsXPComInit.o] Error 1
make[5]: Leaving directory `/usr/src/redhat/BUILD/firefox-3.6.4/mozilla-1.9.2/xpcom/build'
make[4]: *** [libs] Error 2
make[4]: Leaving directory `/usr/src/redhat/BUILD/firefox-3.6.4/mozilla-1.9.2/xpcom'
make[3]: *** [libs_tier_xpcom] Error 2
make[3]: Leaving directory `/usr/src/redhat/BUILD/firefox-3.6.4/mozilla-1.9.2'
make[2]: *** [tier_xpcom] Error 2
make[2]: Leaving directory `/usr/src/redhat/BUILD/firefox-3.6.4/mozilla-1.9.2'
make[1]: *** [default] Error 2
make[1]: Leaving directory `/usr/src/redhat/BUILD/firefox-3.6.4/mozilla-1.9.2'
make: *** [build] Error 2

mozilla 仍未釋出修正支援獨立程序的系統 nspr API, 所以要編譯預設 IPC(OOPP) 功能的話暫時必需同時編譯內建 nspr 執行庫
.mozconfig 要移除 ac_add_options --with-system-nspr

2. 執行編譯了 IPC(OOPP) 的 Firefox 3.6.4(Linux) 時遇到有任何 plugin(例如 flash, java..) 的網頁會程式異常停頓, 程式完全沒反應
~/.xsession-errors 錯誤記錄如下:
** (firefox:8607): WARNING **: Serious fd usage error 14
** (firefox:8607): WARNING **: Serious fd usage error 12

不明原因, 可以暫時新增機碼停用 IPC(OOPP)
about:config
dom.ipc.plugins.enabled 設定改為 disable

3. 如何編譯沒有 IPC(OOPP) 的 Firefox 3.6.4(Linux)
IPC 功能是預設編譯, 需要修改編譯項目停用 IPC
.mozconfig 新增 ac_add_options --disable-ipc
.mozconfig 使用 ac_add_options --with-system-nspr

4. Firefox 3.6.4 OOPP 臭蟲
已知的臭蟲
新增的臭蟲

2010年4月1日星期四

麗臺 Leadtek GT220 故障的替代 EVGA GT220

原定於三月時候組裝 DIY 一台全新電腦取代自己桌面機(ThinkCentre A57)並同時淘汰數台殘舊中古電腦, 不過一波三折下原來的計劃被一再拖延, 問題的主角是去年十二月時購買的麗臺 Leadtek GT220 DDR3(LP) 圖像顯示卡, 雖然顯示卡晶片 GT220 有不錯的節能降溫表現, 不過使用了三個多月後顯示卡逐漸出現奇怪的問題, 最初時 3D 遊戲畫面突然部份 texture 變色的奇怪狀態, 後來最常見的問題是在全螢幕 3D 遊戲時畫面會無原因不定時像當機般的停頓(鍵盤和滑鼠還有反應), 有時還會彈出桌面(Windows 7 還好, XP 會死當在遊戲畫面中 CPU 爆 100%), 系統事件 Event log 內紀錄 "Display driver nvlddmkm stopped responding and has successfully recovered", 試過不同版本號的驅動程式都無法排除原因(當然避免了196.75的風扇問題), 亦加裝了額外風扇吹向顯示卡(排除了非溫度問題, 這三個月的天氣其實也十分清涼及寒冷啊), 試過用 XP 或 Windows 7 都問題一樣, 也沒有超頻的正常使用而已, 而且情況漸趨嚴重, 到三月中某天(星期日)顯示卡在關機後再啟動時漆黑一片, 沒有螢幕訊號輸出, 風扇長轉, 電腦完全不能啟動(BIOS 不能起動, 沒有 beep 聲, 好像卡在顯示卡起動中), 移除顯示卡後電腦才可正常啟動(用主機板內建顯示晶片組), 再三測試甚至出動測電表都情況一樣。
在無法解決下唯有星期一到代理維修客戶服務中心, 怎知 Leadtek GT220 顯示卡在維修技術支援人員手中竟然會返生運作(是天氣或是運氣嗎), 最後拿回再測試, 由於計劃了組裝一台全新電腦, 到腦場先採購了一顆電源供應器(火牛) Corsair VX450W

而且也順道採購了組裝電腦的配件(主機板、CPU、記憶體、硬碟和機箱), 然後再測試半生不死的 Leadtek GT220 顯示卡...第一回合完。

在使用購買的全新電源火牛下 Leadtek GT220 顯示卡仍然是故障的漆黑一片無螢幕訊號, 無解又無奈下唯有再次到代理維修中心(星期四), 顯示卡在維修技術支援人員手中終於都露出原型...死卡, 使用 debug 卡也無法排解問題(FF碼), 即場更換了新盒新卡, 在欣喜和盼望的心情下回程...第二回合完。

不幸的煩人腦惱纏繞怎會這麼容易消散呢?! 安裝了更換的 Leadtek GT220 顯示卡, 有畫面訊號還好的, 不過...當安裝顯示卡驅動程式後, 重啟電腦回到系統桌面時, 畫面竟然出現滿螢幕花點(天啊!! 何必偏偏選中我)

測試過不同版本號的驅動程式情況一樣(使用其他電腦亦如是), 懷疑是顯示卡的部份電子零件質量問題, 失望極透下唯有又再次到代理維修中心(星期五), 顯示卡在維修技術支援人員手中無解(情況相同滿螢幕花點), 在經過與技術支援人員相談討論(麗臺 Leadtek 品質的題外話)後可以更換其他品牌的類同產品, 最後選擇了 EVGA 的 GT220 1G DDR3(01G-P3-1226-LR), EVGA 是國外(歐美)的著名暢銷 diy 族品牌主打 Nvidia 系列, 在失望與盼望的刺激下回程...第三回合完。

經歷了差不多一星期的腦惱後在新換顯示卡 EVGA GT220 1G DDR3 問題解決終於可以回復正常, 代理維修技術支援人員的態度亦算滿意, 我的抱怨就只是對麗臺 Leadtek 產品質量和QC監管的失望而已, 也樂得可以嘗試 EVGA 品牌的產品, 不過組裝全新電腦計劃被延後到三月尾才搞定。

在網上也看到 EVGA GT220 SSC DDR3(01G-P3-1227-LR) 有風扇嘈音問題, 不過手上的 01G-P3-1226-LR 普通版卻沒有那麼嚴重, 在實測時嘈音度算可接受(開啟機箱距離兩尺), 風扇 idle 時跑 10%(比較 Leadtek 的 40% 更低更靜), 在關閉機箱下深夜時也很寧靜, 而 EVGA 也提供了降速靜音的新 BIOS(1227 及 1226 型號 BIOS 版本號 70.16.37.00.24), 只需要向 EVGA 發支援電郵, 官方回函提供下載位置(其實網上已經流傳官方下載位置); 實測使用新 BIOS 測試, 結果是新 BIOS 的風扇 idle 時下降到跑 1%, 當然嘈音度大減, 不過溫度就明顯上升不小, 顯示卡 idle 時溫度由舊 BIOS 的 45℃(室溫 20℃ 關閉機箱, 開啟機箱的話 38℃) 升到新 BIOS 的 56℃, 跑 3D 三十分鐘後舊 BIOS 的 73℃ 升到新 BIOS 的 87℃, 如果到盛夏季節, 顯示卡高溫可能到達(甚至超過) 95℃以上, 所以還是乖乖的回復原來的舊 BIOS 較安心...新組裝電腦機箱還沒有做溫度調校, 後續啊。

EVGA GT220 DDR3(01G-P3-1226-LR) 的 GPUZ 顯示晶片資料, BIOS 版本號是 70.16.2E.00.02

使用 EVGA Precision 顯示卡(Nvidia)微調專用軟體, 還可以使用 on-screen display 在 3D 畫面時展示顯示卡資料狀態(還可以截圖)。