chromium的RenderProcess的启动
来源:互联网 发布:mit 为什么使用python 编辑:程序博客网 时间:2024/05/22 06:36
RenderProcess与Browser进程中的RenerProcessHost对应,RenderProcess在RenderProcessHostImpl的Init函数中被创建。
Init函数主要进行以下几个工作:
1、建立与RenderProcess进行通信的管道,管道的名称为channel_id。
2、将管道名称channel_id作为子进程启动的参数,调用ChildProcessLauncher启动子进程,子进程可以通过channel_id对应的管道与RenderProcessHost进行通信
3、ChildProcessLauncher经过一系列的调用启动子进程。
- ChildProcessLauncher实例化一个Context对象context_,调用context_的Launch函数。
- Launch函数,Post一个Task到PROCESS_LAUNCHER线程,在该线程中执行Context::LaunchInternal
- LaunchInternal函数,根据是否需要在SandBox中运行子进程,调用LaunchElevatedProcess或者StartSandboxedProcess函数启动子进程
- 启动的子进程是过程和Browser进程的类似,但是这次它带了参数kProcessType,在执行ContentMainRunner::RunNamedProcessTypeMain的时候进入RenderProcess的主函数RendererMain。
Render进程的入口RendererMain在content/render/render_main.cc,它的初始化过程比较简单,主要有以下几个步骤:
1、初始化主消息循环
base::MessageLoop main_message_loop;2、初始化RenderProcessImp。
RenderProcessImpl render_process;3、初始化RenderThreadImpl。
new RenderThreadImpl();4、运行主消息循环
base::MessageLoop::current()->Run();MessageLoop、RenderProcessImpl、RenderThreadImpl它们都是便用单例模式的,通过current()接口就能拿到当前线程中的实例。
其中RenderProcessImpl和RenderThreadImpl的关系图如下:
RenderProcessImpl继承自RenderProcess,而RenderProcess继承于ChildProcess,ChildProcess会包含一个用于处理消息的实例ChildThread,ChildThread继承了Sender和Listener接口,可以用于发收和处理接收到的消息,同时ChildProcess还有一个IO线程,用于IO事件的处理,它其实就是ChildThread中管道channel_所使用的IO线程。
RenderProcess接收到的消息首先会调用ChildThread::OnMessageReceived进行处理
一些控制消息会交给RenderThreadImpl::OnControlMessageReceived函数进行处理,比如新建一个RenderView的消息ViewMsg_New,它会接着调用RenderThreadImpl::OnCreateNewView函数完成RenderView的创建。
- chromium的RenderProcess的启动
- Chromium的启动流程
- Chromium的启动流程
- Chromium启动堆栈调用函数的顺序
- chromium启动的函数调用过程
- Chromium的Render进程启动过程分析
- Chromium的GPU进程启动过程分析
- Chromium的Plugin进程启动过程分析
- Chromium 的 地址栏命令 和 启动参数
- 树莓派使用Chromium启动首页的命令
- 在chromium中加入默认的启动页
- Android之Chromium学习WebView的启动篇幅
- Chromium源码浅析 --- Chromium的多线程机制
- [Chromium] Chromium Android WebView层的设计
- [Chromium学习笔记]了解Chromium的基础知识
- Chromium的Sandbox机制
- Chromium本地化的方法
- chromium的gdb
- 第十四周项目一 (二维数组大折腾)
- Spring事务解析
- SQL数据库中让字段自动更新
- 首篇
- webrtc 名词
- chromium的RenderProcess的启动
- Vijos 1883 月光的魔法(栈)
- Android总结1
- 当虚拟目录不是在80端口且打开ssl时出错 ssl_error_rx_record_too_long .
- 纯代码写iOS
- Dynamics CRM2013 注释中的内容无法正常显示问题
- HDU--2955--Robberies--01背包
- ant的基本使用
- javascript小例子--实现邮箱验证的功能