chrome源代碼目錄結構簡介(版本4.1.249.1059)
為了對龐大的源碼項目進行分析,先對源碼目錄樹作一個簡單的介紹,粗略的了解一下各個模塊的功能分布情況,chrome源代碼src目錄下的結構如下圖:

app:該目錄下的代碼主要是和各個操作系統(tǒng)平臺相關的應用上層代碼的提煉。不同操作系統(tǒng)可能對應不同的c++實現(xiàn)文件。比如裁剪板操作、操作系統(tǒng)數(shù)據(jù)交換接口、資源管理等。代碼量不大。
base:基礎設施代碼,該目錄下的代碼對理解chrome的基礎架構設計是必不可少的,這里面是大量的工具性、框架性代碼實現(xiàn),比如對進程、線程、消息循環(huán)的統(tǒng)一封裝,對字符串處理、c++對象生命周期管理、json解析、路徑服務、日期時間、日志框架等。
breakpad:崩潰服務框架庫,在程序發(fā)生異常時,對異常進行捕獲后可以將崩潰現(xiàn)場數(shù)據(jù)發(fā)送給google進行分析。
build:編譯構建相關的工具支持。
chrome:瀏覽器主程序實現(xiàn)代碼,包括了UI實現(xiàn)和Render部分兩大部分,當然這兩部分又是以大量的其他基礎設施代碼為基礎的,比如Render部分是對webkit的封裝。這部分代碼量很大,google自產(chǎn)代碼,頻繁的改動代碼主要集中在這里。
chrome_frame:這是google針對IE開發(fā)的一個插件,使得IE可以使用chrome的渲染引擎來顯示網(wǎng)頁。
courgette:小胡瓜,這個項目是一個針對升級使用的,目的是減少升級過程中數(shù)據(jù)下載的大小。比如版本升級可能需要更新某個DLL文件,而這個文件可能有10M大小,而新版本可能只是對該DLL改動了一行代碼。通過courgette可以找出這兩個DLL之間的差異部分,使得不需要下載10M大小,而可能只需要下載幾十K的差異描述數(shù)據(jù)即可完成升級。
gears:是一個用來開發(fā)離線網(wǎng)絡應用的工具,是一個JavaScript應用編程接口,通過Google Gears可以允許多種Web應用程序脫機運行,可以讓用戶在上線或者離線狀態(tài)下運行網(wǎng)絡程序。離線就需要作本地存儲,而在html5中就有本地存儲相關的接口規(guī)范,因此google將放棄gears而采用html5的方式。
google_update:google更新,用于自動升級。
googleurl:google實現(xiàn)的URL解析輔助工具庫。
ipc:非常重要的進程通信基礎設施庫。chrome是多進程架構,而進程間的通信就是以ipc庫作為基礎支持的。具體在windows下的實現(xiàn)方式是命名管道、異步IO(完成端口)、共享內存來實現(xiàn)進程間高效的數(shù)據(jù)傳輸。ipc不僅封裝了IO機制,而且還定義了統(tǒng)一的消息傳輸格式。
media:多媒體音頻視頻解碼相關的內容。
native_client:在瀏覽器中運行native代碼的技術,是一個插件。native_client項目被視為微軟ActiveX技術的繼任者。項目具體細節(jié)可參考native client官網(wǎng)。
net:網(wǎng)絡協(xié)議實現(xiàn)基礎庫,包括ftp、http等客戶端協(xié)議棧的實現(xiàn)代碼。
o3d:一個插件,可在瀏覽器中創(chuàng)建豐富的交互式三維應用程序,以后在瀏覽器中玩3D游戲將不再遙遠。具體細節(jié)參考o3d項目官網(wǎng)。
printing:打印方面的內容。
rlz:用戶行為追蹤,這個沒有源碼,這個庫的目的就是將用戶行為收集報告給google。雖然這對產(chǎn)品的改善有很大的幫助,但也存在隱私問題。
sandbox:沙盒安全技術,在瀏覽網(wǎng)頁的時候,保護計算機不被惡意代碼侵入。
sdch:一種新的壓縮技術。瀏覽器在http請求時可以寫成Accept-Encoding: sdch, gzip。服務器如果支持的話,就可以返回sdch格式的壓縮數(shù)據(jù)給瀏覽器。
site_scons:一個工具,里面是一個python腳本文件,具體用處還未深入了解。
skia:google收購的一家公司提供的2D圖形渲染庫,圖形庫的優(yōu)劣決定了瀏覽器的顯示效果。據(jù)說IE9將采用GPU顯卡渲染,估計瀏覽器采用GPU渲染將很快普及。
testing:c++單元測試框架庫。
third_party:該目錄下是大量的第三方開源支持庫,最重要的當然是webkit內核了。
v8:google開發(fā)的高效的javascript引擎,是chrome的重要內核庫。
views:界面控件元素庫,對不同操作系統(tǒng)平臺的UI事件交互機制、各種控件如按鈕、菜單、樹、checkbox等進行了統(tǒng)一的封裝。界面繪制采用skia來實現(xiàn)。
webkit:google對webkit內核的封裝層,其目的是在webkit內核和上層調用之間提供一個中間層。該目錄下有一個重要的glue工程。是名副其實的‘膠水’層。
整個源碼工程雖然龐大,但其結構是非常清晰的,代碼風格很統(tǒng)一,就象是一個人寫的一樣。借助vs2008強大的可視化調試,我們只要掌握好粒度,從粗到細,從整體到局部逐漸深入,帶著問題去跟蹤調試,很快就會上手進入狀態(tài)。