天天看點

chrome使用的開源工程介紹

在chrome位址欄輸入about:credits就可以看到chrome使用的開源工程了,之前也有一篇介紹chrome開源工程的文章:Code Reuse in Google Chrome Browser,大家可以參考一下。

David M. Gay's floating point routines homepage

fp是netlib的一部分,主要用于浮點數運算,數的二進制與十進制的轉換以及字元串和浮點數之間的轉換等。這種庫在程式移植到嵌入式裝置時非常重要,如果移植的不好,可能出現浮點運算錯誤,或者在進行浮點運算時非常慢的問題。這個庫裡面實作的比較重要的函數有:strtod,dtoa,pow5mult,diff,cmp,lshift等。David M. Gay的這個庫被廣泛使用,例如Apple Libc也是使用的這個。如果在移植浏覽器時出現調用dtoa進入死循環的問題,就需要特别注意編譯fp庫時的宏定義了。chrome用這個庫的一個原因是js裡面的Number都是double類型的,是以js引擎必須能夠正确和快速的處理浮點數。chromde的V8還實作了FastDtoa用來更快速地處理字元串和浮點數之間的轉換。

dynamic annotations homepage

這個庫主要用來檢測死鎖的。這個庫的另外一個作用是來讓代碼檢測工具(例如valgrind)智能點,并少報一些警告。例如下面是chrome裡面實作多線程安全singleton模式的一段代碼:

// This annotation helps race detectors recognize correct lock-less
      // synchronization between different threads calling get().
      // See the corresponding HAPPENS_AFTER below and above.
      ANNOTATE_HAPPENS_BEFORE(&instance_);
      base::subtle::Release_Store(
          &instance_, reinterpret_cast
  
   (newval));

      
   if (Traits::kRegisterAtExit)
        base::AtExitManager::RegisterCallback(OnExit, NULL);
        

Netscape Portable Runtime (NSPR) homepage

NSPR是Mozilla開發的一個跨平台庫,它主要提供了類型定義,線程,線程同步,檔案,網絡,時間處理,記憶體管理等的API,NSPR API比較明顯的一個特征是以PR開頭,例如PRInt32,PRThread,PR_CreateThread。它在程式和系統之間的關系如下圖:

chrome使用的開源工程介紹

NSPR被很多跨平台應用使用着,例如SpiderMonkey的線程安全就是依賴NSPR實作的,《C++跨平台開發技術指南》這本書裡面也提到了NSPR。chrome隻是用到了NSPR的類型定義(prtypes.h)和時間處理(prtime.cc),chrome裡面用NSPR主要是因為NSS和NPAPI依賴其的緣故。

Network Security Services (NSS) homepage

NSS主要用來支援網絡安全,例如SSL協定,S/MIME,一些加密算法(SSL,TLS,PKCS等)。NSS是和OpenSSL差不多的東西,它比OpenSSL大,依賴的也比OpenSSL多,但是它支援PKCS #11,可以用于智能卡的加密。既然用了NSS,Chrome也就沒必要用OpenSSL了。

purify headers homepage

Rational Purify是一個IBM出的自動化測試工具,主要用來檢測記憶體相關的錯誤。

google-glog's symbolization library homepage

google-glog主要用于日志記錄,類似的工程有log4cpp,java中對應的叫做log4j。google-glog在google的工程中被廣泛使用,例如google-breakpad(一個用于崩潰報告的項目,對應的服務端有http://code.google.com/p/socorro/),當chrome出現下面的對話框時,就是google-breakpad檢測出來的。

chrome使用的開源工程介紹

valgrind homepage

Valgrind是一款用于記憶體調試、記憶體洩漏檢測以及性能分析的軟體開發工具。google的測試工作做的挺好的,不但測試工具多,而且大部分cc檔案都有對應的測試代碼,一般和cc檔案處于同級目錄,名字叫做xxxxx_unittest.cc。

xdg-mime homepage

xdg-mime是一個根據檔案名和檔案内來判斷檔案類型(mime資訊)的工具。

xdg-user-dirs homepage

xdg-user-dirs是一個用于linux平台上管理桌面檔案夾,我的音樂,我的圖檔等檔案夾的工具。chrome在linux上設定chrome下載下傳檔案夾時用到了此功能。

BSDiff homepage

BSDiff是一個二進制比較工具,對應的還有bspatch。像svn diff這種工具隻能比較文本等檔案,而不能比較二進制檔案。

chrome用BSDiff幹什麼呢?用來chrome的自動更新,具體請參考:Software Updates: Courgette,摘取其中一段來看看效果

Here are the sizes in bytes for the recent 190.1->190.4 update on the developer channel:

Full update                 10,385,920

bsdiff update              704,512

Courgette update      78,848

二進制比較還有一些其它的算法,例如rsync,這個在同步檔案時非常有用,Dropbox同步采用的算法也是rsync。自動更新其實就是一個同步操作。

XZ Utils homepage

XZ Utils是一種依賴于LZMA SDK(7z也是采用這個)的壓縮工具。chrome用XZ Utils做chrome安裝程式的壓縮。

google-jstemplate homepage

google-jstemplate是一個js模闆處理庫,比較适合ajax程式,有點像struts。有一份介紹的ppt在http://google-jstemplate.googlecode.com/svn/slides/jstemplate.html。

Launchpad Translations homepage

Launchpad Translations是用于chrome多語言支援的檔案。chrome主要是通過GRIT (Google Resource and Internationalization Tool) 将xtb和grb檔案編譯成h檔案,然後放到資源檔案(.rc)裡面。更多多語言支援的細節請參考http://www.chromium.org/developers/design-documents/ui-localization,Chromium本地化的方法和chromium之國際化。

Mozilla Personal Security Manager homepage

Mozilla Personal Security Manager主要用于linux系統的證書管理,文檔可以參考:http://www.mozilla.org/projects/security/pki/psm/arch.html。windows上與此相似的就是如下東西了:

chrome使用的開源工程介紹

gssapi homepage

gssapi的全稱是Generic Security Services Application Program Interface,它提供讓程式能夠通路安全服務的應用程式接口,與它相關的技術有RADIUS,SASL,TLS和SSPI等。對于安全認證時的授權協商,在windows上chrome使用的是secur32.dll提供的SSPI(Security Support Provider Interface),而linux上則是使用gssapi。更多HTTP認證的資訊可以參考:http://www.chromium.org/developers/design-documents/http-authentication

Google Toolbox for Mac homepage

主要用于chrome在mac上的實作。當然Google Toolbox for Mac并不隻是為了chrome,還用于google在iphone和mac上的其他産品。

WebKit homepage

webkit是什麼就不說了,chrome的核心就是WebKit。

ActiveX Scripting SDK homepage

還不清楚chrome用ActiveX Scripting SDK做什麼,也沒在chrome裡面找到相關代碼。可能和插件相關,用于支援object标簽。

Almost Native Graphics Layer Engine homepage

簡稱叫做ANGLE。chrome用ANGLE主要是為了用DirectX 9實作WebGL功能。chrome為什麼不用opengl實作了?原因是windows opengl的各個版本是二進制不相容的。微軟的相關解釋在http://support.microsoft.com/kb/124034/zh-cn,“也就 OpenGL 程式二進制級别不相容,但在源代碼級别都相容”,也就是說一個opengl程式要能夠在特定版本的windows上運作,必須在那個平台上重新編譯。另外,各個顯示卡的驅動對opengl的支援程度也不近相同。windows上3D程式設計的真正标準是DirectX,導緻chrome也必須用WebGl來實作weebgl(safari也是如此)。DirectX和OpenGl之間的戰争與IE和netscape的戰争有得一拼,可以參考http://www.cppblog.com/xczhang/archive/2007/12/09/38105.html。linux和mac os上opengl就是其的主要3D API,是以不存在問題。

Apple sample code homepage

蘋果的開發者中心,裡面有很多文檔和例子,相當于微軟的msdn網站。在mac和iphone上程式設計可以參考一下,寫html5的開發者也可以看一下http://www.apple.com/html5/,裡面有很多蘋果的html5 demo。蘋果的開源工程也在裡面(http://developer.apple.com/opensource/,http://opensource.apple.com/source/)。另外,很多人抱怨webkit沒有文檔,其實蘋果寫了很多關于webkit的文檔,例如WebKit Objective-C Programming Guide。

Darwin homepage

Darwin是由蘋果電腦的一個開放源代碼作業系統. 蘋果和開源的關系很有趣,可以參考劉江寫的《蘋果的另一面:開源軟體重鎮》。

bsdiff homepage

Mozilla實作的前面提到過的BSDiff算法。

bspatch homepage

Mozilla實作的前面提到過的BSPatch算法。

bzip2 homepage

又一個壓縮算法,比gzip壓縮率更高。bzip2主要用來支援HTTP裡面的内容編碼格式(Content Codings),chrome支援的Content Codings經常在變化,可以參考Google Chrome支援bzip2壓縮和chrome支援sdch壓縮,另外不再支援bzip2壓縮。從我使用的chrome 13版本看,chrome支援gzip,deflate,sdch,而不支援bzip2壓縮。

chrome使用的開源工程介紹

Google Cache Invalidation API homepage

用于chrome的緩存管理。chrome使用的是disk cache來實作緩存的,需要用Chrome Cache Viewer等工具才能看disk cache生成的檔案。

Compact Language Detection homepage

主要用來檢測是什麼語言,用于chrome的拼寫檢查,更詳細的請參考http://www.chromium.org/developers/design-documents/advancedspellchecker。

codesighs homepage

又一個代碼檢測工具,Mozilla的,文檔在https://wiki.mozilla.org/Codesighs,主要作用是檢測代碼的大小。

expat homepage

一個xml解析庫,和libxml是一類的,不過要比libxml輕量。

ffmpeg homepage

主要用來音頻和視訊的處理,例如錄制和轉換。一些軟體具備将pc上的視訊轉換到手機上視訊的能力,很多用的就是ffmpeg,例如豌豆莢就是這麼幹的。chome用這個庫主要用來支援html的video和audio。

OpenGL ES 2.0 Programming Guide homepage

OpenGL教材。

OpenGL ES 2.0 Conformance Tests homepage

OpenGL相容性測試。

gpsd homepage

一個GPS服務,主要用來擷取地理位置。html5有擷取位址位置(geolocation)的API,可以參考http://dev.w3.org/geo/api/spec-source.html和http://diveintohtml5.org/geolocation.html。gpsd就是用來在linux上實作html5 geolocation的。

Harfbuzz homepage

用于文本渲染,不太熟。在搜尋Harfbuzz相關技術時找到了幾篇不錯的文章:閑聊文本渲染技術的近期發展,浏覽器如何渲染文本,漢字的幾何中心 。

hunspell homepage

一個拼寫檢測的庫。很多軟體都是用這個庫做拼寫檢測,例如LibreOffice, OpenOffice和Firefox。

hunspell dictionaries homepage

hunspell的詞典。

hyphen-2.6 homepage

主要用于hunspell拼寫檢測裡面的連字處理。

IAccessible2 COM interfaces for accessibility homepage

Windows上用于殘障人士士的一些功能。

iccjpeg homepage

用于jpeg圖檔的處理。

ICU homepage

國際化(I18N)的處理。ICU是最大的一塊,有12MB左右,如果隻需要支援幾種特定的語言,可以用http://apps.icu-project.org/datacustom/來生成小尺寸的ICU。

Chinese and Japanese Word List homepage

中文字和日文字,ICU的一部分。

ISimpleDOM COM interfaces for accessibility homepage

用于殘障人士士,對于連結裡面有詳細的介紹。

jemalloc homepage

一個malloc實作,主要用在firefox上,比libc裡面的malloc快。

lcov homepage

代碼覆寫率測試工具,下面的圖檔應該熟吧:

chrome使用的開源工程介紹

libevent homepage

libevent是一個異步事件處理軟體函式庫,對于伺服器程式設計的人應該熟吧,很多伺服器端就是用libevent來解決C10K問題的。chrome用這個好像是用于裡面的flip server,通過flip server可以實作spdy協定。spdy是google研究的新協定,比HTTP協定更高效,可以用來幹什麼自己google。

libjingle homepage

GTalk裡面實作視訊聊天和P2P功能的庫。GTalk使用的XMPP協定,但XMPP對檔案傳輸和視訊聊天支援都不行,Google就自己開發了一個,現在已成了XMPP标準的推薦擴充。chrome用這個幹什麼呢?用來同步書簽等。chrome最近還在做的P2P API也是基于這個庫。

libjpeg homepage

處理jpeg的庫

libjpeg-turbo homepage

用MMX, SSE,和SSE2 SIMD指令加速處理JPEG的庫。

libpng homepage

處理png圖檔的庫

libsrtp homepage

libsrtp是一個實作SRTP協定(Secure Real-time Transport Protocol,安全實時傳輸協定)的庫。chrome的WebRTC就是基于SRTP協定實作的,libjingle也使用了libsrtp。

libvpx homepage

libvpx 是一個開源的WebM(VP8)編碼解碼器.WebM是一個由Google資助的項目,目标是建構一個開放的、免版權費用的視訊檔案格式。該視訊檔案格式能提供高品質的視訊壓縮以配合HTML 5使用。

libwebpdecode homepage

與WebM對應,WebP是Google開發的一種新的圖檔格式,屬于有損壓縮,圖像檔案大小平均比JPEG格式縮小39%。

libxml homepage

xml解析庫,webkit要用。

libxslt homepage

用于xslt處理,webkit要用。

LZMA SDK homepage

7z的sdk,用于安裝包的壓縮。

MesaLib homepage

3D圖形庫,OpenGL的一份實作。

modp base64 decoder homepage

用于Base64解碼。在處理data協定時有用。

NSBezierPath additions from Sean Patrick O'Brien homepage

用于mac os上的圓角矩形,陰影等的處理。

Mongoose homepage

一個web server。

Cocoa extension code from Camino homepage

Camino是Mac OS X上的一個開源浏覽器,chrome在mac上的擴充實作參考了Camino。

npapi homepage

webkit和firefox的插件API。

OCMock homepage

Mac上實作模拟對象(Mock Object)的庫,主要用于測試。

OpenMAX IL homepage

多媒體應用程式的架構标準.

openssl homepage

實作了SSL及相關加密技術的軟體包.

OTS (OpenType Sanitizer) homepage

OpenType是一種可縮放字型,用來替代TrueType。OTS用于OpenType字型的處理。

pdfsqueeze homepage

mac系統上pdf檔案處理。

ppapi homepage

新的插件API,比NPAPI有很多地方做了改進。

protobuf homepage

一種序列化協定,網上有很多介紹。

pyftpdlib homepage

python版的ftp server庫。

pywebsocket homepage

python版得websocket server服務端,用于測試websocket。

qcms library homepage

用于顔色管理,更詳細的介紹可以參考http://muizelaar.blogspot.com/2009/06/qcms-color-management-for-web.html。

Google Safe Browsing homepage

用于Google的安全浏覽(Google Safe Browsing),至于安全浏覽是什麼看下面的圖就清楚了:

chrome使用的開源工程介紹

simplejson homepage

用于JSON處理。

skia homepage

skia是什麼就不說了,android和chrome都在用。

speex homepage

用于壓縮聲音,對人的聲音壓縮率比較高。

SQLite homepage

本地資料庫,用于實作html5裡面的database api。

swig homepage

主要是為了友善Perl, PHP, Python,Java等語言調用C/C++,swig可以生成c/C++代碼的Perl, PHP, Python,Java等語言wrapper代碼。比Java生成JNI代碼的做法更進階。

talloc homepage

記憶體池。

tcmalloc homepage

malloc的實作,速度超快。

tlslite homepage

實作SSL 3.0, TLS 1.0, 和TLS 1.1的python庫

undoview homepage

gtk+擴充,用于支援文本編輯框的無效次數的undo,高亮等。

Webdriver homepage

Web應用程式測試工具。

WTL 8.0 homepage

Windows Template Library,chrome在windows上的UI控件是在此基礎上開發的,也就是windows上chrome ui = skia+WTL.

xdg-utils homepage

XdgUtils是linux上一系列工具,包括前面提到過的xdg-mime。

XUL Runner SDK homepage

主要用于XPCOM開發。

yasm homepage

NASM彙編器。

zlib homepage

壓縮和解壓庫。

Strongtalk homepage

StrongTalk是SmallTalk的變種,用了優化的類型系統。StrongTalk的優點是用類型回報技術來加快運作速度,相關介紹可以參考http://blog.csdn.net/g9yuayon/archive/2006/09/13/1217364.aspx。chrome裡面的v8使用了Strongtalk assembler,可以參考V8 Javascript engine之是以快

繼續閱讀