应用的启动及b2g,nuwa,preallocated ,app 消息的获取与传输。

几个阶段:

1.b2g 初始化自身,并请求与Prenuwa 连接,(做好准备,各种数据及环境配置窗口创建等)目的是Load Nuwa。(入口/nsAppRunner.cpp:4349,Fun:XRE_mainRun)

nsAppStartup.cpp:320,Fun:Run 作为与PreNuwa的接口吧?(启动app的入口)

2.PreNuwa 从b2g fork出来,初始化并运行ProcLoader service 端(ProcLoaderServiceRun)

3.(未知谁请求的)PProcLoaderParent.cpp:444,Fun:OnChannelConnected连接成功,ContentParent.cpp:772,Fun:RunNuwaProcess 开始load 请求,具体Load

4.开始RunNNuwaProcess(b2g, ContentParent.cpp:772,Fun:RunNuwaProcess),此为Load Nuwa的模块,细节一系列复杂操作,最终 preNuwa ContentChild.cpp:716,Fun:Init call -- GetIPCChannel()->BlockScripts();使b2g能连接通道?

5.Nuwa Load 请求成功,b2g GeckoChildProcessHost.cpp:1106,Fun:OnChannelConnected call -- OpenPrivilegedHandle(peer_pid: 547 ); 连接上通道,b2g  /ProcessUtils_linux.cpp:309,Fun:ProcLoaderClientDeinit   call MessageLoop::current() 释放client资源,意味着其使命完成。

6.PreNuwa 设置ContentChild.cpp:768,Fun:InitProcessAttributes call -- SetProcessName(NS_LITERAL_STRING('(Nuwa)'), false); 设置名字。目前为止只是有了nuwa的名字,

7.Nuwa进程 对Nuwa进行完善,ContentProcess.cpp:126,Fun:Init call -- mXREEmbed.Start(); 初始化/XPCOMInit.cpp:535,Fun:NS_InitXPCOM2 开启各种各样线程??(未完全确定是否是这里)

ContentChild.cpp:1104,Fun:InitXPCOM call -- InitOnContentProcessCreated();

...

ContentChild.cpp:2539,Fun:OnFinishNuwaPreparation

完成这里后,nuwa就具备基本的b2g线程,似乎也与hidden window 建立连接?但还可以基于此nuwa真正创建新进程。

8.将目前这个进程设置为Nuwa, Nuwa.cpp:1976,Fun:MakeNuwaProcess.

Nuwa.cpp:2000,Fun:MakeNuwaProcess call -- OnNuwaProcessReady()

NuwaChild.cpp:301,Fun:OnNuwaProcessReady call -- mozilla::unused << nuwaChild->SendNotifyReady()

接着b2g 就收到消息了,ContentParent.cpp:3141,Fun:OnNuwaReady call -- PreallocatedProcessManager::OnNuwaReady(); -

9.现在可以基于nuwa来fork进程了,preallocated process 管理器请求创建新进程(preallocated proc)

PreallocatedProcessManager.cpp:420,Fun:OnNuwaReady call -- NuwaFork(),

10.fork新进程,

b2g 发消息NuwaParent.cpp:285,Fun:operator() call -- mozilla::unused << self->SendFork();nuwa收到消息NuwaChild.cpp:179,Fun:RecvFork,

具体:

nuwa 进程Nuwa.cpp:1902,Fun:NuwaSpawnPrepare,

Nuwa.cpp:1944,Fun:NuwaSpawn call -- pid = ForkIPCProcess(); --->

Nuwa.cpp:1839,Fun:ForkIPCProcess call -- * Fork a new process that is ready for running IPC.

Nuwa.cpp:1790,Fun:AddNewProcess call -- AddNewIPCProcess(pid:757, aInfoList, aInfoSize);

/NuwaChild.cpp:278,Fun:AddNewIPCProcess call -- * AddNewIPCProcess() is called by Nuwa process to tell the parent * process that a new process is created 告诉b2g 新进程已创建,应该是返回值0/1,

/Nuwa.cpp:1876,Fun:ForkIPCProcess call -- ReplaceIPC(sProtoFdInfos, sProtoFdInfosSize);创建进程的点

Nuwa.cpp:1608,Fun:RecreateThreads call -- * Recreate all threads in a process forked from an Nuwa process.重建线程

/ContentChild.cpp:620,Fun:ResetTransports -----重置连接通道

11.设置进程名称,b2g与目标Preallocated proc建立连接并初始化它,设置名字

b2g 收到创建进程成功的消息,NuwaParent.cpp:238,Fun:RecvAddNewProcess ------------------------

GeckoChildProcessHost.cpp:472,Fun:LaunchAndWaitForProcessHandle call -- PrepareLaunch(); 准备启用APP进程,异步启动循环几次message loop后收到目标pid,GeckoChildProcessHost.cpp:1106,Fun:OnChannelConnected call -- OpenPrivilegedHandle(peer_pid: 757 );

建立连接成功,获取xpcom属性,获取隐藏窗口,也是在这里nuwa fork出的子进程完成了,return 0;

Pre_Preallocated proc ,Nuwa.cpp:1893,Fun:ForkIPCProcess call -- return pid:0; 子进程返回0

Pre_Preallocated proc ,ContentChild.cpp:774,Fun:InitProcessAttributes call -- SetProcessName(NS_LITERAL_STRING('(Preallocated app)'), false); ---> 进程设置自己的名字

ContentChild.cpp:590,Fun:InitOnContentProcessCreated --进程初始化

12.准备成为其他APP应用的进程,

ContentChild.cpp:2576,Fun:RecvAppInfo 接收到APP信息,谁发的?似乎是b2g 的nsAppstartup。

preallocated proc,ContentChild.cpp:998,Fun:GetProcessName 获取到进程名字,两个进程获取了同一个窗口???所以连接?未知

13.b2g 创建应用,

b2g ,ContentParent.cpp:1296,Fun:CreateBrowserOrApp call -- bool isInContentProcess = !XRE_IsParentProcess(); 创建应用,

b2g ,ContentParent.cpp:1454,Fun:CreateBrowserOrApp call -- p = GetNewOrPreallocatedAppProcess(ownApp, --->获取preallocated proc进程,

极其重要的一条,b2g ,ContentParent.cpp:1812,Fun:TransformPreallocatedIntoApp 把preallocated 和app 打通。

prea,ContentChild.cpp:764,Fun:InitProcessAttributes --初始化进程属性,设置进程名为home screen

完成了第一app 应用进程的创建。

b2g 中一直有nsAppStartup.cpp:599,Fun:GetShuttingDown -------,它是要关什么?且一直关,没完没了?公用的关闭应用进程用的?

homescreen 也ContentChild.cpp:998,Fun:GetProcessName -是要获取点击图标时获取的应用吗

14.第2个app 应用,

不知谁通知了preallcoated proc 管理器,在b2g里面就自动开始创建preallocated ,应该是有一个队列?或者前面将preallocated 给APP应用后会返回值,小意思。

循环,preallocated 的创建过程,

b2g,PreallocatedProcessManager.cpp:433,Fun:NuwaFork.

b2g, NuwaParent.cpp:276,Fun:ForkNewProcess

nuwa ,/NuwaChild.cpp:179,Fun:RecvFork ,

NuwaChild.cpp:143,Fun:NuwaFork,

NuwaChild.cpp:109,Fun:DoNuwaFork,

Nuwa.cpp:1944,Fun:NuwaSpawn call -- pid = ForkIPCProcess();

Nuwa.cpp:1838,Fun:ForkIPCProcess

等等,

/NuwaChild.cpp:288,Fun:AddNewIPCProcess call -- RefPtr<RunAddNewIPCProcess> runner = new RunAddNewIPCProcess(aPid:885, maps);把创建出的进程调度到主线程中?谁的主线程

NuwaChild.cpp:290,Fun:AddNewIPCProcess call -- NS_DispatchToMainThread(runner);

以上在nuwa中做的,

接着就进入preallocated ,进行线程重建,初始化等

b2g收到已创建的消息,开始准备装入APP应用进程ContentParent.cpp:3161,Fun:OnNewProcessCreated call -- content = new ContentParent(this,。GeckoChildProcessHost.cpp:472,Fun:LaunchAndWaitForProcessHandle call -- PrepareLaunch(); 准备启动,也在b2g中进行通道创建和连接,GeckoChildProcessHost.cpp:1205,Fun:InitializeChannel call -- CreateChannel(mExistingFileDescriptor);

ContentParent.cpp:2554,Fun:ContentParent call -- Open(mSubprocess->GetChannel(), base::GetProcId(mSubprocess->GetChildProcessHandle())); --->连接成功,对新创建的prea proc 进行初始化ContentParent.cpp:3166,Fun:OnNewProcessCreated call -- content->Init();

Pre preallocated 设置自己的名字为preallocated,

preallocated进程 收到appinfo,并接收到app int初始化

b2g 创建APP应用,并

ContentParent.cpp:822,Fun:GetNewOrPreallocatedAppProcess ----------------------------------
ContentParent.cpp:1812,Fun:TransformPreallocatedIntoApp ----------------------------------
将preallocated proc 与APP应用连接好,

然后连通好之后的preallocated proc

ContentChild.cpp:764,Fun:InitProcessAttributes ----------------------------------
ContentChild.cpp:774,Fun:InitProcessAttributes call -- SetProcessName(NS_LITERAL_STRING('(Preallocated app)'), false); --->
ContentChild.cpp:789,Fun:SetProcessName ----------------------------------
ContentChild.cpp:789,Fun:SetProcessName ----------------------------------
ContentChild.cpp:998,Fun:GetProcessName ----------------------------------
设置进程属性,设置进程名。

完成keyboad 应用的进程入驻。

15.接着又循环下去

应用的启动及b2g,nuwa,preallocated ,app 间消息的获取与传输相关推荐

  1. b2g 启动Log分析:b2g,nuwa,preallocated,app

    https://blog.csdn.net/hunter___/article/details/83016461 https://blog.csdn.net/hunter___/article/det ...

  2. iOS APP项目图片尺寸大全(启动页、icon、App Store展示图片)

    iOS项目开发中需要用到很多的项目图片其中启动页.icon.App Store展示图等的尺寸较多一下我会汇总出来各种尺寸 1.启动页尺寸 以上红圈里面是首页版APP启动页的尺寸大全,iPad不需要支持 ...

  3. ios framework 查看symbol_iOS开发高级分享 - App间账号共享与SDK封装

    本篇博客就先封装一个LoginSDK, 让后将该SDK植入到两个App中(一个暂且叫做"App One", 另一个暂且称为"App Two").当App One ...

  4. iOS开发高级分享 - App间账号共享与SDK封装

    本篇博客就先封装一个LoginSDK, 让后将该SDK植入到两个App中(一个暂且叫做"App One", 另一个暂且称为"App Two").当App One ...

  5. 京东App秒级百G日志传输存储架构设计与实战

    本文作者:平台业务研发部-武伟峰,数据与智能部-李阳 背景 在日常工作中,我们通常需要存储一些日志,譬如用户请求的出入参.系统运行时打印的一些info.error之类的日志,从而对系统在运行时出现的问 ...

  6. 快速集成APP注册页面免费获取短信验证码功能

    前言: 最近这段时间都忙着优化自己的个人项目,好久没来总结分享了,今天就抽空跟大家分享一下快速集成APP注册页面免费获取短信验证码功能吧. 一.使用第三方短信SDK前期准备: 在这里我是使用了第三方免 ...

  7. 错误 程序包android.app不存在,运行.app时Android Studio获取包名称错误

    运行.app时Android Studio获取包名称错误 我将程序包名称从com.mycompany.myapplication更改为com.mycompany.testapp. 一切都构建良好,但是 ...

  8. Android APP间跳转

    1. 通过包名启动APP 启动方式,只需知道目标APP包名即可 例如:app1 跳转到app2 app2包名为:com.demo.skipdemo app1启动代码如下: //通过目标APP的包名创建 ...

  9. iOS iOS9下实现app间的跳转

    自从更新了Xcode7后,苹果公司增加了白名单. 在实现app跳转时,必须把app的唯一标示URL加入到白名单中 - (BOOL)canOpenURL:(NSURL *)url这个方法才会返回yes否 ...

最新文章

  1. sqlplus连接时出现错误:shared memory realm does not exist 解决
  2. 解决Swift中present(uiImagePickerController,animated: true,completion: nil)闪退的问题
  3. Java常见内存溢出(OOM)解决方案
  4. SAP 金额在表中的存储及货币转换因子
  5. html5结构与表现分离原则,网页简单布局之结构与表现原则分享
  6. nginx配合python_人生苦短我用python[0x02] nginx与python结合
  7. win7休眠设置在哪里_win7电脑不休眠怎么设置
  8. android 数组排重方法,js数组去重方法集合 - osc_779ncf3o的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. python学习第六天运算符总结大全
  10. 黑科技 | 电脑必备黑科技软件
  11. 熊猫直播显示连接服务器失败,熊猫直播提示加载失败,请按“菜单键”刷新解决办法...
  12. 录入人员照片注意事项无身份证人员录入
  13. python制作u盘病毒_Python-记一次U盘中病毒及文件找回
  14. Final SwfPlayer下载后在安卓12上玩宇宙的刻度2
  15. matlab限幅器无饱和怎么设置,基于MATLAB 的直流电动机双闭环调速系统的仿真研究...
  16. ORACLE中dual的详解及其故障恢复
  17. Supervisor 安装与配置
  18. 2008春节祝福短信 鼠年春节祝福语
  19. HTML5期末大作业:西安旅游网站设计——西安旅游(7页) 大学生旅游网页作品 出行网页设计作业模板 学生游玩网页制作源代码下载
  20. php--生成excel的个人简历

热门文章

  1. Adaptive Hash Index(自适应hash索引)
  2. 老友记第一季21集背诵句
  3. 递归解析树形结构数据,
  4. 书籍《大象–thinking in UML》
  5. linux下qt制作日历,基于QT实现的日历程序
  6. 泰捷视频:靠谱的应用 不太靠谱的样品
  7. 人到中年,要和好看的人交往
  8. Vue leaning(入门)第三弹
  9. Android面试题汇总(中高级)及答案解析,2023年企业面试题精选
  10. net.sf.json的maven依赖