引子

关注我微博的朋友都知道我最近去了Google的Chrome组。 具体我所在的组是在做Chromium的输入相关的工作,比如鼠标事件,键盘事件,手势事件之类的东西, 所以大家有相关的bug也可以报给我。 因为工作不涉及闭源部分,基本上我算是一个开源软件工作者。 本文也会只涉及Chromium的开发,下面我统一叫Chrome。

环境部署

我部署的环境在Linux上的,基本上我们组的同事也是主要在Linux工作站(24核48线程,编译一遍只需要10分钟)上开发, 需要远程开发的时候就用笔记本的Chrome Remote Desktop,完全用SSH会导致Layout Test无法运行。

部署步骤可以看这篇文章, Android的话可以看这篇文章。 Chrome的构建系统以前用的是GYP,现在用的是ninja,都是为Chrome写的,所以基本也就只有Chrome在用-_-|||。

由于构建系统不是主流的玩意,基本上不需要考虑有很好的IDE支持。对于IDE支持我暂时尝试过Clion和Eclipse, 结果是Clion基本不需要考虑了,读入项目等待了1个小时都还没有反应;Eclipse的话相对好一些,大概2分钟就开始有反应, 然后后台index,index大概花了2个半小时,写代码的时候的提示还可以,只是不可以关,Eclipse没有对index的结果缓存。

IDE行不通之后我试了VIM,VIM的配置文档在这里。 注意要先配好Clang,而去将Build改成用Clang,文档在这里。 我配完玩了有点鸡肋,补全找到的东西不是很好,跳转会显示找不到文件,会报一堆错。我本来以为只有我自己是这样,问了一下其他同事,他们也是这样,我可受不了这样的渣渣。

暂时我找到最好的编辑器是Sublime Text,文档在这里, 我昨天配了半个小时,暂时只有Lint工作得不正常(每行都报错)。代码补全还不错,不过只能在Linux下工作,而且件作者已弃坑-_-|||。

链接

吐槽一下吧,很多东西都是没有文档的,特别有些Feature是其他公司写的,连设计文档都没有-_-|||。

代码片段

怎样获得call stack

#include "base/debug/stack_trace.h"

base::debug::StackTrace st; st.Print();

测试

我做的这块有两种测试一个叫Layout Test, 一块叫Blind Unit Test。其实二者没有很严格分开使用范围,很多不是Unit Test的也写在Blind Unit Test。 Layout Test是用HTML写的,原理是build一个开放了浏览器内部API的浏览器。这样什么东西都能测。 Blind Unit Test是Unit Test,Mock了很多东西,所以有时候逻辑不能完整跑,好处是可以拿到很多浏览器内部状态去检查。

Blind Unit Test没有文档,代码在third_party/WebKit/Source/web/tests,然后执行ninja -C out/Default webkit_unit_tests运行。