gecko 相关process分析 大纲,代码总结性结论

用spss插件process做有调节的中介分析的结果解读 点击上方关注我们 一起来成为国家的栋梁吧 SPSS process作为专门分析中介和调节作用的神器,输出界面却不太友好,经常有同学表示SPSS process的结果看不懂。 今天来聊聊SPSS插件process做中介和调节的操作和结果解读,本文以MOLDE1\MODEL4\MODLE6\MODEL7为例进行讲解。 关于process的介绍就不多说了,目前最新版本为V3.5,需要下载插件的同学可到:http://www.processmacro.org/download.html下载 安装步.. 阅读详情

1分别分析b2g process

2和nuwa process,

3 分析b2g 与nuwa的通信交互

4分析messageloop,ipdl

5分析APP如何启动

 

 

结构:

 

                  |-XRE_main
                               |
                               |-XREMain::XRE_main
                                      |
                                      |-new ScopedAppData(aAppData);
                                      |

       |-new ScopedAppData(aAppData);
       |
       |-XREMain::XRE_mainInit//简言之,开启路径获取模块,获取路径
       |
       |-XREMain::XRE_mainStartup//设置关闭检查,创建版本
       |
       |-mScopedXPCOM = MakeUnique<ScopedXPCOMStartup>();
       |
       |-mScopedXPCOM->Initialize();          (toolkit/xre/nsAppRunner.cpp)

       |

       |-XREMain::XRE_mainRun()

 

 

NS_InitXPCOM2

启动xpcom部分:

|
|-NS_InitXPCOM2                       (xpcom/build/XPCOMInit.cpp)
       |
       |-sMessageLoop = new MessageLoopForUI(MessageLoop::TYPE_MOZILLA_UI);//创建UI的messageloop,与界面请求相关,点击等
       |
       |-ioThread = MakeUnique<BrowserProcessSubThread>(BrowserProcessSubThread::IO);
       |-ioThread->StartWithOptions
       |
       |-nsThreadManager::get()->Init();
       |
       |-nsTimerImpl::Startup();
       |
       |-nsComponentManagerImpl::gComponentManager = new nsComponentManagerImpl();
       |
       |-nsCycleCollector_init
       |
       |-nsCycleCollector_startup
       |
       |-JS_Init
       |
       |-nsComponentManagerImpl::gComponentManager->Init();(xpcom/components/nsComponentManager.cpp)
       |     |
       |     |-nsComponentManagerImpl::InitializeStaticModules()
       |     |
       |     |-RegisterModule(...)
       |     |
       |     |-greOmnijar =mozilla::Omnijar::GetReader(mozilla::Omnijar::GRE);
       |     |
       |     |-cl->location.Init(greOmnijar, "chrome.manifest");
       |     |
       |     |-nsComponentManagerImpl::RereadChromeManifests
       |               |
       |               |-nsComponentManagerImpl::RegisterManifest
       |                       |
       |                       |-DoRegisterManifest
       |                                |
       |                                |-ParseManifest
       |                                      |
       |                                      |-...
       |                                      |
       |                                      |-nsComponentManagerImpl::ManifestContract
       |
       |-XPTInterfaceInfoManager::GetSingleton();
       |
       |-nsDirectoryService::gService->RegisterCategoryProviders();
       |
       |-SharedThreadPool::InitStatics();
       |
       |-AbstractThread::InitStatics();
       |
       |-mozilla::scache::StartupCache::GetSingleton();
       |
       |-mozilla::AvailableMemoryTracker::Activate();
       |
       |-NS_CreateServicesFromCategory(...)
       |
       |-mozilla::HangMonitor::Startup();
       |
       |-mozilla::BackgroundHangMonitor::Startup();
       |
       |-sMainHangMonitor = new mozilla::BackgroundHangMonitor

 

NS_initxpcom
总结性:
NS_InitXPCOM2,在b2g进程中调用NS_InitXPCOM2完成了以下工作: 设置挂起时间, 设置线程类型,创建并初始化主线程,启动localfile服务用于获取各文件(app 或gre 文件,在omni.jar中)路径,创建组件服务和管理,自动注册各组件,初始化js 引擎,共享线程和抽象线程初始化,实例化jsloader服务,启动挂起监控,启动后台挂起监控,调用消息队列循环messageloop,再新建一个后台挂起监控。

 

 

前启动app 部分:

|-XREMain::XRE_mainRun()
         |
         |-mozilla::ipc::ProcLoaderClientGeckoInit();//调用ProcLoaderClientGeckoInit与service端建立连接?
         |
         |-mScopedXPCOM->SetWindowCreator(mNativeApp);
         |
         |-startupNotifier->Observe(nullptr, APPSTARTUP_TOPIC, nullptr);//启动观察监听者
         |
         |-mDirProvider.DoStartup();
         |
         |-cmdLine->Init(...)//初始化命令行
         |
         |-obsService->NotifyObservers(cmdLine, "command-line-startup", nullptr);//通知器通知命令行启动
         |
         |-appStartup->CreateHiddenWindow();//创建隐藏窗口
         |
         |-obsService->NotifyObservers(nullptr, "final-ui-startup", nullptr);//通知器通知启动最终ui(窗口)
         |
         |-cmdLine->Run();     (toolkit/components/commandlines/nsCommandLine.cpp)//加载进第一个页面iframe进去???
         |          |
         |          |- nsCommandLine::EnumerateValidators
         |          |
         |          |-nsCommandLine::EnumerateHandlers
         |                  |
         |                  |-EnumRun
         |                        |
         |                        |-nsICommandLineHandler->Handle   (first page will be loaded in here)        //启动第一个页面/窗口(window)
         |                                  
         |-mNativeApp->Enable();
         |
         |-appStartup->Run();     (toolkit/components/startup/nsAppStartup.cpp)//启动各种app,先systme app,homescreen 等?
                   |
                   |-mAppShell->Run();         (widget/gonk/nsAppShell.cpp->widget/nsBaseAppShell.cpp)
                            |
                            |-MessageLoop::current()->Run();  // run forever~~~~~

 

为启动APP做准备:

XRE_MainRun,其所做工作如下:XRE_mainRun()先调用ProcLoaderClientGeckoInit与service端建立连接,启动app观察监听器,初始化命令行,启动命令行(cmdLine),创建隐藏窗口。启动最终ui(窗口),cmdLine->Run()一波复杂的操作最后会启动出第一个(hiden)页面/窗口(window),appStartup->Run()调mAppShell->Run()无限循环messageloop,等待APP启动请求?

 

nuwa进程做了些什么:

ProcLoaderServiceRun初始化命令行,new ContentProcess()传入了b2g pid作为参数,为创建子进程做各种准备:为子进程创建io子线程,创建uiloop消息循环线程,new一个ProcLoaderChild()作为进程加载器的子端,创建loaderChild,open发一个messageloop去建立连接通道,使建立连接通道,接着loaderChild这侧就在等b2g端的load信号了

 

交互部分:

b2g和nuwa这里用的ipdl通信机制,大体如下:在b2g里SendLoad,Nuwa则RecvLoad, SendLoadComplete进行一系列Load操作,比较不理解的是b2g那里一直没RecvLoadComplete,连OnMessageReceived都没执行.不过其load交互大体如此,在一个进程发,另一个进程收并去做相应工作。第一次的时候,它Load的目的是完整的Load它(nuwa)自己,至于后面的nuwa如何Load出其他进程

 

b2g让Nuwa创建新进程:

在b2g main thread 中,SendNuwaFork() 发送fork新进程的消息,在nuwa main thread中,会RecvNuwaFork(),并开始去做真正的fork工作(一系列操作。。)。fork完之后会发消息sendAddNewProcess 给b2g让它继续给nuwa发消息预加载新进程,供下一个APP用。ioloop 线程专门用于接收进程间的消息。每个进程中其ioloop线程与main thread 建立通道。

 

疑问:

为何b2g调了NS_InitXPCOM2  启动xpcom相关模块后,nuwa 还要继续来一次?

新进程从哪步开始出来的?新进程的产生过程及相互进程间的消息传递。

每个进程都有一个主线程吗?它的作用是什么,它们下面子线程相互通信可以实现吗?是如何实现的?
 

Omnijar.h

```

  /**
   * Initializes the Omnijar API with the given directory or file for GRE and
   * APP. Each of the paths given can be:
   * - a file path, pointing to the omnijar file,
   * - a directory path, pointing to a directory containing an "omni.jar" file,
   * - nullptr for autodetection of an "omni.jar" file.
   */
  static void Init(nsIFile* aGrePath = nullptr, nsIFile* aAppPath = nullptr);


```

 

messageloop 机制:

ioloop 线程专门用于接收进程间的消息。每个进程中其ioloop线程与main thread 建立通道。专门用于处理进程间需要发送接收消息的需求,配合其他机制实现消息同步异步等操作。

 

gecko/dom/ipc/模块所承担的工作:

 

 

猜想:

一开机就启动system app(b2g中,app startup部分?),启动三个还是两个,至少两个进程(keyboa,homescreen),nuwa进程就是一个模板进程,同时具备附加的孵化其他进程的能力的增强版普通进程。不对,应该是先启动prealloc放在那里,然后当系统启动完成(未进入homescreen,),system app去启动homescreen,keyboard app,然后就在shell.html里渲染出界面了。

所以,所有app启动的触发当然是在system app(从gaia传过去的),也就是从content process 要到b2g process 才能使创建进程。

 

b2g启动过程:

b2g到nuwa再从 nuwa fork出的preallocated process 如何成为app process,过程基本:nuwa 被load 出来,初始化完善自己。完成后给b2g NuwaReady的消息,b2g开始消息使nuwa 开始fork新进程preallocated process。preallocated proc完成线程重新创建初始化等后给消息给b2g。若有app需要启动,则b2g 进程会setappinfo对preallocted proc改名为相关的APP应用名,否则就一直等待有新应用请求。开机app启动的顺序是preallocate proc ,home screen ,再到keyboard .每当preallocated proc被改名后成为具体APP应用后,b2g 会立马发消息给nuwa创建新的preallocated proc 预备着等新应用入驻。

 

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

 

 

 

 

SPSS_Process—简单&平行&链式中介模型 本篇文章介绍采用SPSS的插件Process对简单中介、链式中介、平行中介模型进行检验的操作方法及结果解读。 阅读详情

相关推荐

vs编译和测试xpcom组件

XPCOM ( Cross Platform Component Object Model),是一个跨平台的软件框架,它使开发人员把一个大的软件工程分解成各个小的独立的模块,然后再运行时再组装在一起,这就是组件化的思想。原理类似于MSCOM,需要理解其原理可以参考《com本质论》。进一步了解xpcom请进https://developer.mozilla.org/en-US/docs/XPCOM

houkai6的专栏 2911

b2g process: XREMain::XRE_mainRun

b2g process 中到后面主要的几个大模块: 结构图抄自:https://blog.youkuaiyun.com/zembers/article/details/48495627 |-XRE_main | |-XREMain::XRE_main | |-new ScopedAppData(aAppData); | |-XREMain::XR...

hunter 380

Firefox OS启动过程分析-b2g进程启动

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; R

zembers的专栏 2068

利用C++创建XPCOM组件(英文)

转自:http://www.iosart.com/firefox/xpcom/About This is a step-by-step tutorial on creating, building and registering an XPCOM component on Linux and MS Windows. Download The complete source

温研的专栏 (探索OS内核的奥秘) 2979

Gecko框架解析

Geckok框架解析 前言:第一次写博客啊,写的不好的地方欢迎拍砖。最近刚刚入职,对淘宝的一些中间件框架情有独钟,瞻仰了各种大神,在此致敬boyan大侠,感觉各种牛逼,想想自己简直水的不行啊,人生还是需要不断努力擦性啊。废话不多说... 这是一个java NIO 通讯组件,之前存在很多关于NIO其他框架,比如mina(发高性能和高可用性的网络应用程序)、Netty等。Gecko在NIO包上提供

juxianalibaba的专栏 3287

Python 实战:构建动态仪表盘快照与 Diff 平台,实现周期采集、结构变化检测与异常波动留证

我长期专注 Python 爬虫工程化实战,主理专栏 👉 《Python爬虫实战》:从采集策略到反爬对抗,从数据清洗到分布式调度,持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”,让数据价值真正做到——抓得到、洗得净、用得上。

喵手的博客 113

Spark-to-Paper:从研究灵感到论文初稿的AI科研智能体框架实践

多智能体系统是人工智能领域的重要研究方向,它通过多个智能体之间的协作与交互,共同完成复杂任务。其核心原理在于将大问题分解为子任务,由不同专长的智能体分工处理,并通过通信机制协调行动。这种架构在提升任务处理效率和解决复杂问题方面展现出巨大技术价值。在工程实践中,多智能体框架常被应用于自动化工作流、智能决策支持等场景。本文聚焦的Spark-to-Paper项目,正是这一技术在科研自动化领域的具体实践。它构建了一个由多个AI智能体(如调研员、实验员、写作者)协同工作的框架,旨在将初步的研究想法(Spark)自动化

weixin_34306593的博客 310

JAVA编写的Gecko内核浏览器源码

用JAVA编写的多种浏览器Demo程序,集成火狐的Gecko内核、调用IE内核

XPCOM指南-1_XPCOM概述

XPCOM概览 本章为XPCOM的快速导览,对XPCOM和组件开发的基础思想和技术做了说明,这些说明从较高层次来描述的,只是为了熟悉一下本指南需要的一些背景知识。 1. XPCOM 解决方案 XPCOM ( Cross Platform Component Object Model),是一个跨平台的软件框架,它使开发人员把一个大的软件工程分解成各个小的独立的模块,然后再运行

阿波的专栏 8234

MobaXterm终端工具个人学习版安装包及常用配置备份

资源包含 MobaXterm 个人版的安装包以及日常运维常用的基础配置备份文件。适用于网络工程师及运维人员用于日常的服务器管理、SSH 连接及串口调试。 压缩包内附带了个人整理的软件使用技巧与配置说明(仅供个人学习参考)。请各位同行下载后注意,技术工具请尽量支持官方正版,本资源仅供个人测试与交流使用,切勿用于商业环境。

AI图像去噪实战:5种最新深度学习模型在超声图像处理中的效果对比(附代码)

本文对比了2022至2024年间五种前沿深度学习模型在超声图像去噪领域的实战效果,包括FDDL-Net、MG-CNFNet、Dual-TranSpeckle、可控去噪模型及Wave-Mamba。文章深入剖析了各模型的核心创新与架构,并提供了可运行的代码片段,旨在帮助医学影像算法工程师根据不同的性能、速度与临床需求,选择最合适的AI图像去噪解决方案。

1a2s3d4f5g的博客 915

Gecko 线程分析一

线程管理及主要线程 作为一个浏览器内核,Gecko所要完成的任务是非常繁杂的,其主要任务就是根据用户提供的资源地址(网址或本地文件路径),通过http协议从Web服务器中取得页面文档,然后解析其内容,最后根据一定的约定在浏览器指定区域中显示出页面,其中往往涉及网络编程及图形界面编程,而大家通常都知道的是网络编程中的连接、读取数据等往往需要考虑到服务器端的情况,一般采用异步方式来确保有效处理服务端

BruceBaoZhiqiang的专栏 2150

国产麒麟系统中的PaddleOCR离线绿色部署:高效安全的文字识别新纪元

摘要:本文详细介绍了PaddleOCR在银河麒麟V10SP1系统上的离线部署方案。通过Conda虚拟环境隔离依赖,采用离线包安装方式实现无网络部署,支持80+语言识别。重点讲解了模型量化剪枝优化、多线程处理等性能调优技巧,并提供了完整的OCR识别代码示例。该方案具有数据本地化处理的安全优势,适用于医疗票据数字化等对隐私要求严格的场景,同时解决了模型加载失败、内存不足等常见问题。

墨夶的博客 1228

Mozilla FireFox Gecko内核源代码解析(1.nsParser)

Mozilla FireFox Gecko内核源代码解析 (1.nsParser) 中科院计算技术研究所网络数据科学与工程研究中心-信息抽取小组 耿耘 gengyun@sohu.com 前言: 在Web信息抽取的工作过程中,我们主要处理的都是经过各种处理HTML格式文档,而无论是DOM方式还是视觉方式的信息抽取,都需要对HTML进行解析,而最标准的解析器莫过于浏览器内核引擎,因此,对于...

yuanlanxiaup 1305

OK3588-C开发板Forlinx Desktop系统烧录与多媒体功能实战

本文详细介绍了OK3588-C开发板Forlinx Desktop系统的烧录步骤与多媒体功能实战。从硬件准备到软件工具配置,逐步解析RKDevTool烧录技巧,并深入测试摄像头、视频编解码及音频功能,帮助开发者快速掌握RK3588芯片的强大性能与Ubuntu系统的优化应用。

weixin_29190169的博客 417

Python爬虫实战:5分钟搞定慢慢买历史价格查询(附完整代码)

本文提供了一份Python爬虫实战指南,教你如何快速编写脚本自动查询慢慢买网站的商品历史价格。文章详细拆解了环境准备、接口分析、核心代码实现及常见问题应对,并附有完整代码,帮助读者将爬虫技术应用于日常比价,实现高效购物决策。

weixin_29053577的博客 1010

【Firefox os】【kaios】创建一个ipdl

ipdl就是用一种安全的方式实现进程或线程间通信,kaios里面最直白的使用IPDL的原因就是:有些XPCOM,或者有些功能,函数,必须在主进程跑。如果这个时候你在子进程,你就需要告诉你的父进程去做那些功能。 ipdl的知识需要从官网去学: https://developer.mozilla.org/en-US/docs/Mozilla/IPDL 学习完了发现要自己创建一个新的还是挺困难

Tifa_Ai的博客 3193

基于深度学习的图像修复系统,GAN图像修复,图像修复算法研究,并实现系统登录和注册,全网独发

近年来,深度学习已成为计算机视觉领域的研究热点,基于深度学习的图像修复技术弥补了传统修复方法长期存在的不足,显著提高了生成结果的质量。深度学习是指模仿人脑机制设计的具有深层结构的神经网络。深度学习作为一种表征学习,通过模仿人脑神经元之间的信息传递方式来学习输入数据的特征,并找到输入和输出数据之间的映射关系。通过在图像修复中应用深度学习技术,可以准确学习图像的语义信息,然后根据信息预测缺失的内容,大大克服了传统修复算法的不足,使结果更具逻辑性。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 8265

gecko.dom.ipc进程通信:PContent,PNuwa,Process三系分析

gecko/dom/ipc/此模块承担的工作是什么:   dom/ipc如下,每个ipdl文件对应3个头文件, ipdl的生成文件,   几个类的继承关系 两个系列:PContent  和PNuwa,Process系,三个系   一 PContent系 PContent.ipdl生成三个文件: objdir-gecko/ipc/ipdl/_ipdlheaders/moz...

hunter 505

SAP Fiori 会话超时全解析:从 Launchpad 到 Identity Authentication 的统一策略

SAP Fiori会话超时机制解析与配置策略 本文深入探讨SAP Fiori项目中的会话超时机制,分析其对系统安全和用户体验的双重影响。文章系统拆解了SAP Fiori Launchpad与SAP Cloud Identity Services之间的会话超时工作原理,重点介绍了两种超时机制:服务器驱动的超时(通过SESSION_TIMEOUT_STOP_DATA_REFRESH参数控制)和UI驱动的超时(通过SESSION_TIMEOUT_INTERVAL_IN_MINUTES参数控制)。文中结合制造业产线

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 213

第076篇:大涡模拟进阶

大涡模拟(Large Eddy Simulation, LES)是介于直接数值模拟(DNS)和雷诺平均方法(RANS)之间的重要湍流模拟方法。本文深入介绍动态Smagorinsky模型、尺度相似模型、WALE模型和隐式LES等高级亚格子模型。通过Python实现槽道湍流和圆柱绕流的LES求解器,详细展示近壁面处理、动态系数计算和亚格子应力建模技术。大涡模拟,亚格子模型,动态模型,Smagorinsky,WALE模型,尺度相似模型,近壁面处理,槽道湍流LES的核心思想是对Navier-Stokes方程进行空间

2401_87715305的博客 740

multiprocessing解析(一):Process的解析

最近项目中为了提升Python的运行效率,要使用到multiprocessing模块,场景其实不算复杂但是为了避免带来一些隐晦的bug,我觉得还是深入了解一下它比较好。因为当我使用multiprocessing的时候我觉得Python替我做的事情太多了(其实也就是用multiprocessing太方便了)给我带来了快感却没有安全感,还有一个主要的原因就是我觉得fork是最”奇幻”的函数。 可能会分

liuxingen的专栏 2万+

YOLOv8_obb训练流程-原理解析[旋转目标检测理论篇]

本文主要介绍了YOLOv8旋转目标检测的流程,介绍了标签的解码、预测结果的解码,以及如何理解旋转角度等内容,还介绍旋转目标检测框的正样本选取及Loss计算。

ice 4732

Mozilla FireFox Gecko内核源代码解析(3.nsScanner)

Mozilla FireFox Gecko内核源代码解析 (3.nsScanner) 中科院计算技术研究所网络数据科学与工程研究中心 信息抽取小组 耿耘 gengyun@sohu.com   前面我们介绍了nsParser,nsTokenizer,它们之上都需要调用nsScanner获取基本的字符串信息,这里我们来介绍一下这个nsScanner。 n

计算所信息抽取小组专栏 3万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Mozilla FireFox Gecko内核源代码解析(5.CNavDTD)

Mozilla FireFox Gecko内核源代码解析 (5.CNavDTD) 中科院计算技术研究所网络数据科学与工程研究中心 信息抽取小组 耿耘 gengyun@sohu.com   上一章中我们介绍了nsHTMLTokens,再加上之前介绍的nsHTMLTokenizer,我们了解到火狐的HTML解析器首先HTML源代码进行分词并整理成一个个Token,这些Token是我们

计算所信息抽取小组专栏 3万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上一篇: 进程与线程的一个简单解释
下一篇: 永久解决 adb error: insufficient permissions for device的问题
nedwons
博客等级 码龄9年 311粉丝 572原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值