据此了解Chromium开发流程
常用git命令
开始工作 (下载代码)
$git pull --rebase && gclient sync
修改代码,提交,测试
$git checkout -b -t my_new_feature origin/master // 创建分支
$git cl upload // code review
$git cl try // 触发try bot
try bot失败,因为你忘了某个文件
$git add forgotten_file.cc$git commit
根据review进行修改后,不要忘了提交,测试
$git cl upload
$git cl try
提交补丁
review过了,try bot也没问题,就可以提交代码了。使用commit queue进行提交。通常code review界面会有一个”commit”按钮。如果你发现它不可用或有问题,报告一个bug并给它一个Build-CommitQueue标签。
如果你是一个committer,当CQ有问题时,请手动提交patch。
常用链接
说明 | 链接 |
---|---|
文档 | dev.chromium.org |
Code Reviews | codereivew.chromium.org |
Bugs | bugs.chromium.org 或 crbug.com |
IRC | chromium on freenode.net |
源码 | src.chromium.org |
Mailing list | chromium-dev@chromium.org |
Buildbots | build.chromium.org |
Chromium基础设施 | https://chromium.googlesource.com/infra/infra/+/master/doc/index.md |
概述
怎么样加入Chromium开发呢?通常,你可能涉及掉如下工作流中的1到多种:
- 弄台能编译Chromium的机器
- 下载代码
- 修改和编译代码
- 测试代码
- 上传并发起code review
- 提交补丁
开发机器
Chromium是一个大大工程!
- 超过20000个编译文件
- 100多个库
- 巨量的可执行文件(Linux Debug版超过了1.3G)
为什么有这么多可执行对象?
- 更容易升级
- 更快的加载速度
- 链接漫长 :(
即便是编译32位的版本,你仍然需要一台64位的机器。因为链接需要4GB以上的虚拟内存。
基本要求:
- 多核
- 大量的内存
- 足够块的硬盘
否则,你进行一次编译可能需要数十个小时。
windows:
- win7 Z840
- Visual Studio 2015(如果你想要用它来调试的话)
- 参照windows编译说明
Mac OS X
- Mac Pro
- 10.7 +
- Xcode5 或更高版本
- Mac OS X编译说明
Linux
- Z840
- 64位ubuntu
- Linux编译说明
获取代码
源码树
源码树是:
- 用于编译Chromium的代码
- 所有位于src目录下的文件组成
- 还有来自许多Chromium依赖的工程的文件
因为源码树包括了许多其它工程的文件,所以完整的checkout也会下载这些工程的代码。
内核chromium代码只是其中的一部分
基本步骤
- 安装Depot Tools
- 执行fetch chromium下载所有代码并生成编译文件
详细说明请访问:
http://dev.chromium.org/developers/how-tos/get-the-code
安装Depot tools
depot_tools是Chromium和Chromium OS用于管理checkouts和code reviews的一个脚本包。包括gclient, gcl, git-cl, repo等
包括check out代码和并把目录加入到搜索路径中(PATH)。详细说明
一个简单的例子:
$git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
$export PATH=`pwd`/depot_tools:"$PATH"
第一个命令会把Depot Tools check out到本地子目录”depot_tools”。
第二个命令把该工具加入到搜索路径中。
Depot Tools做些什么
depot tools由一系列脚本组成,它们用于:
- 管理所有的Chromium源码数的check outs
- 生成平台相关的编译文件
- 上传变更进行review
常用工具:
glient - 同步源码树并生成编译文件
git-cl - 集成code reivew和tryjobs
Depot Tools怪癖
- Depot Tools安装实际上是一次git checkout
- gclient每次运行时会更新它自己而且可能在这个过程中出错
- gclient sync不但更新代码还会重新生成编译文件(隐式执行了gclient runhooks)
准备好编译了吗?
编译之前,你需要准备好编译Chromium所需要的所有代码。总结而言,简单的两步就可以搞定:
- 安装Depot Tools
bash
$git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
$export PATH=`pwd`/depot_tools:"$PATH"
- 下载代码
bash
$fetch chromium
修改与编译
开发环境
各种平台和IDE都可以用,选择一个适合你的就行。
常用的配置:
- Linux: vim/emacs
- Mac: Xcode
- Windows: Visual Studio
编译代码,ninja
可以在任何系统上执行(Mac, Linux, Windows)
在src目录:
$ ninja -C out/Debug chrome
编译release版
$ninja -C out/Release chrome
编译到out/Debug目录,也可以指定其它目录,例如:out/Debug/Chrome
要执行clean build,可以把out目录下面的东西删除掉。
调试
调试器需要attach到browser和renderer进程,但默认情况下,只是attach到了browser
要attach到renderer进程,可以这么做:
- 使用–single-process标志启动
- 手动attach
详细说明页面:Linux
遵循良好风格
通过Chromium bug tracker找给Bug来解,或通过搜索代码中的TODOs寻找一任务。
注意:并不是所有的bug都是需要fixed,在你决定花时间之前,先咨询一下资深的项目成员。
Chromium设计文档从高层视角说明了Chrome各个组件的架构。
遵循编码规范
测试
Chromium有很多很多的测试!
可以粗率的分为下面几类:
- 单元测试(Unit tests)
- Browser tests
- 性能测试(Performance tests)
- Layout tests
也会通过Valgrind执行某些测试以发现内存和线程相关问题。
通常,由开发者提交patches到try server进行编译,并在所有平台上运行所有的测试。
测试概述
大部分测试是用C++写的,基于gtest,代码都放在Chromium’s仓库。
Layout tests是用HTML/CSS/JS写的,代码放在Webkit’s仓库。
一般而言,只要编译你所修改的代码相关的测试就行。
Try Server
try server是在所有平台测试你的修改的最方便、最容易方法。强烈推荐!
try server会单独checkout 一份代码,应用你上传的变更,编译并执行所有相关的测试。
提交你的变更到try server:
Git: checkout 你想要测试的代码,然后执行git cl try(需要commit 权限)。如何成为committer。
就因为不想等待try server返回结果,而提交了某些有问题的代码,是很不好的。
上传,进行review
为什么要进行code review
Chromium代码量巨大,而且复杂,为了隐藏IPC、线程、资源管理的细节,使用了很多的抽象层。
通过把变更代码上传到Chromium的Rietvel进行review。
review通过才能签入代码。
上传代码
你觉得你的代码已经OK,并进行测试后才发起review。
git cl upload
Finding reviewers
发起review
Tips
- 【遵循编码规范】(http://dev.chromium.org/developers/coding-style)
- 修改描述要简单,易懂。
- 修改不要太多,尽量限制在一定范围,这样review的人容易理解,也可以更好的review你的修改。不相关的修改要进行分解。
- 在尝试进行一些大的修改之前,发邮件给review的人,进行讨论,以确定采用了好的解决方案。
指引
- 为Chromium做正确的事,而不是快速提交代码。
- 如果你要修改你之前不熟悉的代码,要把熟悉的人加入到review中,即便修改很简单
- 类似的,如果你被邀请review你不熟悉的代码,那么你有业务把更熟悉这部分代码的人加入到reviewer中