b2g启动时,运行”/system/b2g/b2g”,入口在”gecko/b2g/app/B2GLoader.cpp”中,如下:
int
main(int argc, const char* argv[])
{
/**
* Reserve file descriptors before loading static data.
*/
FdArray reservedFds;
ReserveFileDescriptors(reservedFds);
/*
* Before fork(), libxul and static data of Gecko are loaded for
* sharing.
*/
bool ok = LoadStaticData(argc, argv);
if (!ok) {
return 255;
}
return RunProcesses(argc, argv, reservedFds);
代码执行流程如下所示:
main() (b2g/app/B2GLoader.cpp)
|
|-ReserveFileDescriptors
|
|-LoadStaticData
|
|-RunProcesses
|
|-fork
|
|-XRE_ProcLoaderServiceRun (child(nuwa) process)
|
|-b2g_main (parent(b2g) process) (b2g/app/nsBrowserApp.cpp)
|
|-android::ProcessState::self()->startThreadPool();
|
|-(void)setsid();
|
|-do_main
|
|-mozilla::StartBootAnimation();
|
|-XRE_main
|
|-XREMain::XRE_main
|
|-new ScopedAppData(aAppData);
|
|-XREMain::XRE_mainInit
|
|-XREMain::XRE_mainStartup
|
|-mScopedXPCOM = MakeUnique<ScopedXPCOMStartup>();
|