Chromium源代码工程目录分析

来源:互联网 发布:如何更改淘宝店招 编辑:程序博客网 时间:2024/05/22 02:15

总体概览

Chromium分为3个大模块(包括第三方库):浏览器,渲染器,WebKit。浏览器负责主进程,UI展现和I/O。渲染器一般是由浏览器调用的标签子进程。它嵌入WebKit中做布局和渲染。
你应该熟读多进程架构和Chromium如何显示web页。

快速介绍sln文件

有2个sln文件,chrome.sln是使用V8引擎的普通版本,chrome_kjs.sln是使用Webkit的JavaScriptCore(JSC)引擎的版本。一般都是用V8,保留JSC就是为了看有bug时,这bug是不是跟V8有关。
-App/chrome_dll和App/chrome工程是启动代码。
-Libraries/base工程是通用库代码。这个代码是所有工程共用的,我们会尽量让它保持短小精悍。
-Browser/common中是浏览器相关的通用库代码。它是浏览器和渲染器共用的。
-Webkit(只读)目录下的工程是Webkit的代码。它的上层是Google的支持Windows接口的WebKit(自己的)/port,WebKit(自己的)/glue是嵌入层。
-glue与Browser/renderer工程相关,它用来展示每个子标签页里跑的子进程。
-Browser/browser工程提供了UI、存储、网络等功能。


顶层工程

拿到Chromium代码后,你会发现有很多顶级目录。有这些:
-base:所有子工程共用的通用代码。它包括字符串操作,通用库等。只有在所有顶层工程间共用时,才往这里加东西。
-gfx:共用图形类。它是Chromium的GUI的基础。chrome/common/gfx下还有一些图形类,它是Chromium应用程序专用的。
-breakpad:Google的开源crash报告工程。它是直接从Google Code的svn中拉过来的。
-build:所有工程共用的编译配置。
-chrome:Chromium浏览器(参考下面)。
-data:运行证书测试的data文件。
-gears:离线浏览。
-googleurl:Google的开源URL解析判别库。它是直接从Google Code的svn中拉过来的。
-net:Chromium中的网络库。在运行webkit里的简单test_shell时,它可以从Chromium中分离出来单独用。可以参考下chrome/common/net。
-sandbox:沙箱。它能防止恶意页面修改你的系统。
-skia:Google为Android开发的Skia图形库。它是从Android代码里复制过来的。base/gfx中的附加类封装了它。
-testing:包含Google的开源单元测试工具GTest。
-third_party:集中放第三方库,比如图片解码,压缩库之类的。也有些Chrome专用的第三方库放在chrome/third_party里。添加新包
-tools:不解释,你知道的。
-V8:V8 js库。它是直接从Google Code的svn中拉过来的。
-webkit:所有跟Chromium的Webkit相关的东西:
-build:工程文件和其他工程相关的配置。
-data:大多数目录下的data都是给转换层的单元测试用的。layout_tests目录是直接从Apple拉过来的WebKit的布局测试套件。
-glue:glue层是个嵌入层。它负责Webcore类型和Chrome程序类型(大多STL)之间的转换,同时还提供了很多好用的函数来访问我们需要用到的Webcore的对象。
-tools
-layout_tests:运行WebCore布局测试的脚本。
-merge:帮助合并WebKit树的脚本。
-npapi_layout_test_plugin:专门用来测试插件层的插件。
-test_shell:一个非常简单的独立的浏览器。不用运行巨大的Chromium程序,就可以测试glue和转换代码。

"chrome/"下目录树的简要说明
-app:"app"是最基础的程序。它一开始就运行,根据当前进程的能力来分别分派到浏览器或渲染器代码中。它包括chrome.exe和chrome.dll 2个工程。一般你不需要修改它,顶多就是改改图片和字符串这些资源。
-locales:此工程用来生成本地化dll。
-resources:图标和光标。
-theme:窗体主题的图片。
-browser:前端包括主窗体和UI,后端包括I/O和存储。它与渲染器管理页面相关。
-common:这下面的文件在浏览器和渲染器之间共用,同时也给一些其他的工程用。这些代码是专门给Chromium(而不是基础程序)用的,但在chrome/浏览器和chrome/渲染器目录之间可以共用。
-gfx:Chromium专用的图形和渲染相关的助手代码。有些图形上的东西必须也提供给外面顶层的base/gfx使用。
-net:net上层的顶级模块上一些Chromium专用的东西。将会与browser/net合并。
-installer:制作安装包(MSI包)的源文件和工程文件。
-plugin:在其他进程中运行浏览器插件的代码。
test:
-automation:测试用来驱动浏览器UI的,比如test/ui,test/startup等。它会在浏览器中与browser/automation交互。
-page_cycler:执行页面循环测试的代码(比如性能测试)。参考tools/perf/dashboard。
-reliability:页面载入的分布式可靠性测试和crash定位。
-selenium:ajax和js等的第三方测试套件的选择性测试的代码。参考test/third_party/selenium_core。
-startup:测试启动性能。参考tools/perf/dashboard和tools/test/reference_build。
-ui:浏览器UI测试,比如打开标签页等。它使用test/automation来完成大部分操作。
-unit:单元测试的基础代码。测试代码一般和被测试文件放在一起,命名为*_unittest.cc。
-third_party:Chromium专用的第三方库。还有一些第三方库放在顶层的third_party里。
-tools
-build:编译相关的工具等。
-buildbot:编译机器人配置。编译机器人管理自动编译系统。参考third_pary/buildbot。
-win:在Windows下编译的东西,包括工程属性用的.vsprops文件和脚本。
-memory:内存工具。现在包括设置页面堆配置的gflags。
-perf/dashboard:将性能日志(比如test/startup_test)转换为数据和图形。
-profiles:历史数据随机生成器。用来生成测试概况(profile)。
-views:用来开发UI的简单框架,提供渲染、布局和事件处理。大多数浏览器UI都是用这个系统实现的。这个目录包括基础对象。另外还有些浏览器专用的对象在browser/views里。

通用操作的代码路径
附加信息和更多的例子在Chromium如何显示web页面里。

原创粉丝点击