chrome源代碼目錄結(jié)構(gòu)簡(jiǎn)介(版本4.1.249.1059)

為了對(duì)龐大的源碼項(xiàng)目進(jìn)行分析,先對(duì)源碼目錄樹作一個(gè)簡(jiǎn)單的介紹,粗略的了解一下各個(gè)模塊的功能分布情況,chrome源代碼src目錄下的結(jié)構(gòu)如下圖:

  app:該目錄下的代碼主要是和各個(gè)操作系統(tǒng)平臺(tái)相關(guān)的應(yīng)用上層代碼的提煉。不同操作系統(tǒng)可能對(duì)應(yīng)不同的c++實(shí)現(xiàn)文件。比如裁剪板操作、操作系統(tǒng)數(shù)據(jù)交換接口、資源管理等。代碼量不大。

  base:基礎(chǔ)設(shè)施代碼,該目錄下的代碼對(duì)理解chrome的基礎(chǔ)架構(gòu)設(shè)計(jì)是必不可少的,這里面是大量的工具性、框架性代碼實(shí)現(xiàn),比如對(duì)進(jìn)程、線程、消息循環(huán)的統(tǒng)一封裝,對(duì)字符串處理、c++對(duì)象生命周期管理、json解析、路徑服務(wù)、日期時(shí)間、日志框架等。

  breakpad:崩潰服務(wù)框架庫,在程序發(fā)生異常時(shí),對(duì)異常進(jìn)行捕獲后可以將崩潰現(xiàn)場(chǎng)數(shù)據(jù)發(fā)送給google進(jìn)行分析。

  build:編譯構(gòu)建相關(guān)的工具支持。

  chrome:瀏覽器主程序?qū)崿F(xiàn)代碼,包括了UI實(shí)現(xiàn)和Render部分兩大部分,當(dāng)然這兩部分又是以大量的其他基礎(chǔ)設(shè)施代碼為基礎(chǔ)的,比如Render部分是對(duì)webkit的封裝。這部分代碼量很大,google自產(chǎn)代碼,頻繁的改動(dòng)代碼主要集中在這里。

  chrome_frame:這是google針對(duì)IE開發(fā)的一個(gè)插件,使得IE可以使用chrome的渲染引擎來顯示網(wǎng)頁。

  courgette:小胡瓜,這個(gè)項(xiàng)目是一個(gè)針對(duì)升級(jí)使用的,目的是減少升級(jí)過程中數(shù)據(jù)下載的大小。比如版本升級(jí)可能需要更新某個(gè)DLL文件,而這個(gè)文件可能有10M大小,而新版本可能只是對(duì)該DLL改動(dòng)了一行代碼。通過courgette可以找出這兩個(gè)DLL之間的差異部分,使得不需要下載10M大小,而可能只需要下載幾十K的差異描述數(shù)據(jù)即可完成升級(jí)。

  gears:是一個(gè)用來開發(fā)離線網(wǎng)絡(luò)應(yīng)用的工具,是一個(gè)JavaScript應(yīng)用編程接口,通過Google Gears可以允許多種Web應(yīng)用程序脫機(jī)運(yùn)行,可以讓用戶在上線或者離線狀態(tài)下運(yùn)行網(wǎng)絡(luò)程序。離線就需要作本地存儲(chǔ),而在html5中就有本地存儲(chǔ)相關(guān)的接口規(guī)范,因此google將放棄gears而采用html5的方式。

  google_update:google更新,用于自動(dòng)升級(jí)。

  googleurl:google實(shí)現(xiàn)的URL解析輔助工具庫。

  ipc:非常重要的進(jìn)程通信基礎(chǔ)設(shè)施庫。chrome是多進(jìn)程架構(gòu),而進(jìn)程間的通信就是以ipc庫作為基礎(chǔ)支持的。具體在windows下的實(shí)現(xiàn)方式是命名管道、異步IO(完成端口)、共享內(nèi)存來實(shí)現(xiàn)進(jìn)程間高效的數(shù)據(jù)傳輸。ipc不僅封裝了IO機(jī)制,而且還定義了統(tǒng)一的消息傳輸格式。

  media:多媒體音頻視頻解碼相關(guān)的內(nèi)容。

  native_client:在瀏覽器中運(yùn)行native代碼的技術(shù),是一個(gè)插件。native_client項(xiàng)目被視為微軟ActiveX技術(shù)的繼任者。項(xiàng)目具體細(xì)節(jié)可參考native client官網(wǎng)

  net:網(wǎng)絡(luò)協(xié)議實(shí)現(xiàn)基礎(chǔ)庫,包括ftp、http等客戶端協(xié)議棧的實(shí)現(xiàn)代碼。

  o3d:一個(gè)插件,可在瀏覽器中創(chuàng)建豐富的交互式三維應(yīng)用程序,以后在瀏覽器中玩3D游戲?qū)⒉辉龠b遠(yuǎn)。具體細(xì)節(jié)參考o3d項(xiàng)目官網(wǎng)

  printing:打印方面的內(nèi)容。

  rlz:用戶行為追蹤,這個(gè)沒有源碼,這個(gè)庫的目的就是將用戶行為收集報(bào)告給google。雖然這對(duì)產(chǎn)品的改善有很大的幫助,但也存在隱私問題。

  sandbox:沙盒安全技術(shù),在瀏覽網(wǎng)頁的時(shí)候,保護(hù)計(jì)算機(jī)不被惡意代碼侵入。

  sdch:一種新的壓縮技術(shù)。瀏覽器在http請(qǐng)求時(shí)可以寫成Accept-Encoding: sdch, gzip。服務(wù)器如果支持的話,就可以返回sdch格式的壓縮數(shù)據(jù)給瀏覽器。

  site_scons:一個(gè)工具,里面是一個(gè)python腳本文件,具體用處還未深入了解。

  skia:google收購的一家公司提供的2D圖形渲染庫,圖形庫的優(yōu)劣決定了瀏覽器的顯示效果。據(jù)說IE9將采用GPU顯卡渲染,估計(jì)瀏覽器采用GPU渲染將很快普及。

  testing:c++單元測(cè)試框架庫。

  third_party:該目錄下是大量的第三方開源支持庫,最重要的當(dāng)然是webkit內(nèi)核了。

  v8:google開發(fā)的高效的javascript引擎,是chrome的重要內(nèi)核庫。

  views:界面控件元素庫,對(duì)不同操作系統(tǒng)平臺(tái)的UI事件交互機(jī)制、各種控件如按鈕、菜單、樹、checkbox等進(jìn)行了統(tǒng)一的封裝。界面繪制采用skia來實(shí)現(xiàn)。

  webkit:google對(duì)webkit內(nèi)核的封裝層,其目的是在webkit內(nèi)核和上層調(diào)用之間提供一個(gè)中間層。該目錄下有一個(gè)重要的glue工程。是名副其實(shí)的‘膠水’層。

  整個(gè)源碼工程雖然龐大,但其結(jié)構(gòu)是非常清晰的,代碼風(fēng)格很統(tǒng)一,就象是一個(gè)人寫的一樣。借助vs2008強(qiáng)大的可視化調(diào)試,我們只要掌握好粒度,從粗到細(xì),從整體到局部逐漸深入,帶著問題去跟蹤調(diào)試,很快就會(huì)上手進(jìn)入狀態(tài)。