Chromium之启动篇

原创
2013/04/18 14:57
阅读数 1.5K

Chromium代码编译完成了!!!

这庞然大物如何发动的呢,工程如此浩大,为了跨平台,为了组织那么多工程。各种Wrapper,领着人云里来雾里去,有种只可远观,不可玩弄的感觉,这货怎么添加自己的代码啊。

好吧,咱就先从入口开始吧,只要有空就记录一下子,希望给感兴趣的人一点帮助吧!(希望如此,不知道会不会误人子弟呢。。。。。。。。)。

以Windows为例,Linux我也不会。。。。。。。在Linux的版本还没编译出来。。。。。


大家知道Windows上的可执行程序肯定会有个入口点函数的,也就是Main函数。咱就从她开始了!

chrome_exe_main_win.cc中的
int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE prev, wchar_t*, int)就是Chromium的入口了,这里她把字符串相关的都指定为了Unicode,wchar_t,wstring等,不知道为什么这样写死呢,为啥不用_T来自适应呢?

初始化一下环境,就进入了RunChrome中,只有退出程序才会从这里返回了。RunChrome主要就是定位chrome.dll的位置,然后把它加载进来::LoadLibraryExW(),这里有给定的W结尾的函数。然后定位ChromeMain的地址。
DLL_MAIN entry_point =
      reinterpret_cast<DLL_MAIN>(::GetProcAddress(dll_, "ChromeMain"));
ChromeMain位于chrome_main.cc

此后她有转战content_main.cc中的content::ContentMain(instance, sandbox_info, &chrome_main_delegate);

然后再杀回browser_main.cc中的int BrowserMain(const MainFunctionParams& parameters).

途径void BrowserMainLoop::CreateThreads().启动Browser进程中的各种线程,以备将来干活用之。

其中void BrowserMainLoop::MainMessageLoopStart() 是Browser进程中的UI线程,来响应咱们界面的事件。

未完待续,上班了先。哪里有错请指正,欢迎交流!!!!


展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部