chrome.dll与chrome_child.dll又合并在一起了


发布于 2020-02-15


记得最开始从事Chromium开发是2013年初,那时候改的Chromium内核是21。Chromium的代码还是用svn维护的,配上代理,拉取代码拉了几天几夜,整个开发环境配了一周时间。

后来到了2014年左右吧,升级完内核之后发现chrome.dll被分离成chrome.dll与chrome_child.dll两个了。当时主要有几个原因:

  • windows上的PDB文件大小有不超过1GB的限制。随着Chromium越来越复杂,PDB文件的大小已经慢慢接近1GB了,有时候因此而导致一些编译链接失败。符号仓库也不支持超过GB大小的PDB文件
  • chrome.dll太大导致做PGO性能优化经常失败
  • browser和render的场景不一样,所以需要把这两部分逻辑分到两个不同的可执行文件中,syzygy分别做性能优化
  • 单独编译可以减少编译链接时间

同时也提供了一个is_multi_dll_chrome开关来控制是否分离成2个dll。

2017年又有人提出需要把chrome.dll与chrome_child.dll合并在一起了,理由如下:

  • 减少整体二进制文件的大小和程序运行时内存的占用
  • 目前编译器已经支持2GB大小甚至4GB大小的PDB文件了

至于PGO性能优化的问题,他们发现合并成一个dll竟然比之前分开的两个dll性能还好,与预想的不一样啊。

然后从Chromium 79版本开始,chrome.dll与chrome_child.dll又合并在一起了。

参考: