标签:chromium
RenderProcess与Browser进程中的RenerProcessHost对应,RenderProcess在RenderProcessHostImpl的Init函数中被创建。
Init函数主要进行以下几个工作:
1、建立与RenderProcess进行通信的管道,管道的名称为channel_id。
2、将管道名称channel_id作为子进程启动的参数,调用ChildProcessLauncher启动子进程,子进程可以通过channel_id对应的管道与RenderProcessHost进行通信
3、ChildProcessLauncher经过一系列的调用启动子进程。
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
原文地址:http://blog.csdn.net/ljm198745/article/details/41514581