Chromium fast start机制

我们知道Chromium有一个Browser进程,多个Renderer进程。如果已经运行了Chromium浏览器,再通过快捷方式启动浏览器,会打开新的浏览器窗口,显示新标签页。或者创建一个新的浏览器进程,给它传递一个url参数,比如https://www.baidu.com/,就会在现有的窗口里面打开一个百度的页面。查看浏览器的进程,发现仍然只有Browser进程,那么第二次创建的新创建的进程哪里去了呢?
这就是Chromium的fast start机制。如下图所示:

Browser进程启动之后,ChromeBrowserMainParts会创建一个ChromeProcessSingleton对象。ChromeProcessSingleton里面又包含了一个ProcessSingleton。ProcessSingleton是用来在两个不同的Browser进程之间通信的。
在ChromeBrowserMainParts::PreMainMessageLoopRunImpl的时机,ProcessSingleton会创建一个以user data路径为窗口名的消息窗口。
创建了一个新的浏览器进程之后,在AttemptFastNotify里面会给Browser进程的user data路径为窗口名的消息窗口发送WM_COPYDATA消息,消息的参数里面包含当前进程的命令行参数信息。
Browser进程的ProcessLaunchNotification函数会处理来自新创建浏览器进程的WM_COPYDATA消息,调用ProcessSingletonNotificationCallback创建StartupBrowserCreator,解析新创建浏览器进程的命令行参数,执行打开的逻辑。
最后新创建浏览器进程就退出了自己。

 

《Chromium fast start机制》有1个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注