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线程,来响应咱们界面的事件。
未完待续,上班了先。哪里有错请指正,欢迎交流!!!!