天天看點

chrome 源碼分析

chrome源代碼目錄結構簡介(版本4.1.249.1059)

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

chrome 源碼分析

  app:該目錄下的代碼主要是和各個作業系統平台相關的應用上層代碼的提煉。不同作業系統可能對應不同的c++實作檔案。比如裁剪闆操作、作業系統資料交換接口、資源管理等。代碼量不大。

  base:基礎設施代碼,該目錄下的代碼對了解chrome的基礎架構設計是必不可少的,這裡面是大量的工具性、架構性代碼實作,比如對程序、線程、消息循環的統一封裝,對字元串處理、c++對象生命周期管理、json解析、路徑服務、日期時間、日志架構等。

  breakpad:崩潰服務架構庫,在程式發生異常時,對異常進行捕獲後可以将崩潰現場資料發送給google進行分析。

  build:編譯建構相關的工具支援。

  chrome:浏覽器主程式實作代碼,包括了UI實作和Render部分兩大部分,當然這兩部分又是以大量的其他基礎設施代碼為基礎的,比如Render部分是對webkit的封裝。這部分代碼量很大,google自産代碼,頻繁的改動代碼主要集中在這裡。

  chrome_frame:這是google針對IE開發的一個插件,使得IE可以使用chrome的渲染引擎來顯示網頁。

  courgette:小胡瓜,這個項目是一個針對更新使用的,目的是減少更新過程中資料下載下傳的大小。比如版本更新可能需要更新某個DLL檔案,而這個檔案可能有10M大小,而新版本可能隻是對該DLL改動了一行代碼。通過courgette可以找出這兩個DLL之間的差異部分,使得不需要下載下傳10M大小,而可能隻需要下載下傳幾十K的差異描述資料即可完成更新。

  gears:是一個用來開發離線網絡應用的工具,是一個JavaScript應用程式設計接口,通過Google Gears可以允許多種Web應用程式脫機運作,可以讓使用者在上線或者離線狀态下運作網絡程式。離線就需要作本地存儲,而在html5中就有本地存儲相關的接口規範,是以google将放棄gears而采用html5的方式。

  google_update:google更新,用于自動更新。

  googleurl:google實作的URL解析輔助工具庫。

  ipc:非常重要的程序通信基礎設施庫。chrome是多程序架構,而程序間的通信就是以ipc庫作為基礎支援的。具體在windows下的實作方式是命名管道、異步IO(完成端口)、共享記憶體來實作程序間高效的資料傳輸。ipc不僅封裝了IO機制,而且還定義了統一的消息傳輸格式。

  media:多媒體音頻視訊解碼相關的内容。

  native_client:在浏覽器中運作native代碼的技術,是一個插件。native_client項目被視為微軟ActiveX技術的繼任者。項目具體細節可參考native client官網。

  net:網絡協定實作基礎庫,包括ftp、http等用戶端協定棧的實作代碼。

  o3d:一個插件,可在浏覽器中建立豐富的互動式三維應用程式,以後在浏覽器中玩3D遊戲将不再遙遠。具體細節參考o3d項目官網。

  printing:列印方面的内容。

  rlz:使用者行為追蹤,這個沒有源碼,這個庫的目的就是将使用者行為收集報告給google。雖然這對産品的改善有很大的幫助,但也存在隐私問題。

  sandbox:沙盒安全技術,在浏覽網頁的時候,保護計算機不被惡意代碼侵入。

  sdch:一種新的壓縮技術。浏覽器在http請求時可以寫成Accept-Encoding: sdch, gzip。伺服器如果支援的話,就可以傳回sdch格式的壓縮資料給浏覽器。

  site_scons:一個工具,裡面是一個python腳本檔案,具體用處還未深入了解。

  skia:google收購的一家公司提供的2D圖形渲染庫,圖形庫的優劣決定了浏覽器的顯示效果。據說IE9将采用GPU顯示卡渲染,估計浏覽器采用GPU渲染将很快普及。

  testing:c++單元測試架構庫。

  third_party:該目錄下是大量的第三方開源支援庫,最重要的當然是webkit核心了。

  v8:google開發的高效的javascript引擎,是chrome的重要核心庫。

  views:界面控件元素庫,對不同作業系統平台的UI事件互動機制、各種控件如按鈕、菜單、樹、checkbox等進行了統一的封裝。界面繪制采用skia來實作。

  webkit:google對webkit核心的封裝層,其目的是在webkit核心和上層調用之間提供一個中間層。該目錄下有一個重要的glue工程。是名副其實的‘膠水’層。

  整個源碼工程雖然龐大,但其結構是非常清晰的,代碼風格很統一,就象是一個人寫的一樣。借助vs2008強大的可視化調試,我們隻要掌握好粒度,從粗到細,從整體到局部逐漸深入,帶着問題去跟蹤調試,很快就會上手進入狀态。457

繼續閱讀